Software Engineering

소프트웨어 추적성 (Software Traceability) - 소프트웨어 품질 확보의 출발점

habana4 2024. 12. 4. 21:56
반응형
 

소프트웨어 추적성은 상호 관련된 소프트웨어 아티팩트들간 연결된 성질을 의미합니다.

이를 이용하여 소프트웨어 품질을 평가하는 경우가 많은데요.

이번 포스팅에서는 소프트웨어 추적성에 대해 상세히 살펴 보도록 하겠습니다.

 

 

 

 

실무자로서 과거를 돌이켜보면, 소프트웨어 개발과정에서 실수로 요구사항을 못 보고 넘어갔다고 상황이나, 요구사항과 설계간 관계를 알지 못해서 요구사항을 누락했다거나, 테스트케이스가 작성되지 못했다거나 하는 상황을 심심치 않게 볼 수 있었습니다. 이는 매우 당황스러운 상황이며, 황당한 상황이 아닐 수 없습니다.

그러나 단순히 요구사항을 알지 못하거나 요구사항-설계, 설계-검증 간 관계를 알지 못한다는 것보다 더욱 안타까운 점은 이들간 관계를 입증할 수 있는 방법이 요원한 경우가 허다하다는 점입니다. 이는 모두 개발 과정에서 추적성 확보가 적절히 확보되지 못했기 때문에 발생하는 상황입니다. 

이로인해 개발 결과물인 소프트웨어의 품질을 보장할 수 없게 되며, 유지보수 비용도 급격히 증가할 수 있습니다. 아울러 재사용과 같은 소프트웨어 개발 효율성을 저하시키는 요인이 될 수도 있습니다.

 

그렇다면 소프트웨어 추적성이란 무엇일까요? 사전적 의미부터, 국제표준에서 언급하는 추적성의 의미과 목적에 대해 먼저 살펴 보겠습니다.

 

1. 소프트웨어 추적성 (Software Traceability)이란?

"추적성"의 사전적 의미를 대한민국 전자정부에서 운영하는 우리말샘에서는 다음과 같이 정의하고 있습니다.

출처: 대한민국 전자정부 공식누리집 우리말샘

 

그런데 이 정의만으로는 소프트웨어 추적성을 설명하기엔 좀 모자란 감이 있습니다. 그래서 ASPICE Annex C에서 추적성(Traceability)를 다음과 같이 정의하고 있습니다.

The degree to which a relationship can be established between two or more products of the development process, especially products having a predecessor-successor or master-subordinate relationship to one another. (ISO/IEC/IEEE 24765)

(추적성이란) 개발 프로세스에서 (작성/생성되는) 두개 또는 그 이상의 결과물(products)간에 설정되는 관계에 대한 수준으로, 특히 선행-후행 또는 상호간 주/부 관계를 갖는 제품(들을 대상으로 한다) (ISO/IEC/IEEE 24765)

 

이 정의에서는 좀 더 구체적으로 제품간 관계, 특히 선행-후행 또는 주/부 관계에 대한 수준으로 정의하는데, 이 역시 소프트웨어 추적성에 대한 용도가 무엇인지는 명확하게 규명할 수 없습니다.

 

이런 이유인지는 모르겠지만, 다음 그림에서 보는바와 같이 ASPICE v3.1에서 분리되어 있던 추적성(Traceability)과 일관성(Consistency)에 대한 BP(Best Practice)를 ASPICE v4.0에서는 이들을 하나로 통합하여 "양방향 추적성(Bidirectional traceability)을 통해 일관성(Consistency)를 확보해야 한다."라고 설명하고 있습니다. 

또한 프로젝트 관리와 프로세스 개선을 위한 성숙도 모델인 CMMI에서도 추적성은 개발산출물간의 관계를 명확히 하여 프로세스 효율성과 품질 보증을 강화한다고 설명하고 있습니다.

 

즉, 추적성의 목적은 - 최종적 목적이라고는 볼 수 없지만 - 양방향 추적성을 이용하여 일관성을 확보하고 이를 통해 소프트웨어 품질을 개선하는 것이라고 볼 수 있습니다. (참고로 일관성에 대해서는 다음 기회에 따로 정리 하도록 하겠습니다.)

 

2. 소프트웨어 추적성 분류 (Software Traceability Classification)

소프트웨어 추적성은 앞선 정의에서도 알 수 있듯이, 개발 프로세스 하에서 생산되는 모든 아티팩트들을 대상으로 합니다. 소프트웨어 공학적 관점에서 볼 때, 소프트웨어 개발 과정 즉, 개발, 운영, 유지보수 등 소프트웨어 생명주기 전반에서 작성/생성되는 산출물들을 대상으로 하며, 이들간 관련성 수준을 추적성으로 정의하기 때문에 소프트웨어 추적성은 다음과 같은 대분류를 고려해 볼 수 있습니다.

 

  • 요구사항 추적성: 요구사항과 설계, 코드, 테스트 케이스 간의 관계를 추적하는 것으로, 가장 일반적인 추적성 유형입니다.
  • 설계 추적성: 설계 문서와 코드, 테스트 케이스 간의 관계를 추적합니다.
  • 코드 추적성: 코드 모듈 간의 의존성이나 변경 내역을 추적합니다.
  • 테스트 추적성: 테스트 케이스와 요구사항, 설계, 코드 간의 관계를 추적합니다.

또한 다음 그림은 소프트웨어 추적성 분류 대상을 기반으로 고려해 볼 수 있는 여러 종류의 추적성을 표현하고 있습니다. 물론 이 모든 추적성 관계를 정의하고 관리할 필요는 없습니다. 필요에 따라 추적성 관리가 필요한 부분에 집중하여 정의하고 관리하는 것도 방법일 수 있습니다. 개발 및 장기적인 유지보수 관점에서 어떤 추적성 관계가 소프트웨어 개발에 효과적인지 살펴볼 필요도 있을 것입니다.

소프트웨어 추적성 관계 예

 

 

3. 소프트웨어 추적성 종류 (Type of Software Traceability)

앞에서 소프트웨어 추적성 분류가 산출물을 대상으로 구분한 추적성이라면, 소프트웨어 추적성의 종류는 소프트웨어 개발 프로세스에 따라 구분된 추적성이라고 볼 수 있습니다. 다음 그림에서 보는바와 같이 개발 프로세스에 따라 수직적 추적성(Vertical Traceability)과 수평적 추적성(Horizontal Traceability)으로 구분할 수 있습니다.

 

3-1. 수직적 추적성(Vertical Traceability)

수직적 추적성은 소프트웨어 개발 생명주기(Requirements, Design, Implementation, Testing) 단계 간의 관계를 명확히 정의하고 관리하는 것을 의미합니다. 이를 통해 요구사항이 설계, 구현, 테스트 등으로 충실히 반영되고, 각 단계 간의 누락과 불일치 문제를 방지할 수 있습니다.

수직적 추적성은 개발 산출물 간 위계적 관계를 나타내기 때문에 다음과 같이 수직적 추적성을 구분해 볼 수 있습니다.

  • 하향 추적성(Top-Down Traceability, Forward, Downstream): 요구사항이 설계/구현, 테스트로 적절히 반영되었는지 검증
  • 상향 추적성(Bottom-up Traceability, Backward, Upstream): 구현/테스트 결과가 상위 요구사항을 충족하는지 역으로 검증

수직적 추적성은 요구사항이 아키텍처와 설계, 코드, 테스트 단계에서 적절히 반영되었는지 보장하며, 상하위 연결을 통해 기능 누락 여부를 확인할 수 있으며, 요구사항이 적절히 반영되었는지 확인할 수 있습니다. 이를 통해 결함 원인이나 변경에 따른 영향 분석에도 적극적으로 활용될 수 있습니다.

  • 요구사항 충족 여부 확인: 요구사항이 설계 및 테스트 단계에서 반영되었는지 보장하고, 기능 누락 및 요구사항 준수를 확인할 수 있습니다.
  • 결함원인 분석: 테스트 단계에서 결함이 발견되면, 상향 추적성을 통해 역추적하여 결함의 근본 원인을 빠르게 파악할 수 있습니다.
  • 변경 영향 분석: 요구사항이 변경될 경우, 설계 및 구현, 테스트 단계에 미치는 영향을 명확히 확인 가능하며, 변경으로 인한 품질 저하를 방지할 수 있습니다.
  • 규제 준수: 자동차, 의료기기 등 안전이 중요한 산업에서는 개발 생명주기 전반의 추적성을 증명해야 하며, 규제 기관이나 감사나 검증시 필수 요건으로 작용합니다.

수직적 추적성을 확보하는 방법에는 요구사항 문서를 체계적으로 작성하고 관리 도구(예, IBM DOORS, Polarion, JIRA, Codebeamer 등)를 활용해야 합니다. 또한 요구사항과 설계, 구현, 테스트 간의 관계를 표 형식으로 정리한 추적성 매트릭스(Traceability Matrix)를 활용해야 합니다. 그리고 이러한 추적성 관리를 위한 프로세스를 자동화 하는 노력이 필요합니다. 그리고 각 단계간 추적성을 추기적으로 검토하여 누락 여부를 확인하며, 검증을 통해 개발 산출물이 요구사항에 충실히 부합하는지 확인할 수 있어야 합니다.

 

다만, 모든 개발 산출물에 대한 추적성을 확보하는데에는 초기 비용이 매우 높으며, 문서화와 도구 관리가 복잡하며 시간 소모적이라는 점은 충분히 숙지하고 있어야 할 한계이며, 이에 따라 조직 관점에서 적절한 해결방안을 수립할 필요가 있습니다.

 

3-2. 수평적 추적성(Horizontal Traceability)

수평적 추적성은 소프트웨어 개발의 동일한 단계 내에서, 또는 유사한 수준의 산출물 간 관계를 관리하고 추적하는 것을 의미합니다. 이는 주로 시스템의 여러 모듈이나 구성 요소 간의 상호 작용 및 연결성을 추적하는 데 중점을 둡니다.

수평적 추적성은 동일한 개발 단계의 산출물 간 연관성을 나타냅니다. 예를 들어, 시스템 요구사항 간의 관계, 설계 모듈 간의 의존성, 테스트 케이스 간의 상호 연결 등이 있으며, 이러한 추적성을 통해 시스템 전체의 일관성과 통합성을 확보할 수 있습니다.

 

수평적 추적성을 통해 모듈간 상호작용을 이해할 수 있으며, 변경 영향 분석, 통합 및 테스트 효율성을 향상시킬 수 있습니다. 이를 통해 시스템 전반의 품질을 보증할 수 있습니다.

  • 모듈간 상호 작용 이해: 소프트웨어 시스템은 여러 구성 요소로 이루어져 있으며, 각 구성 요소는 서로 상호 작용을 통해 기능을 수행합니다. 그러므로 수평적 추적성을 통해 모듈 간 의존성과 상호작용을 명확히 정의하여 통합 오류를 방지할 수 있습니다.
  • 변경의 영향 분석: 특정 구성 요소가 변경되었을 때, 다른 관련 모듈에 미치는 영향을 신속히 파악할 수 있으며, 통합 시 결함 발생 가능성을 최소화 할 수 있습니다.
  • 통합 및 테스트 효율성 향상: 통합 과정에서 모듈간 연결이 잘못되거나 누락되지 않도록 추적성을 제공할 수 있으며, 테스트 설계 시, 모듈간 인터페이스를 명확히 이해하여 보다 정확한 테스트 수행이 가능해 집니다.
  • 시스템 전반의 품질 보증: 전체 시스템에서 일관된 기능 구현과 데이터 흐름을 보장할 수 있으며, 통합된 결과물이 요구사항을 충족하는지 검증할 수 있습니다.

수평적 추적성을 확보하는 방법에는 각 모듈이 다른 모듈과 상호작용하는 방식, 예를 들어 데이터 입/출력을 명확하게 정의하거나, 수직적 추적성과 마찬가지로, 모듈간 관계를 표로 시각화한 추적성 매트릭스를 활용할 수 있습니다. 단, 수직적 추적성 매트릭스와 수평적 추적성 매트릭스는 그 형태가 차이가 있다는 점을 간과하면 안되겠습니다. 그리고 모듈간 연결성을 기반으로 한 테스트케이스를 추가적으로 작성하여 통합 시 문제가 발생할 가능성이 높은 부분을 집중적으로 테스트하는 것이 필요합니다.

 

3-3. 수직적 추적성과 수평적 추적성의 차이

구분 수평적 추적성
(Horizontal Traceability)
수직적 추적성
(Vertical Traceability)
대상 동일 단계간 산출물 관계 개발 단계간 상위-하위 산출물 관계
목적 모듈간 통합과 상호작용 관리 요구사항 충족과 단계별 산출물 추적
적용범위 설계간, 테스트간, 코드간의 관계 요구사항 - 설계 - 구현 - 테스트의 계층적 관계
주요사례 모듈간 데이터 흐름, 인터페이스 설계 요구사항 충족 여부, 변경사항 추적

 

3-4. 양방향 추적성과 일관성

양방향 추적성이란 요구사항, 설계, 구현, 테스트 간 상향 추적(Backward Traceability)과 하향 추적(Forward Traceability)이 모두 가능하도록 관계를 명확히 설정한 것을 의미합니다. 앞에서 간략히 언급되었다시피, ASPICE 관점에서 일관성은 추적성이 확보되었을 때 비로소 달성됩니다.

  • 일관성의 중요성: 요구사항, 설계, 구현 간에 불일치가 없도록 보장하여 개발 산출물이 조화를 이루도록 합니다.
  • 추적성과의 연계: 양방향 추적성을 통해 요구사항 변경이 설계와 구현에 정확히 반영되었는지, 테스트가 모든 구현 요소를 검증했는지를 확인함으로써 일관성을 유지합니다.

마치며...

소프트웨어 개발에서 추적성은 품질 보증과 효율적인 개발 프로세스의 기반이 됩니다. 특히 양방향 추적성을 통해 요구사항, 설계, 구현, 테스트 간 일관성을 유지하면, 변화하는 요구에도 유연하게 대응하며 품질을 보장할 수 있습니다.

 

형상관리변경관리 프로세스를 구축하여 추적성을 체계적으로 관리하고, 소프트웨어의 신뢰성과 규제 준수를 동시에 달성하는 데 집중해야 합니다. 추적성을 잘 확보한 엔지니어링 프로세스는 고품질 소프트웨어 개발의 핵심입니다.


함께 읽을만한 포스팅..

2024.07.03 - 소프트웨어 형상관리와 소프트웨어 개발

 

소프트웨어 형상관리와 소프트웨어 개발

소프트웨어 형상관리 (Software Configuration Management)의 의미소프트웨어 형상관리는 다양한 소프트웨어 개발 표준에서 중요하게 언급되며, 각 표준은 형상관리의 정의와 목적을 명확히 하고 있습니

habana4.tistory.com

2024.07.16 - 소프트웨어 품질:: 형상관리 측정 지표

 

소프트웨어 품질:: 형상관리 측정 지표

소프트웨어 개발에서 형상관리(Software Configuration Management, SCM)는 소프트웨어의 품질과 일관성을 유지하는데 필수적인 역할을 합니다. 따라서 얼마나 충실하게 SCM이 이루어지고 있는지를 확인할

habana4.tistory.com

 

반응형