-
소프트웨어 공학_1CS 2020. 6. 26. 15:56
1. 소프트웨어 생명주기
[ 타당성 검토 → 개발 계획 → 요구사항 분석 → 설계 → 구현 → 테스트 → 운용 → 유지보수 ]
1) 정의
ㆍ사용자 환경 및 문제점 이해에서 시작, 운용/유지 보수에 이르기까지의 모든 과정
2) 목적
ㆍ프로젝트 비용 산정과 개발 계획 수립 기본 골격 구성, 용어 표준화, 프로젝트 관리
3) 생명주기 선정
ㆍ기업에서 프로젝트의 개발 프로세스를 테일러링 하는데 중요한 활동.
(테일러링(tailoring)이란 주어진 대상에 딱 맞게 줄이거나 늘리는 것을 말한다.)
ㆍ개발의 리스크와 불확실성 및 이에 대한 이해를 바탕으로 수행, 모델은 리스크/불확실성을 최소화 해야한다.
4) 소프트웨어 생명주기 모델 유형
ㆍ폭포수 모델
[ 계획수립 → 요구분석 → 설계 → 개발/구현 → 테스트 → 유지보수 ]
- 폭포에서 물이 떨어지는 것 처럼 위에서 아래 단계로 순차적으로 진행되는 모델
- 이전 단계가 수행되어야 다음 단계 수행이 가능한 모델로 리스크가 적지만 이후 변경시 큰 문제 발생가능.
- 각 단계를 문서화하는데 부담이 될 수 있지만 체계화된 문서를 기반으로 안정적으로 진행이 가능
ㆍ프로토타입 모델
[ 계획수립 → 요구분석 → 프로토타입 개발/개선 → 프로토타입 평가 → 개발/구현 → 테스트 → 유지보수 ]
- 사용자 중심의 프로세스 모델로 기존 폭포수 모델의 피드백 수용에 대한 단점을 보완한 모델
- 고객의 요구사항을 상세히 파악할 수 있는 모델로 프로토타입을 통해 고객과 의사소통 가능
ㆍ나선형 모델
[ 계획수립(Planning) → 위험분석(Risk Analysis) → 개발/구축(Engineering) → 고객 평가(Evaluation) ]
- 프로토타입을 지속적으로 발전시켜 최종 소프트웨어 개발까지 이르게 하는 점증적인 방법. 위험관리 중심인 생명주기 모델
- 위험부담이 큰 대규모 시스템을 구축해 나갈 때 가장 현실적인 접근 방법으로 성과를 보며 위험 부담을 줄일 수 있다.
- 프로젝트의 개발 비용 및 일정에 대한 관리가 중요하며 무엇보다도 위험 분석이 중요.
ㆍ애자일 모델
- 실용적인 측면을 강조한 개발 모델로 적은 문서를 지향하며 실제 개발을 지향하는 모델
- 개발 각 단계를 명확하게 구분하지 않고 각 단계를 반복적으로 수행하면서 요구사항을 더하거나 수정하며 개발
- 요구사항 분석이나 설계를 완벽하게 하기 어려울 때 적합한 개발 방법론
2. 소프트웨어 개발
1) 요구사항 분석
ㆍ무엇을 개발할 것인가를 정확히 결정하는 개념적인 단계
ㆍ사용자의 요구에 대하여 이해하는 단계
ㆍ개발 비용을 감소시킬 수 있으며 품질저하 등을 방지할 수 있는 결정적인 단계
2) 설계
ㆍ물리적 실현의 첫 단계로 품질에 직접적인 영향을 주며 제대로 되지 않으면 안정감 저하 및 유지보수가 어렵다.
ㆍ시스템 설계는 서브 시스템들로 이루어지는 시스템 구조를 결정, 서브 시스템은 구성요소에게 할당된다.
3) 구현
ㆍ설계 명세를 기반으로 요구사항을 만족할 수 있도록 프로그래밍 하는 것
ㆍ상세 설계나 사용자 지침서에 기술된 것과 일치하도록 코딩 표준을 정하고 이를 기준으로 코딩해야 한다.
4) 테스팅
ㆍ시스템이 정해진 요구를 만족하는지, 예상과 결과가 어떤 차이를 보이는지 수동/자동 방법을 통해 검사 및 평가
ㆍ소프트웨어의 품질을 확보하기 위해 결함을 찾아내는 일련의 작업
3. 소프트웨어 관리
1) 유지관리
ㆍ개발하는 동안, 개발 후에도 많은 변경이 필요하므로 지속적인 변경을 수용할 수 있도록 개발
ㆍ고객이 사용하는 과정에서 발생하는 여러 변경 사항에 대해 적응하는 활동, 변화에 대비하는 과정
2) 요구관리
ㆍ요구사항관리는 프로젝트와 관련된 이해 관계자들로부터 요구사항을 추출, 구성 및 문서화 하고 변경에 대한
동의를 설정해 관리하는 시스템적인 활동
ㆍ요구사항 관리의 목적
의사소통 : 무엇을 왜 해야 하는지와 변경사항의 의사소통
협업 : 공동의 업무수행을 위한 협업수단
검증 : 모든 것이 계획대로 완료되었는지 검증
3) 형상관리
ㆍ개발 및 유지과정에서 발생하는 각종 산출물(문서,코드)에 대한 계획, 개발, 운용 등을 종합하여 시스템의 형상 만듦
ㆍ변경을 체계적으로 관리 및 제어하기 위한 활동
ㆍ고품질 소프트웨어를 얻기 위한 매우 중요한 과정
4) 품질관리
ㆍ소프트웨어 품질은 주어진 요구사항을 만족시킬 수 있는 속성의 정도,명시적 또는 묵시적요구를 만족시키기 위한
제품이나 서비스의 능력과 관련된 특성 전체로도 정의 된다.
ㆍ개발 활동이 프로젝트 계획과 일치하고 조직 정책에 적합한가를 검증하는 활동
기능성
기능구현 완전성/정확성/상호 운용성, 보안성, 표준준수성 등
신뢰성
운용 안정성, 장애복구 용이성, 서비스 지속성, 데이터 회복성 등
사용성
기능학습 용이성, 입출력 데이터 이해도, 사용자 인터페이스 조정 가능성/ 일관성 등
효율성
반응시간, 자원사용율, 처리율 등
유지보수성
문제진단/해결지원, 환경설정변경 가능성, 업데이트 용이성 등
이식성
운영환경 적합성, 설치제거 용이성, 하위 호완성 등
4. 소프트웨어 설계 원리
1) 분할과 정복 (Divide and Con-quer)
ㆍ사용자의 요구사항을 지속적으로 분할하여 문제영역의 복잡성을 줄여나가기 위한 방법, 역할단위의 독립성과
의존성을 고려해 그룹을 나눠 재조합해야 한다.
ㆍ상위레벨에서 분할한 시스템 구성 요소를 서브시스템(SubSystem)이라 하며, 이는 독립적으로 기능을
수행할 수 있으며컴파일 될 수 있는 프로그램 구성요소 이다.
2) 추상화(Abstraction)
ㆍ추상화는 상세한 수준의 구현을 고민하기보다 상위 수준에서 제품의 구현을 먼저 생각하는 것을 의미한다.
ㆍ추상화를 통해 관심분야가 아니거나 필수적이 아닌 세부적인 것은 생략하며 다루기 쉽고 필수적인 것만을 표현한다.
ㆍ엔지니어링이란 추상화의 높은단계에서 낮은 단계로 이동하는 과정
ㆍ추상화의 유형은 Data, Control, Procedure 추상화가 존재한다.