💡 소프트웨어의 중요 조건 : 효율성, 정확성
1. 요구분석 (Requirement Analysis)
- user의 요구사항을 바탕으로 해답이 될 수 있는 요건들을 정의
- 목표 소프트웨어의 필수 및 선택 요건을 구분함
- 요구명세서 (Requirement Specification) 작성
- 최선의 해결방법을 위해 충돌되는 문제점을 이해하는데 도움되는 과정
2. 시스템명세 (System spcification)
- 시스템이 ‘무엇을 수행해야 되는가’를 정의
- 기능적 명세(Functional Specification) 를 통해 정의
- 소프트웨어의 기능 → I/O 에 대한 명세 포함
- 유저와 구현자 간의 구체적인 합의사항 및 하나의 계약서
- ex) Input과 Output은 무엇이며 형식은 무엇인가? 파일의 각 Record 양식은 무엇인가?
3. 설계 (design)
4. 구현 (implementation)
- 설계된 알고리즘을 특정 프로그래밍 언어로 변환 (= 코딩하는 것)
- 프로그램 구현의 기본원칙
-
Structured Programming (구조적 프로그래밍)
- 지정문, 조건문, 반복문을 이용하여 작성
- 정확성 증명 쉬움, 프로그램의 유지보수 쉬움, 디버깅 쉬움
-
Modular Programming (객체 프로그래밍)
- 여러 module로 나눠 계층 형태의 관계를 갖도록 구성
- 외부에 영향을 주지 않고 module 구현을 효율적으로 구현하기 용이
💡 module : 하나의 기능만을 수행하는 서브 프로그램. 하나의 진입점과 하나의 진출점 가짐
5. Test (test)
- 목적 : 소프트웨어에 내재되어 있는 에러를 찾는 것
- 테스트의 3단계
- 단위검사 (unit test) : 각 module별로 제공된 test data로 검사
- 통합검사 (integration test) : 몇 개의 요소들을 그룹으로 통합시켜 검사
- 시스템검사 (system test) : 시스템이 기능적 명세에 따라 정확하게 동작하는가 진단
- 인수검사 (acceptance test)
- 개발 완료된 소프트웨어를 인수하기 전 주문자 측에서 자체적으로 진행하는 검사
- benchmark test : 경쟁적인 시스템과 성능 비교
- beta test : 초기 버전의 소프트웨어를 사용하여 검출되지 않은 에러를 찾는 방법
💡 Test는 소프트웨어의 정확성을 확신하기 위한 것. 보장하기 위한 것 X
6. 유지보수 (maintenance)
- 완성된 소프트웨어를 사용하기 시작한 이후 의 모든 활동
- 유지보수가 필요한 경우
- 추가 에러나 버그가 발견되어 수리가 필요한 경우
- 실제 운영 환경이 변경되어 교정해야하는 경우
- User의 추가 구현 요구사항이 발생한 경우