- 코드베이스의 인지 차원(cognitive dimensions of codebase, CDCB)이라는 수정된 프레임워크를 사용하여 기존 코드베이스의 설계를 개선하는 방법에 대해 이야기합니다.
12.1 코드베이스의 특성 조사#
12.1.1 인지적 차원#
- CDCB는 수정을 하지 않고 사용만 하는 라이브러리와 프레임워크의 코드에 특히 유용합니다.
오류 경향성#
- 일부 프로그래밍 언어에서는 다른 언어보다 실수가 쉽습니다. 이를 오류 경향성이라 부릅니다.
- 강한 타입 언어는 이러한 오류가 적습니다.
일관성#
- 일관성은 비슷한 것들은 얼마나 유사한지, 항상 동일한 방식으로 만들어지는지.
- 이름과 규약을 일관성 없이 사용하는 프레임워크나 언어는 인지 부하를 더 많이 가져올 수 있습니다.
분산성#
- 메서드가 너무 무거워지면 프로그래머의 잘못입니다.
- 분산성은 프로그래밍 구성 요소가 얼마나 많은 공간을 차지하는지 나타냅니다.
숨겨진 의존성#
- 숨겨진 의존성 차원은 의존 항목이 사용자에게 어느 정도로 가시적으로 나타나는지를 보여줍니다.
- 코드 작성자는 보다 광범위한 문서로 숨겨진 의존성을 보완할 수 있습니다.
잠정성#
- 잠정성 차원은 도구를 사용하는 동안 생각하는 것이 얼마나 쉬운지에 대한 것입니다.
- 점도는 특정 시스템을 변경하는 것이 얼마나 어려운가에 대한 차원입니다.
- 시스템이 변경하기 쉬운지는 프로그래밍 언어와 코드베이스 자체에 달려 있을 뿐만 아니라 코드베이스를 둘러싼 요인도 영향을 미칩니다.
점진적 평가#
- 점진적 평가 역시 잠정성과 관련이 있습니다.
- 점진적 평가 차원이 낮은 시스템에서는 완료되거나 완벽하지 않은 코드를 실행할 수 없으므로 잠정성을 억제합니다.
역할 표현력#
- 역할 표현력의 차원은 프로그램에서 여러 가지 다른 부분의 역할을 얼마나 실행할 수 있는지를 나타냅니다.
- 구분 강조, 문법 등이 역할 표현력입니다.
매핑 근접성#
- 매핑 근접성 차원은 프로그래밍 언어 또는 코드가 문제의 해결 영역에 얼마나 가까운지를 의미합니다.
- 개발 분야에서는 도메인을 코드에 더 잘 통합하는 것에 대한 관심이 있으며, 도메인 주도 설계 철학과 같습니다.
힘든 정신 활동#
- 어떤 시스템에서는 사용자가 시스템의 외부에서 힘든 정신 활동을 수행할 때 생각하는 것이 어려울 수 있습니다.
- 어떤 연산들은 작업 기억 공간에 부담을 주기 때문에 힘든 일이 될 수도 있습니다.
보조 표기법#
- 보조 표기법 차원은 프로그래머가 공식 규격에는 없는 의미를 코드에 추가할 가능성을 나타냅니다.
추상화#
- 추상화 차원은 시스템의 사용자가 기본적으로 제공되는 추상화만큼 강력한 추상화를 만들 수 있는 여부입니다.
가시성#
- 가시성은 시스템의 다른 부분을 얼마나 쉽게 볼 수 있는지를 나타냅니다.
12.1.2 코드베이스 개선을 위해 CDCB 사용#
- 이러한 다양한 차원의 차이는 사람들이 코드베이스와 상호작용하는 방식에 큰 영향을 미칩니다.
- 코드베이스가 여러 다양한 차원에서 어떻게 작동하는지 파악하는 것이 중요합니다.
12.1.3 설계 기동 및 트레이드오프#
- 특정 차원을 개선하기 위해 코드베이스를 변경하는 것을 설계 기동이라고 합니다.
- 설계 기동으로 인해 다른 차원이 변경되는 경우가 많습니다.
오류 경향성 vs 점도#
- 시스템의 모든 항목에 대해 타입을 추가하는 것은 사용자에게 추가 작업의 부담을 줍니다.
점징성 및 점진적 평가 vs 오류 경향성#
- 잠정성과 점진적 평가가 높은 시스템에서 높은 시스템에서는 미완성되거나 불완전한 코드라도 스케치하고 실행할 수 있습니다. 다만 이는 오류 경향성에 영향을 미칠 수 있습니다.
역할 표현력 vs 분산성#
- 명명된 매개변수 같은 문법 요소를 추가하면 역할 표현력이 개선될 수 있습니다.
12.2 차원 및 활동#
12.2.1 차원이 활동에 미치는 영향#
- 검색할 때 일부 차원은 중요한 역할을 합니다.
- 분산성은 코드를 더 길게 만들고, 검색할 코드가 더 많기 대문에 검색에 부정적인 영향을 줍니다.
- 보조 표기법은 검색에 도움을 줍니다.
- 전사할 때(즉, 미리 정의된 계획을 기반으로 기능을 구현할 때) 일관성 같은 일부 차원이 나빠질 수 있습니다.
- 코드베이스에 새 기능을 추가할 때 가장 도움이 되는 것은 도메인에 대한 매핑 근접성입니다.
- 새로운 설계 아이디어를 탐구할 대 가장 도움이 되는 차원은 잠정성과 점진적 평가입니다.
차원 | 돕는 활동 | 악영향을 미치는 활동 |
---|
오류 경향성 | | 증가 |
일관성 | 검색, 이해 | 전사 |
분산성 | 검색 | |
숨겨진 의존성 | | 검색 |
잠정성 | 탐구 | |
점도 | | 전사, 증가 |
점진적 평가 | 탐구 | |
역할 표현력 | 이해 | |
매핑 근접성 | 증가 | |
힘든 정신 활동 | | 전사, 증가, 탐구 |
보조 표기법 | 검색 | |
추상화 | 이해 | 탐구 |
가시성 | | 이해 |
12.2.2 예상 활동에 대한 코드베이스 최적화#
- 여러 다른 활동이 시스템에 서로 다른 제약을 가합니다.
- CDN은 프로그래밍 언어의 사용자들에게 미칠 인지적 영향을 예측하는 데 도움이 되는 프레임워크입니다.
- CDCB는 코드베이스, 라이브러리, 프레임워크가 사용자에게 미치는 영향을 이해하는 데 도움이 되는 CDN의 확장판입니다.
- 대부분의 경우 서로 다른 차원 간의 트레이드오프가 이루어져야 합니다. 한 차원을 개선하면 다른 차원이 감소할 수 있습니다.
- 설계 기동을 통해 프레임워크의 인지 차원에 따라 기존 코드베이스의 설계를 개선하는 것이 이뤄질 수 있습니다.
- 코드베이스가 최적화할 대상인 차원에 대한 요구 사항은 수행하려는 활동에 따라 다릅니다.