Search
Duplicate
🏓

Agile Development Principles

Category
S/W 엔지니어
Tags
SOLID
S/W Engineering
Architecture
Study Note
Created time
2009/04/14

Agile의 주안점

변화에 대한 능동적 대처 : dependency의 최소화

Application의 주요 문제

경직성(rigidity)
파급 효과로 인한 변경의 난해성.
취약성(Fragility)
변경 하나가 여러 부분의 문제를 일으키는 경향. 개발자가 재설계의 필요성을 느끼는 경향, 고칠 수록 점점 문제를 일으키는 모듈
부동성(immobility)
타 시스템에서 유용하게 사용할 수 있지만 분리의 수고와 위험성이 큰 경향
점성(viscosity)
소프트웨어적 점성 : 변경에 대해 설계 원칙에 반하기 쉬운 경향 환경적 점성 : 개발 환경이 느리고 비효율적인 경향(ex. 재컴파일의 느린 속도) 이들 두 점성 모두 설계 유지에 반하도록 개발자를 이끔.
불필요한 복잡(needless complexity)
설계가 현재 시점에서 유용하지 않은 요소를 포함하는 상태. 변경에 대한 사전 고려로 만들어진 요소는 종종 사용되지 않으며 복잡도만 유발
불필요한 반복(needless repetition)
중복 코드
불투명성(opacity)
모듈을 이해하기 어려운 상태

상기문제를 해결하기 위한 주요원칙 (SOLID)

Cohesion(응집도) 증대 원칙 클래스는 단일 책임 만이 따르도록(단 한가지의 변경 이유만을 가지도록)
S/W 개체(class, module, function 등)는 확장에 열려있고, 수정에는 닫혀있어야. 추상화를 통한 변경 사항 격리, 다형성을 이용한 확장의 지원
상속 시 부모와 자식의 관계가 반드시 IS-A 관계를 유지하도록 Subtype은 base type애 대해 치환 가능하여야. Base class의 사용 조건을 sub class에서 모두 따를 수 있도록
클라이언트 코드가 자신이 사용하지 않는 method에 의존하도록 강제되어서는 아니됨 위 사항을 위해 다수의 interface로 분리 및 해당 interface에 클라이언트 코드가 의존하도록 함. 이로서 서로 다른 클라이언트 코드가 서로에 대해 독립적이 되도록 함.
상위 수준의 모듈이 하위 수준의 모듈에 의존하지 말도록 이들 두 모듈 모두 추상화에 의존하도록 참고 : inversion이란 어휘는 구조적 분석 설계 등의 전통적 방법에서 정책이 구체적인 것에 의존하는 경향이 있어, 이들 의존 관계를 역전(inversion) 시킨다는 뜻

Conclusion

변화에 능동적으로 대처하는 application design의 핵심 원칙을 제시
Agile 탄생 이전부터, OOD 기반의 다양한 practice를 통해 숙성, 추출된 원칙들.
GOF에 나열된 여러 Design Pattern의 기반이 되는 설계 철학.

References

Agile Principles, Patterns, and Practices. Martine C. Robert, Martin Micah