Chap 01. 소개

윤희빈·2026년 7월 22일
post-thumbnail

1 소프트웨어

1.1 소프트웨어의 특징

  • 소프트웨어
    • 프로그램 + 프로그램의 개발, 운용, 보수에 필요한 정보 일체
    • 개념적이고 무형적 (생산물의 구조가 코드 안에 숨어 있음)
  • 소프트웨어의 특징
    - 복잡성(complexity)
    - 순응성(conformity)
    - 요구나 환경, 데이터의 변화에 따라 적절히 변형되는 특징
    - 변경성(changeability)
    - 쉽게 변경할 수 있고 개발 과정에서 자주 변경된다.
    - 비가시성(invisibility)
    - 구조가 코드 안에 숨어 있어 쉽게 드러나지 않는다.

소프트웨어의 유형

  • 맞춤형 소프트웨어
    • 한국은 si 산업이 많다. (발주가 들어오면 개발 해주는 산업) → 제약 상황이 다수
      • 폐쇄환경, 리소스 제약..
  • 패키지형 소프트웨어
    • 한국은 약한 면모가 있다.
    • 시장의 다양한 요구에 의해 결정
    • 특정 기관의 요구에 꼭 맞지 않을 수도 있다.
  • 임베디드 소프트웨어
    • 시스템에 내장된 소프트웨어

1.2 프로그래밍

  • 프로그래밍 자체가 소프트웨어 엔지니어링은 아니다.
    • 프로그래밍 : 혼자 코드를 작성하고 테스트하는 개인적인 작업
    • 소프트웨어 개발 : 프로그래밍 + 요구사항 파악 + 테스팅 + 요지보수 + …
      • 여러 사람이 모여서 일하는 협업하는 전체 작업을 포함한다.

소프트웨어와 시스템

  • 시스템
    • 필요한 기능을 실현시키기 위하여 관련 요소를 어떤 법칙에 따라 조합한 집합체

      시스템의 요소

2 소프트웨어 개발 작업

2.1 기본 활동

  • 개발에 필요한 기본 활동
    - 명세화
    - 잘못된 개발로 실패하는 것을 방지
    - 구현
    - 시스템의 명세를 주어진 여건에 맞게 설계하고 프로그래밍 언어로 변환
    - 검증
    - 구현된 소프트웨어가 고객의 의도와 일치하는지 확인
    - 요지보수
    - 사용 단계의 결함이나 요구 변화에 맞게 수정

2.2 개발 작업의 특징

  • 인적요인
    • 소프트웨어는 공장에서 대량 생산하는 것이 아님 → 사람의 지적활동이 직접 관련
      • 2배의 인원을 투입한다고 개발 생산성이 2배가 되지 않는다!
      • 소프트웨어의 질과 양 → 참여한 개인의 능력에 크게 좌우됨.
  • 소프트웨어의 비가시성 → 생산성과 품질의 정의를 어렵게함.
    • 다른 공학에 비하여 기술과 원리를 구축하기 어려움.

명세는 설계의 결과물로 이루어지는 것이고 이것을 이용해서 코딩함.

  • 명세화의 어려움
    • 고객의 의도를 처음부터 이해하기 쉽지 않다.
  • 재사용의 어려움
    • 다루는 문제가 똑같지 않아 미리 재사용할 부품을 만들기가 어렵다.
  • 예측의 어려움
    • 물리 법칙을 따르는게 아니라, 여러 외부 요소의 영향을 받아 사전 견적이나 프로젝트의 규모를 예측하기가 쉽지 않다.
  • 유지보수의 어려움
    - 다른 사람이 개발한 소프트웨어를 유지보수하기 어렵다.

소프트웨어의 위기

SW 수요 급증 + 복잡성 증가에 비해 기존 방법(인력/방법/도구)이 충분하지 않아서 발생한 문제

하드웨어 생산 기술의 발전에 비하여 소프트웨어 기술 발전의 속도가 현저히 느리다!

3 소프트웨어 공학의 접근법

즉흥 개발의 문제점

즉흥적인 소프트웨어 개발

즉흥적인 소프트웨어 개발은 코딩과 수정이 반복된다.

  • 개발 지연/예산 초과
  • 낮은 품질
  • 유지보수 곤란
  • 재작업 증가

3.1 소프트웨어 공학 정의

  • 대규모 소프트웨어를 다수가 개발하기 위하여 체계적으로 접근하고 원리를 적용하는 것
  • SW의 개발·운영·유지보수·소멸에 대한 체계적 접근 방법
  • 개발 방법이 일회성이 아니라 반복 사용 가능해야 함

3.2 소프트웨어 공학의 목표

  • 복잡도 낮춤

    • 큰 문제를 소규모의 작은 문제로 나누는 방법을 제공
  • 비용 최소화

    • 필요하지 않는 일이나 중복되는 일을 최소화하기 위한 여러가지 작업방법
  • 개발 기간 단축

  • 대규모 프로젝트 관리

  • 고품질 소프트웨어

    • 결함이 있다면 모두 해결되어야 하므로 테스트와 유지보수 작업 방법이 필요함
  • 효율성
    - 표준화에 도움이 되며 성과도 높아진다.

  • “원리와 방법”을 적용해 좋은 품질을 최소 비용/계획 일정에 맞춰 개발

  • 4 소프트웨어 공학의 주제

    품질과 생산성, 비용이라는 목표를 달성하기 위하여 소프트웨어 공학은 크게 3가지 작업으로 나눌 수 있다.

    1. 단계적 프로세스
    2. 품질 보증 QA
    3. 프로젝트 관리

    4.1 단계적 프로세스

    요구분석~테스팅 등 정해진 절차를 따름 (코딩만 치중 X)

    데브옵스라고도 한다.

    단순히 깃허브만 쓰는 것이 아니라, 도커와 쿠버네티스도 사용할 수 있다.

    • 요구 분석
    • 설계
    • 코딩
    • 테스팅

    4.2 품질 보증

    산출물/문서/코드/테스트를 통해 품질 확인 및 검토

    • 검토
    • 확인
    • 테스팅

    바람직한 소프트웨어가 가져야할 특징

    • 유지보수성
    • 신뢰성
    • 효율성
    • 유용성

    평가기준은 사용하는 입장과 만드는 입장이 다르다.

    • 사용자 + 개발자
      품질이 높고 사용자 요구를 잘 만족시키며 결함이 포함되지 않은 소프트웨어.
      생산 비용이 적고 개발 기간이 짧으며 보안이 잘되어야함.
    • 개발자
      하드웨어 자원의 효율성, 재사용성, 검사용이성, 요지보수 용이성

    4.3 프로젝트 관리

    계획/자원/리스크/수행 모니터링 + (시간·비용·범위/품질 제약)

    • 소프트웨어 공학의 연구 결과

    소프트웨어 공학의 연구 결과

    5 관련 분야

    1) 연관 분야(요지)

    • 두 축으로 연결됨:
      • 컴퓨터공학의 원리/기술 관련 여러 원리
      • 이를 적용해 특정 문제를 해결하려는 응용 도메인

    2) 컴퓨터 과학 vs 소프트웨어 공학

    • 컴퓨터 과학(이론/기능) + 고객(문제) → 소프트웨어공학으로 이어짐(현실 문제 해결 지향)

    고객의 요구사항까지도 소프트웨어 공학의 범주이다.


    profile
    비니비니히비니의 정리블로그

    0개의 댓글