Software specification
- System의 운영과 개발에 있어 필요한 기능과 제한사항을 서술하는 단계
requirements engineering process
- Requirements elicitation and anlysis
- system stakeholder가 system에서 어떤 것을 기대하고 필요로 하는지에 대하여 기술한다.
- Requirements specification
- requirements에 대하여 세세하게 기술한다.
- Requirements validation
Software design and implementation
- System specification을 실행가능한 시스템으로 만드는 과정
Software design
- 명세서를 구체화한 소프트웨어의 구조 (프로그래밍 언어, 운영체제 등과는 독립적)
- 입력으로 요구사항 명세서, 하드웨어/소프트웨어의 외적인 일을 고려하여 요구사항을 tageting하는 플랫폼 정보, 데이터의 사용과 첨삭, 활용에 대한 정보가 사용될 수 있다.
System Implementation
- 설계된 소프트웨어를 실행가능한 프로그램으로 구현한다.
- 구현단계는 개발자가 프로그램을 개발하거나 application을 configuraing하는 작업을 포함한다.
- programming은 개인적인 활동으로써 표준이 없으며 debugging단계를 포함한다.
디자인 활동
architectural design
- 주요 구성요소들이 어떠한 관계를 가지고 어떻게 분산되었는지 등 시스템 전체의 큰 틀을 설계한다.
component design
interface design
database design
Software validation (v & v, 제3자 입장에서 검증)
- 명세서에 기술된 요구사항이 제대로 구현되었는지에 대하여 validation/verification을 진행한다.
Component testing
- 개별적인 구성요소들을 독립적으로 검증한다.
- 구성요소들은 함수나 객체 또는 동질집단으로 구성된 객체를 지칭한다.
System testing
- 시스템 전체를 verification/validation한다.
Acceptance testing
Software Evolution
- 시장상황의 변화나 고객의 요구사항 변경에 맞추어 software도 변화하고 진화할 수 있어야 한다.
Coping with change
변화는 규모가 큰 모든 소프트웨어 프로젝트에서 피할 수 없다.
- 시장 상황이 바뀌며 요구사항이 변화한다.
- 새로운 기술이 등장하면서 소프트웨어 구현 레벨을 향상시키기 위하여 변화한다.
- application의 변화를 위해 플랫폼이 변화한다.
Reducing the cost of reworks
변화를 예측한다
- 주요한 사항에 대하여 rework가 필요하다고 예상되는 사항에 대하여 미리 예측한다.
- 중대한 사항에 대해 프로토타입을 만들어 고객의 요구사항을 만족하는지 빠르게 테스트하고 실행 가능 여부에 대하여 판단한다.
변화를 인내한다.
- incremental 기법을 사용하여 변화가 발생했을 경우 일정 기간 변화를 인내하고, products에 주는 영향이 큰 부분을 먼저 구현하여 고객에게 피드백을 받은 후 수정을 거친다.
Software prototyping
- 설계의 옵션과 고객의 요구사항을 빠르게 만들어 검증해본다.
- 요구사항이 불분명할 때 요구사항을 추출하고 검증하는 곳에 사용된다.
- 유저 인터페이스에 대해 미리 만들어봄으로써 다시 이전 단계로 돌아오는 위험을 줄인다.
- 프로토타입의 목표를 정의하고 프로토타입의 기능을 명확하게 정의하여 지정된 범위의 기능만 개발하고 실행, 평가 및 정리를 한다.
- 프로토타입은 빠른 개발이 중요하기에 빠른 프로토타입 언어와 도구를 사용해야 한다.
- 이해의 정도가 낮은 부분에 대하여 프로토타입 구현을 집중한다.
- 성능보다 기능에 초점을 두며, 에러/안정성/신뢰성을 크게 고려하지 않는다.
- 안정성이나 보안 같은 non-functional 보다 functional에 집중한다.
- design 단게에서 UI, 테스트 목적으로 프로토 타입을 활용할 수 있다.
장점
- 미리 프로토타입을 만듦으로써 구체화할 수 있으며 시스템의 사용성을 높일 수 있다.
- 고객의 필요에 근접할 수 있다.
- 유지보수 측면에서 향상시킬 수 있으며 개발에 투입되는 노력을 줄일 수 있다.
- 모호한 부분에 대하여 미리 구체화할 수 있으며, 이를 통하여 요구사항을 정확하게 파악하여 해결할 수 있다.
- 각 시스템에서의 중요 요소들을 파악할 수 있으며, 디자인의 질을 향상시킬 수 있다.
프로토 타입은 개발단계에서 사용되지 않아야 한다.
- 프로토타입은 Non-functional 요구사항에 대해 조정할 수 없다.
- 프로토타입은 제대로 된 요구사항을 기술하거나 디자인 하지 않았다.
- 프로토타입은 성능을 고려하지 않았기에 변화에 빠르게 대응하지 못한다.
Incremental delivery
- 우선순위가 높은 것을 먼저 구현하여 고객에게 제공한다.
- 다음 단계의 구현을 시작하기 전에 해당 단계의 개발과 검증을 시행한다.
- 검증은 user/customer proxy에 의해 수행된다.
- 실제적인 프로그램을 주므로 더 실질적인 피드백을 받을 수 있다.
- 다음 incremental이 더 낮은 성능을 제공할 때 교체하기 힘들다.
장점
- 각 increment에 대한 고객의 평가가 빨리 반영되어 변화에 빨리 대응할 수 있다.
- 이전의 increment는 프로토타입의 역할을 하며 이후의 개발에 대한 요구사항을 추출할 수 있다.
- 전체적인 프로젝트 실패에 대한 위험을 낮춘다.
- 가장 중요한 기능이 가장 많은 검증을 받는다.
단점
- 거대한 소프트웨어가 다른 소프트웨어나 기능으로 유기적으로 연결되어 있다면, 적용이 힘들 수 있다.
- 라이센스나 법적 관리가 힘들 수 있다.
Process improvement
- 소프트웨어의 품질을 올리거나 비용을 낮출 수 있고, 개발의 속도를 높일 수 있다.
Process maturity approach(PLAN-BASE가 강화된 절차)
- 프로세스의 단계를 향상시키거나 프로젝트의 관리에 집중하며 좋은 소프트웨어 공학 기술을 도입
- Capability maturity levels
능력 성숙도 통합 모델, CMMI
- 능력 성숙도 모델은 회사의 프로세스의 성능을 공인하는데 사용된다.
Agile approach
- 반복적인 개발에 집중하면서 개발 상의 오버헤드를 줄인다. (행정 부담/문서 작성을 줄인다)
Process improvement activities
Process measurement
- 소프트웨어 개발 단계나 결과물의 복수 개의 특징을 측정한다.
- 이러한 측정은 공정 개선이 효과적이었는지 여부를 결정하는 데 도움이 되는 기준선을 형성한다.
- 가능한 많은 데이터가 수집되어야 한다.
- 조직에서 프로세스 표준을 명확하게 정의하지 않은 상태라면 어떤 것을 측정해야하는 지에 대해 어려움이 있을 수 있으므로 프로세스는 측정 전에 정의되어야 한다.
- process measurements는 프로세스 향상에 대한 평가 척도로 사용되어야 한다.
Process analysis
Process change