반응형
- 소프트웨어: 컴퓨터를 작동시키는 프로그램, 하드웨어의 동작을 제어하는 수많은 명령어로 구성
- 컴퓨터가 다양한 분야에 이용되면서 사회와 비즈니스, 개인 생활에 큰 영향을 줌
- 소프트웨어 개발은 단순한 컴퓨터 지식, 프로그래밍뿐 아니라 설계 및 실험 방법, 응용 분야에 대한 이해, 심지어 인간 공학과 프로젝트 경영 기술까지 요구
1.1 소프트웨어
- 프레드 브룩스의 소프트웨어 특징 4가지
- 복잡성(Complexity): 수많은 상호작용
- 순응성(Conformity): 요구나 환경, 데이터의 변화에 따라 적절히 변형
- 변경성(Changeability): 개발과정에서 자주 변경, 규모가 커질수록 연쇄적인 변경이 일어나 어려움
- 비가시성(Invisibility): 소프트웨어는 구조가 코드 안에 숨어 있어 쉽게 드러나지 않음
1.1.1 소프트웨어의 종류
소프트웨어 분류 | 특징 | 사용되는 카피의 수 | 요구되는 하드웨어 성능 | 개발인력 |
주문형 소프트웨어 | 특정 고객 또는 기업의 요구를 만족시키기 위해 제작 | 적음 | 낮음 | 많음 |
패키지 소프트웨어 | 패키지화하여 상업적으로 판매 ex) 워드프로세서, 스프레드시트 등 |
중간 | 높음 | 중간 |
임베디드 소프트웨어 | 다른 시스템에 내장된 소프트웨어 | 많음 | 중간 | 적음 |
1.1.2 시스템
- 필요한 기능을 실현시키기 위하여 관련 요소를 어떤 법칙에 따라 조합한 집합체
- 각 서브시스템들은 서로 상호작용하며 통합되어 하나의 거대한 시스템 형성
- 시스템의 네 가지 중요한 성질
- 서브시스템: 시스템은 밀접히 관련된 서브시스템들로 구성
- 기능적 분할: 시스템은 규모가 작은 부속 서브시스템들로 나눌 수 있음
- 시스템 경계: 시스템과 주변 환경을 구분할 수 있는 경계가 있으며 이곳은 입력과 출력이 만나는 곳
- 자동화 경계: 자동화 부분과 수동 작업 부분을 나누는 경계
1.2 소프트웨어 개발 작업
1.2.1 기본 활동
- 네 가지 기본 활동
- 명세화(specification): 소프트웨어 제작 단계 이전의 요구사항을 엄격하게 정리하여 부정확하게 개발하여 실패하는 것을 방지
- 구현(coding): 주어진 설계에 대해 최선의 방법으로 구현
- 검증(verification): 소프트웨어가 고객의 의도와 일치하는지 확인
- 유지보수(maintenance): 결함은 수정, 요구에 맞게 수정
1.2.2 개발 작업의 특징
- 소프트웨어는 사람의 지적 활동에 의해 구축됨
- 소프트웨어 개발의 어려움
- 명세화의 어려움: 보고 사용해보기 전까지는 필요한 것을 정의하기 어려움
- 재사용의 어려움: 전에 만들어 놓은 컴포넌트를 다른 소프트웨어에 적용할 수 없음
- 예측의 어려움: 외부 요소(업무 절차, 법규, 하드웨어, 데이터 형식 등)의 영향으로 예측이 어려움
- 유지보수의 어려움: 다른 사람이 개발한 소프트웨어를 쉽게 이해하기 어려움
- 고품질의 어려움: 한 줄의 코드를 수정하더라도 테스트할 내용이 많아짐
1.3 소프트웨어 공학의 접근법
- 즉흥적인 소프트웨어 개발: '프로그래밍 ➡︎ 만족할 때까지 수정 ➡︎ 개선을 위한 아이디어 짜내기'의 반복
- 문제점
- 개발 지연과 예산 초과
- 낮은 품질
- 유지보수 곤란
- 재작업
1.3.1 소프트웨어 공학의 정의
- 소프트웨어를 개발하기 위해 체계적으로 접근하고 원리를 적용하는 것
1.3.2 소프트웨어 공학의 목표
- 복잡도 낮춤: 큰 문제를 작은 문제로 나누는 방법 제공
- 비용 최소화
- 개발 기간 단축
- 대규모 프로젝트 관리
- 고품질 소프트웨어
- 효율성
소프트웨어 공학은 여러 가지 '원리와 방법'을 적용하여 품질 좋은 소프트웨어를 최소의 비용으로 계획된 일정에 맞추어 개발하는 것
1.4 소프트웨어 공학의 주제
- 단계적 프로세스: 소프트웨어에 대한 비전과 개념을 먼저 파악하고 구현할 때까지 정해진 순서의 작업 수행
- 품질 보증: 개발 작업에 의한 산출물이 요구와 일치하는지 품질 수준에 맞는지 검사 = QA
- 프로젝트 관리: 노력 예측, 프로젝트 계획, 일정, 리스크 관리, 행정 등 관리 감독
1.4.1 단계적 프로세스
- 소프트웨어 개발을 코딩에 치중하지 않고 요구분석, 설계, 코딩, 테스팅 등 정해진 절차를 따라 작업하는 것
- '소프트웨어 위기'를 해결하기 위한 핵심 접근 방법
단계 초점 주요작업과 기술 결과물 분석 시스템을 위해 무엇을 만들 것인가? 분석 전략 수립
요구 결정
유스케이스 분석
구조적 모델링
동적 모델링요구분석 명세서 설계 시스템을 어떻게 구축할 것인가? 설계 전략 수립
아키텍처 설계
인터페이스 설계
프로그램 설계
데이터베이스, 파일 설계설계 명세서 구현 시스템의 코딩과 단위 시험 프로그래밍
단위 테스팅
시스템 안정화 및 유지보수새 시스템,
유지보수 계획테스팅 시스템이 요구에 맞게 실행되나? 통합 테스팅
시스템 테스팅
인수 테스팅
시스템의 설치
프로젝트 관리 계획테스팅 결과 보고서
1.4.2 품질 보증
- 바람직한 소프트웨어가 가져야 할 특징
- 유지보수성
- 신뢰성
- 효율성
- 유용성
1.4.3 프로젝트 관리
- 소프트웨어 프로젝트에 대한 세 가지 제약 조건
- 범위, 시간, 비용
- 프로젝트 관리 활동의 구분
- 프로젝트 계획: 개발 시작 전, 범위 결정, 타당성 검토, 방향성, 방법, 일정 등 계획
- 자원 관리: 인력, 도구, 하드웨어 등 적절한 자원을 선정하고 할당하여 관리
- 리스크 관리: 실패 요소를 예측하고 분석하여 대비책 세우기
- 프로젝트 수행과 모니터링: 모든 작업이 계획에 맞게 진행되고 있는지 확인
- 소프트웨어 공학 분야의 연구결과
주제 의미 사례 요리에 비유 방법
(method)소프트웨어 제작에 사용하는 기법이나 절차 구조적 분석, 설계 방법
객체지향 분석, 설계 방법익히는 방법 도구
(tool)자동화된 시스템 설계 도구
프로그래밍 도구
테스트 도구요리 도구 프로세스
(process)도구와 시법을 사용하여 작업하는 순서 Unified Process
eXtreme Programming조리 순서 패러다임
(paradigm)접근 방법, 스타일 구조적 방법론
객체지향 방법론음식 스타일 - 소프트웨어 공학 지식 체계(SWEBOK)
1.5 연관 분야
1.5.1 연관 지식 영역
- SWEBOK v3.0에서 정의한 연관 지식 영역 다섯 가지
- 소프트웨어 공학 전문가 기량(Software Engineering Professional Practice): 전문성, 집단 역학과 심리학, 소통 기술
- 소프트웨어 공학 경제학: 기초, 생명주기 경제학, 위험과 불확실성, 경제학 분석 방법론, 실무적 고려사항
- 컴퓨팅 기반: 문제 해결 기술, 추상화, 프로그래밍 기초, 언어 기초, 디버깅 툴과 기술, 자료구조와 표현, 알고리즘
- 수학적 기반: 집합, 관계, 함수, 논리 기초, 검증 기초, 계수 기초, 그래프와 트리, 확률 밀도 함수 등
- 공학적 기반: 경험적 기반, 통계 분석, 측정, 공학 설계 등
1.5.2 소프트웨어 공학과 컴퓨터 과학
- 컴퓨터 과학은 기술적인 측면에만 집중하는 반면 소프트웨어 공학은 기술 외적인 측면도 고려하여야 함
- 밀접한 관련이 있음
반응형
'CS수업' 카테고리의 다른 글
[소프트웨어공학] 02. 프로세스와 방법론(1) (0) | 2021.08.23 |
---|