호출 그래프

호출 그래프

호출 그래프는 함수가 어떤 함수를 호출하는지 있는 그대로 표현한 그래프

호출 그래프에서 함수 이름을 제거하면 추상적인 호출 구조를 확인 가능

비기능적 요구사항(NFRs)

NonFunctional Requirements

  • 테스트를 어떻게 할 것인지, 재사용성, 유지보수하기 어렵지 않은지와 같은 기술적인 요구사항들

  • 소프트웨어를 설계하는 중요한 이유

  • 유지보수성 → 요구사항이 변경되었을 때 가장 쉽게 고칠 수 있는 코드가 어떤것인가

  • 테스트성 → 어떤것을 테스트하는 것이 가장 가치가 있는가?

  • 재사용성 → 어떤 함수가 재사용하기 좋나?

  • 호출 그래프에 함수 이름을 뺴고 보면, 코드 위치에 따라 세가지 비기능적 요구사항에 답할 수 있다.

기능적 요구사항은 소프트웨어가 해야 하는 일을 의미한다.

그래프의 가장 상단에 있는 코드가 고치기 가장 쉽다.

  • 자주 바뀌는 요구사항들은 가장 상단 계층에 두자.

  • 가장 상단에 있는 코드는 호출되는 곳이 한정적이기 때문에 다른 코드에 영향을 주지 않고 변경 가능

  • 반대로 자주 바뀌지 않는 도메인 규칙은 가장 낮은 계층에 두자.

  • 가장 낮은 계층에 있는 코드는 상위 계층에 영향을 끼치기 때문에 고치기 어렵다.

직접 구현 패턴처럼 함수를 추출해 더 낮은 계층으로 보내거나 작은 인터페이스 패턴처럼 더 높은 계층에 함수를 추가하는 일은 모두 변경 가능성을 생각해서 계층화하고 있는 것

유지보수성

  • 규칙 → 위로 연결된것이 적은 함수가 변경이 쉽다.

  • 핵심 → 자주 바뀌는 코드는 가능한 영향을 덜 끼치는 상위 계층에 있어야 한다.

테스트성

  • 규칙 → 위로 많이 연결된 함수는 그만큼 로직에 중요한 부분이므로 테스트할 가치가 크다.

  • 많은 코드가 가장 낮은 계층에서 잘 동작하는 코드에 의존하므로 가장 아래에 있는 코드를 테스트하는것이 중요하다.

  • 코드가 바뀌지 않으면, 테스트 코드도 바뀌지 않으므로 하위 계층을 테스트하는 것이 시간 투자 대비 최고의 효율을 낸다.

재사용성

  • 규칙 → 의존하는 코드가 적을 수록(아래 계층의 코드일수록) 더 재사용하기 좋다.

  • 핵심 → 낮은 수준의 단계로 함수를 추출하면 재사용성이 높아진다.

Last updated