호출 그래프
호출 그래프
호출 그래프는 함수가 어떤 함수를 호출하는지 있는 그대로 표현한 그래프
호출 그래프에서 함수 이름을 제거하면 추상적인 호출 구조를 확인 가능
비기능적 요구사항(NFRs)
NonFunctional Requirements
테스트를 어떻게 할 것인지, 재사용성, 유지보수하기 어렵지 않은지와 같은 기술적인 요구사항들
소프트웨어를 설계하는 중요한 이유
유지보수성 → 요구사항이 변경되었을 때 가장 쉽게 고칠 수 있는 코드가 어떤것인가
테스트성 → 어떤것을 테스트하는 것이 가장 가치가 있는가?
재사용성 → 어떤 함수가 재사용하기 좋나?
호출 그래프에 함수 이름을 뺴고 보면, 코드 위치에 따라 세가지 비기능적 요구사항에 답할 수 있다.
기능적 요구사항은 소프트웨어가 해야 하는 일을 의미한다.
그래프의 가장 상단에 있는 코드가 고치기 가장 쉽다.
자주 바뀌는 요구사항들은 가장 상단 계층에 두자.
가장 상단에 있는 코드는 호출되는 곳이 한정적이기 때문에 다른 코드에 영향을 주지 않고 변경 가능
반대로 자주 바뀌지 않는 도메인 규칙은 가장 낮은 계층에 두자.
가장 낮은 계층에 있는 코드는 상위 계층에 영향을 끼치기 때문에 고치기 어렵다.
직접 구현 패턴처럼 함수를 추출해 더 낮은 계층으로 보내거나 작은 인터페이스 패턴처럼 더 높은 계층에 함수를 추가하는 일은 모두 변경 가능성을 생각해서 계층화하고 있는 것
유지보수성
규칙 → 위로 연결된것이 적은 함수가 변경이 쉽다.
핵심 → 자주 바뀌는 코드는 가능한 영향을 덜 끼치는 상위 계층에 있어야 한다.
테스트성
규칙 → 위로 많이 연결된 함수는 그만큼 로직에 중요한 부분이므로 테스트할 가치가 크다.
많은 코드가 가장 낮은 계층에서 잘 동작하는 코드에 의존하므로 가장 아래에 있는 코드를 테스트하는것이 중요하다.
코드가 바뀌지 않으면, 테스트 코드도 바뀌지 않으므로 하위 계층을 테스트하는 것이 시간 투자 대비 최고의 효율을 낸다.
재사용성
규칙 → 의존하는 코드가 적을 수록(아래 계층의 코드일수록) 더 재사용하기 좋다.
핵심 → 낮은 수준의 단계로 함수를 추출하면 재사용성이 높아진다.
Last updated