학교수업/소프트웨어 공학

[소프트웨어 공학] 3. Software Engineering Principles

laboputer 2015. 10. 22. 01:04

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 은 소프트웨어의 모든 개발활동에 모두 쓰여지고 필수이므로, 중요하다고 할 수 있다.