[소프트웨어 공학] 3. Software Engineering Principles
Software Engineering Principles
Principles 은 method와 기술, 방법론과 툴의 기반(기본)이 되는 것이다.
소프트웨어 개발의 모든 부분에서 사용되는 것이다.
모듈화는 소프트웨어 설계에 있어서 cornerstone이다.
Rigor and formality |
Rigor는 완전하게 창조하는 것을 필요로 한다. 그것은 개발에서 신뢰가 향상되는 것이다. 예를 들면, Rigorus한 문서화는 프로젝트 관리에 도움을 준다. Formality는 그 누구도 반박할 수 없이 Rigor의 Highest degree이다. 예를 들어, 프로그램의 수학적(Formal한)으로 분석을 할 수 있다. |
Separation of concerns |
복잡한 것을 나누어 생각하는 방법. 관심대상을 분리한다. 프로세스 모델에서처럼 각 단계로 나누어 생각한다. 요구사항 정의에서 기능적, 비기능적으로 나누어서 생각한다. |
Modularity |
복잡한 시스템도 단순한 독립적인 Modules로 나누어진다. 모듈화하여 생각하면, 다른 모듈 의 상세한 부분은 무시하고 다룰 수 있다. 모듈화의 3가지 목표는 Decomposability : 분할정복 Composability: 기초적인 컴포넌트부터 시작한다. Capability of understanding : 시스템을 분리하여 유지보수성을 높일 수 있다. 목표를 달성하기 위해서는 High cohesion & low coupling 이 필요하다. |
Abstraction |
상세한 것은 무시하고, 중요한 것에만 집중하는 것. 문제를 해결하는 것 자체에만 집중할 수 있도록 도와준다. |
Anticipation of changes |
변화를 예측하는 것은 maintainability (evolvability) 와 reusability 를 향상시킨다. |
Generality |
이미 만들어진 것에 대해서 생각할 필요 없고 단지 reuse 하기만 하면 된다. |
Incrementality |
단계적으로 접근한다. ex) design (단계적으로 하나씩..), system testing (모듈단위로) , verification |
마지막으로 위의 Principles 은 소프트웨어의 모든 개발활동에 모두 쓰여지고 필수이므로, 중요하다고 할 수 있다.