1-1강 - System life cycle
1. System life cycle
프로그래머들은 큰 규모의 프로그램을 개발할 때 아래와 같은 개발과정을 거친다.
1) Requirement
- 목적 구체화 (지금 해결하고자 하는 것이 무엇인지)
- input/output에 대한 정보가 필요하다.
2) Analysis
- 문제를 manageable piece로 쪼갠다.
- top-down: 큰 문제를 계획하고 뼈대를 만들어서 진행
- bottom-up: 일단 작은 구성부터 만들어서 마지막에 이어 붙이는 방식
3) Design
- typical data object: creation of abstract data types
- typical operation: <1> specification of algorithms <2> consideration of algorithm design strategies
- 이 과정에서 language independent하게 만들어서 구현은 다음 단계에서 진행한다.
- 이 과정을 통해 가장 효율적으로 design할 수 있는 언어와 알고리즘을 선택할 시간을 가질 수 있다.
4) Refinement and coding
- representations for data objects 선택
- 선택한 data 사이의 연산에 대한 알고리즘 구현
- data object's representation는 알고리즘의 효율성에 영향을 미친다.
5) Verifiaction
- Developing correctness proof for the program: 프로그램의 알고리즘이 올바른지 검토
- Testing the program with a variety of input data: 다양한 input을 넣어도 올바른 output을 return하는지 검토
- performance analysis: <1> running time <2> amount of memory used