문서 목차12 / 20

결정 간직하기12 / 20

의도 커버리지 보기

이 페이지의 내용

이 소프트웨어 중 실제로 파악하고 있는 부분은 얼마나 될까요? 의도 커버리지는 그림 한 장으로 답합니다. 코드 파일마다 사각형 하나씩, 모듈별로 배치하며, 사각형이 진할수록 당신의 설명이 그 파일의 줄을 더 많이 인용한 것입니다. 아직 비어 있는 곳과 오래된 설명이 한눈에 드러납니다. 의도를 가리키면 그 의도가 다루는 파일이 밝게 켜집니다.

의도 커버리지 열기

새 채팅을 시작하면, 첫 메시지를 보내기 전 채팅 영역에 의도 커버리지 카드가 나타납니다. 설정 → 의도 커버리지(현재 프로젝트 그룹 안)를 열 수도 있으며, 거기서는 카드가 페이지 전체를 채우므로 큰 프로젝트에 도움이 됩니다.

의도 커버리지를 쓰려면 구현 폴더가 Git 저장소여야 합니다. 프로젝트에 커버리지 결과가 생기기 전에는 카드에 “아직 계산되지 않음”이 표시되고 두 가지 방법이 제공됩니다. “설명”은 Agent가 먼저 설명을 쓰게 하고, “지금 계산”은 이미 있는 설명으로 커버리지를 계산합니다. 큰 저장소는 모든 파일을 읽어야 하므로 시간이 걸릴 수 있습니다.

그 뒤로는 Explain이 끝날 때마다 카드가 갱신됩니다. 제목 줄 오른쪽에는 마지막 Explain이 끝난 시각과 그때의 커밋이 표시되고, 다시 계산하는 버튼이 있습니다.

카드 읽기

카드 맨 위에는 큰 숫자가 있습니다. 범위 안의 전체 코드 줄 중 설명이 인용한 줄의 비율입니다. 그 옆의 “3 / 6 파일”은 전체 파일 중 의도가 받쳐 주는 파일 수입니다.

의도 커버리지 카드. 코드 줄의 68%를 설명이 인용하고 있고, 파일 60개 중 41개에 의도가 있습니다. 모듈 영역은 폴더별로 파일마다 점 하나씩 배치하고, 아래에는 각 의도 문서가 나열됩니다.

그 아래 막대는 세 부분으로 되어 있고, 아래에 범례가 있습니다.

  • 참조된 줄: 채워진 부분이며 퍼센트만큼 길어집니다.
  • 설명이 오래됨: 빗금 친 부분이며, 설명이 쓰인 뒤에 바뀐 파일입니다.
  • 의도 없음: 비어 있는 부분이며, 어떤 설명도 인용하지 않는 파일입니다.

모듈별

“모듈” 영역은 기본적으로 점을 보여 줍니다. 파일마다 점 하나, 폴더마다 한 줄입니다. 의도가 받쳐 주는 파일은 인용된 줄이 많을수록 진해지고, 설명이 오래된 파일은 빗금이 쳐지며, 의도가 없는 파일은 비어 있습니다. 점을 가리키면 파일 이름과 그중 얼마가 인용되었는지 보입니다.

오른쪽 위의 스위치로 점을 막대로 바꿀 수 있습니다. 모듈마다 한 줄이며, 줄 수만큼 길고 세 가지 상태로 나뉩니다.

모듈을 클릭하면 한 단계 아래로 내려가며, 제목 줄에 뒤로 가기 버튼과 경로가 나타납니다. 예를 들어 구독 서비스에서는 billing, jobs, notify, web 줄이 나란히 놓이고, notify 줄은 거의 비어 있습니다. 알림 이메일에 대한 규칙이 아직 의도로 적히지 않았기 때문입니다.

의도별

모듈 아래에는 의도 목록이 있습니다. 의도 문서마다 한 줄이며 문서 트리처럼 들여쓰기되고, 몇 개의 파일에 대응하는지 보여 주는 짧은 선이 붙습니다. 아직 뒤에 코드가 없는 문서는 회색이고 선이 비어 있습니다.

  • 문서를 가리키면 모듈 영역에서 그 문서와 관련 없는 줄이 흐려지고 배치는 그대로 유지됩니다.
  • 문서를 클릭하면 관련 없는 줄이 접히고, 막대와 점은 그 의도가 대응하는 코드만 보여 주며, 모듈 제목 아래에 문서 이름과 ×가 있는 칩이 나타납니다.
  • 다시 클릭하거나, 칩의 ×를 클릭하거나, Esc를 누르면 해제됩니다.

예를 들어 갱신을 클릭하면 billing/grace.ts, jobs/renewal-job.ts, 몇 개의 테스트 파일만 남습니다. 갱신 규칙을 바꾸면 무엇을 건드리게 되는지 바로 보입니다.

숫자가 뜻하는 것

커버리지는 당신의 설명이 코드를 얼마나 인용하는지를 측정합니다. 코드 품질도, 테스트 커버리지도 아닙니다. 두 가지 질문에 답하는 데 도움이 됩니다.

  • 어디에 아직 의도가 없는가? 비어 있는 모듈은 그리 중요하지 않은 코드이거나, 이미 돌아가고 있지만 당신이 따져 보지 않은 규칙입니다. 후자는 의도 한 단락과 Explain 한 번을 받을 만합니다.
  • 어디의 설명이 오래되었는가? 빗금이 많다면 설명이 따라잡지 못한 최근의 변경이 있다는 뜻입니다. 코드가 바뀌었을 때를 참고하세요.

100%를 쫓을 필요는 없습니다. 가장 신경 쓰이는 부분에서 시작해 그곳부터 진하게 만드세요.

Parnas Index

설정 → Parnas Index는 같은 것을 반대쪽에서 봅니다. 코드 변경이 의도에 얼마나 미치는지입니다. 이름은 David Parnas의 모듈 분해 원칙에서 왔습니다. 좋은 모듈은 바뀔 가능성이 큰 결정을 숨긴다는 원칙입니다. Noea에서는 의도의 단락이 결정을, 코드 파일이 모듈을 나타냅니다.

맨 위의 큰 숫자는 파일 하나가 바뀔 때마다 평균 몇 개의 의도 단락을 다시 확인하는지이며, 그중 몇 개를 충분히 확인했고 그중 몇 개가 바뀌지 않았는지도 함께 나옵니다. 높을수록 변경 하나가 더 많은 결정을 끌어들입니다. 기간은 7일, 30일, 90일 중 고를 수 있습니다.

이 페이지에는 두 가지 보기가 있습니다.

보기수준열
이 코드가 영향을 주는 의도파일, 정의영향 의도, 변경, 변경당, 변화 없음
이 의도에 영향을 주는 코드문서, 단락인용 파일, 코드 변경, 의도 변경, 변화 없음

행을 클릭하면 그 자리에서 열립니다. 파일 행에는 설명이 그중 얼마를 인용하는지, 가장 많이 영향을 주는 의도, “의도 커버리지에서 보기”가 나옵니다. 의도 행에는 몇 개의 파일을 인용하는지, 그 의도에 가장 많이 영향을 주는 코드, 그 단락을 여는 방법이 나옵니다.

첫 번째 보기의 파일 수준 아래에는 “커버리지와 영향” 산점도가 있습니다. 가로는 설명이 인용한 줄의 비율, 세로는 변경 하나가 영향을 주는 의도 단락의 수입니다. 오른쪽 위의 파일은 촘촘히 인용되고 자주 바뀌므로 변경할 때마다 많은 의도를 다시 확인해야 하며, 쪼개 볼 만합니다. 커버리지가 높다고 항상 좋은 것은 아닙니다.

프로젝트에 구현 폴더가 아직 연결되어 있지 않으면, 두 페이지 모두 먼저 설정 → 프로젝트에서 연결하라고 안내합니다.