[Data Structure] 01. Software System Life Cycle : 시스템 라이프 사이클
- 김용현
- 2017년 10월 22일
- 2분 분량
* Acknowledgment: The content of this file is based on the class in UNIST. 수업 내용을 기반으로 작성한 컨텐츠입니다.
There are 5 steps in the SW system life cycle.
시스템 라이프 사이클에는 총 5가지의 단계로 구분됩니다.
쉽게, '프로그래머는 어떠한 단계를 거침으로써 코드를 작성하는가?' 라고 보셔도 됩니다.

1. Requirements 우선, 필요사항들을 체크합니다
- Specification of input and output (어떤 인풋과 아웃풋을 사용할까?)
- Specification of functions (어떠한 함수를 사용할까?)
- Error Handling (어떠한 에러가 발생할 수 있으며 어떻게 해결할까?)
2. Analysis 그다음, 제작할 프로그램의 내용을 세세히 분석합니다
- Break down the problems in manageable pieces (우리가 다룰 수 있을만한 코드의 사이즈로 우선 다 나눠서 생각합니다)
- Strategies (그 분석의 전략으로는 2가지가 있습니다)
* Bottom-up (상향식 분석)
- Making small / specific functions first (작고 세세한 기능을 하는 함수들부터 구체화)
- Connect those functions to build a large system (그 함수들을 잘 엮어서 시스템을 키워나감)
* Top-down (하향식 분석)
- High level plan first, subsequently refine for low level (일단 뼈대부터 생각을 해본다 그다음 세세하게 가지들을 뻗어나가며 구체화)
- Preferred for complex system (복잡하고 긴 코드에서 선호되는 분석 방식)
3. Design 분석한 내용을 기본 하에 구체화를 마무리합니다
- Data objects and operations (작성할 프로그램의 객체와 연산 등을 정확히 정의해둬야합니다)
* Define Abstract Data Type (추상자료형을 정의합니다 - 추상자료형의 성격에 맞게, 사용자는 그 기능은 쉽게 알 수 있도록하며 내부적인 구동 방법은 은닉을 해야합니다)
* Specify Algorithms (자신의 프로그램의 알고리즘을 정확하게 정의합니다. 내가 만들 프로그램인데, 어떻게 구동을 시킬지 제대로 잡지 않고 바로 코딩으로 덤벼들면 매우 힘들겠죠?)
* Example: Scheduling system of a university
- Data Objects: Students, Courses, Professors
- Operations: Inserting, Removing, Searching
- NO CODING YET (다시 한번 강조하지만, 아직 코딩을 하지 않는 단계입니다. 저같은 경우는 종이에 펜을 들고 제가 작성할 코드를 구체화 시켜보곤 합니다)
* Language Independent (이는 코딩을 하지 않는 단계이니, 굳이 C++이니 Java니 C언어 스타일대로 계획을 하면 더 귀찮고 힘들어집니다 편안하게 진행하세요!)
4. Refinement and Coding 완벽히 다듬은 뒤, 코딩을 시작합니다
- Choose representation and write algorithms
(코딩 언어를 선택한 뒤 이에 맞는 알고리즘을 작성합니다)
- Use Programming Paradigms (3개의 프로그래밍 작성 방식이 있습니다)
* Structured Programming (구조적 프로그래밍: 순차적으로 프로그램을 짜는 방식)
* Modular Programming (모듈러 프로그래밍: 모듈을 이용하여 프로그램을 짜는 방식)
* Object-Oriented Programming (객체지향적 프로그래밍: 데이터 하나하나를 객체처럼 취급하며 프로그램을 짜는 방식)
5. Verification 코드 실행 후 검증 및 마무리 작업에 들어갑니다
- Correctness proofs (정확도 증명을 시행합니다; 클릭시 참고문헌을 확인할 수 있습니다)
* Using formal techniques to prove correctness of algorithms
* Difficult to apply to a large system (무거운 코드일 수록 증명하는데에는 시간이 많이 소요)
- Testing (다양한 인풋 케이스로 프로그램을 구동시켜 혹시나 원하지 않는 결과값이 나오는지 시험을 해봅니다)
* Need Working system and test data
* Should include all possible scenarios (최대한 많이 테스트를 해보는게 좋겠죠)
* Measure running time (똑같은 기능에도 구동시간이 짧은 것이 Better 코드라고 볼 수 있습니다)
- Error removal (그 뒤 미처 생각해지 못했던 에러를 발견했다면, 이를 다시 잡아줍니다)
[용어 정리]
모듈: 독립적인 하나의 요소. 프로그램의 일부분.

Comments