본문 바로가기
Computer Science/Software Engineering

[소공] 1장 소프트웨어공학 소개

by na1-4an 2023. 9. 7.

1-1 소프트웨어

1. 소프트웨어란?

: 프로그램과 그 외의 문서로 이루어진 것. 여기서 말하는 문서는 프로그램의 개발 및 운용 등에 필요한 정보 문서.

2. 소프트웨어의 특징(6)

: 복잡성, 순응성, 변경성, 비가시성, 복제용이성, 비마모성

 (마모되다: 마찰 부분이 닳아서 없어지다)

3. 소프트웨어의 유형(3)

소프트웨어 분류 특징 소프트웨어 카피 수량 요구되는 하드웨어 개발 인력
주문형 소프트웨어 특정 대상의 요구를 만족시키기
위해 제작한 소프트웨어
적음 낮음 많음
패키지 소프트웨어 패키지화 해 상업적으로 판매하는 소프트웨어. 워드프로세서  중간 높음 중간
임베디드 소프트웨어 다른 시스템에 내장된 소프트웨어 많음 중간 적음

4. 시스템이란?

: 필요한 기능을 실현하기 위해 관련 요소를 어떤 법칙에 따라 조합한 집합체

5. 시스템의 성질(4)

: 서브 시스템, 기능적 분할, 시스템 경계, 자동화 경계

(시스템 경계: 시스템의 내부, 외부가 존재)

1-2 소프트웨어 개발 작업

1. 개발 작업의 기본 활동(5)

: 명세화 →설계 → 코딩 → 검증 → 유지보수 (→ 명세화...의 반복)

2. 개발 작업의 특징 및 어려움(5)

  - 명세화의 어려움: 고객 의도 파악을 정확하게 하기 어려움

  - 재사용의 어려움: 미리 재사용할 부품을 제작하기 어려움

  - 예측의 어려움: 외부 요소의 영향을 받아 플젝 규모 예측이 어려움

  - 유지보수의 어려움: 타인의 코드를 이해하고 고치기 어려움.

  - 고품질의 어려움: 모든 실행 조합을 테스트 하는 것은 불가능

3. 소프트웨어 위기란?

: 소프트웨어 수요와 복잡성이 증가함에 따라, 기본 방법이 충분하지 않아 발생하는 문제

4. 소프트웨어 위기의 원인

: 요구 증가, 복잡도 증가, 난이도 증가   +   같은 인력, 같은 방법, 같은 도구

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

1. 즉흥적인 개발의 문제점(5)

: 개발 지연, 예산 초과, 낮은 품질, 유지보수 곤란, 재작업 발생

2. 소프트웨어 공학이란?

: 소프트웨어의 개발, 운영, 유지보수, 소멸에 대한 체계적인 접근 방법.

3. 소프트웨어 공학의 목표(6)

: 복잡도 (↓), 비용 (↓), 개발 기간 (↓), 대규모 프로젝트 관리, 고품질 소프트웨어, 효율성

(한마디로, 품질 좋은 소프트웨어를 최소 비용으로 계획된 일정에 맞추어 개발하는 것)

1-4 소프트웨어 공학의 주제

1. 목표를 달성하기 위해 다루는 분야(3)

  - 단계적 프로세스(생산성!): cycle(계획 → 분석 → 설계 → 구현 → 테스팅 및 통합 → 유지보수)

  - 품질 보증(V&V)(품질!):

       (1) 검토: 단계별로 맞게 진행되었는지 검사

       (2) 확인: 단계의 결과물이 수준에 맞게 생산되었는지 검사

       (3) 테스팅: 구현된 소프트웨어를 실행해 예상된 결과를 보이는지 확인

  - 프로젝트 관리(비용과 시간!): 프로젝트 계획, 자원관리, 리스크 관리, 프로젝트 수행과 모니터

2. 품질과 관련된 바람직한 소프트웨어 특성(4)

: 개발자 입장 - 유지보수성, 효율성 / 사용자 입장 - 신뢰성, 유용성

3. 소프트웨어 공학의 결과(4)

: 방법(소프트웨어 제작에 사용하는 기법, 절차), 도구(자동화된 시스템), 프로세스(작업 순서), 패러다임(접근 스타일)

1-5 관련분야

1. 소프트웨어 공학의 역할

: 컴퓨터 공학 분야와, 응용 도메인 분야 사이에서 중간 가교 역할을 한다.

(응용 도메인: 컴퓨터 공학을 적용해 특정 문제를 해결하려는 분)

2. 지식 분야 by SWEBOK 3.0 (15)

  - 공학 측면(5): 요구사항, 설계, 개발, 테스트, 유지보수

  - 관리 측면(5): 형상관리, 관리, 프로세스, 방법론, 품질

  - 학문 측면(5): 소프트웨어공학 전문가 역량, 소프트웨어공학 경제학, 컴퓨팅 기반, 수학적 기반, 공학적 기반

3. 컴퓨터과학과 소프트웨어공학의 차이점(3)

  컴퓨터과학 소프트웨어공학
강조 계산효율, 자원공유, 정확성, 최적화, 성능 생산성, 품질, 비용, 시간
측정 정량적으로 즉시 측정 가능 SE방법, 도구, 프로세스는 즉시 측정 안 됨
집중 기술적 측면에 집중 기술 외적인 측면에 집중(비즈니스, 인간 공학 등)

4. 컴퓨터과학과 소프트웨어공학의 관계

: 컴퓨터 과학의 이론과 기술적인 기초가 소프트웨어 공학에 적용된다.