Software vs. Program
Software Architecture
시스템의 품질요구사항(Constrains)을 만족시키기 위한 Software 설계 사항을 Software의 구성요소(element)와 구성요소들간의 관계(relation)로 표현한 것.
ISO나 SEI, Clements, Rozanski 등 여러 학자들이 각자의 문장으로 그 정의를 표현하였는데
공통적으로 Software의 Elements, Relations, Property 혹은 Constraints로 표현된 것이라고 말하고 있다.
Software Model
소프트웨어가 포함하고 있는 개념들을 추상화하여 표현한 것.
Software Architecture Style
ATAM (Architecture Tradeoff Analysis Method)
품질속성 시나리오에 기반하여 아키텍처 Tradeoff를 분석하고 이에 대한 위험요소(Risk)를 찾아내는 아키텍처 평가 방법
1. Business Goal에서 품질 요구사항을 시나리오 형태로 추출
- 구체적인 상황과 숫자로 기술되어야 한다.
- Stimulus (선적용 조건), Stimulus를 발생하는 원인, Stimulus의 결과로 표현
2. 품질 속성의 우선 순위를 결정하고 이를 기반으로 평가할 품질 속성을 결정한다.
- Importance (Stakeholder입장), Difficulty(개발팀입장)
Importance를 더 우선시
3. 품질 요구사항을 만족시킬 Architectural approach, tactics, style 등을 결정한다.
4. 4번의 결정 사항을 품질 속성별로 평가 (+/-)
5. 선정된 결정 사항별로 Risk 및 Tradeoff 분석
- Risk : 아키텍처 결정 사항으로 인한 잠재적 문제 요인 (tradeoff로 드러나지 않은)
- Tradeoff : 하나의 품질 속성은 만족시키면서 동시에 다른 품질 속성은 떨어 뜨리는 특성.
Refactoring
소프트웨어의 maintainability를 높이기 위해 external behavior의 변경없이 코드의 구조를 변경하는 일. 주로 기본적인 micro refactoring을 연속으로 수행함으로써 큰 규모의 구조까지 변경한다.
Golden Master Testing
- 기존 코드의 실제 동작을 characterize하여 저장(Golden Master)하였다가 코드가 수정되었을 때 이전의 결과와 비교함으로써 코드 변경으로 인한 예기치 않은 오류를 확인할 수 있도록 하는 테스트 방법이다.
- Unit test가 없는 legacy code를 기반으로 기능 확장을 하거나 refactoring할 때 유용하게 사용된다.
SOLID Principle
- Single Responsibility Principle (SRP)
- a class should have only a single responsibility
- Open/Close Principle (OCP)
- open for extension, but closed for modification
- Liskov Substitution Principle (LSP)
- replaceable with instances of their subtypes
- Interface Segregation Principle (ISP)
- many client-specific interfaces are better than one general-purpose interface
- Dependency Inversion Principle (DIP)
References
https://www.sei.cmu.edu/architecture/start/glossary/index.cfm