저는 연금 및 투자를 돌보는 은행을 위해 대규모 금융 거래 시스템에서 일했습니다. 15 년간의 기능 변경 후 수동 회귀 테스트 비용은 릴리스 당 2 억 달러로 상승했습니다. (1 천만 LOC, 매일 천만 달러 거래). 이 시스템은 또한 회사 주변의 19 개 다른 시스템과 인터페이스하여 많은 양의 데이터를 이동시킵니다. 이 시스템은 Java로 구현되었습니다.
그러나 우리가 관찰하는 것은 '재사용'이 많을수록 회귀 테스트 비용이 증가한다는 것입니다. ( "터치 한 코드를 테스트해야"하고 재사용 / 공유 코드는 터치 할 때 여러 위치에 영향을 미칩니다. 따라서 '건조-반복하지 마십시오'에도 불구하고 코드를 복사하여 붙여 넣지 마십시오. -코드 복사 및 붙여 넣기에 대한 재정적 인센티브를 관찰합니다. 이것은 회귀 테스트 비용을 낮추기위한 것입니다. 공유 할 수있는 코드를 수정하고 싶지 않기 때문에 회귀 테스트에 큰 영향을 미치기 때문입니다.)
내 질문은 재사용 및 회귀 테스트 비용 간의 관계를 설명하는 소프트웨어 엔지니어링 원칙이 있습니까?
내가이 질문을 한 이유는 시스템을 테스트 할 작은 부품으로 분해 할 때 비용 이점이 있기 때문이다.
가정 :
'회귀 테스트'는 '허용 테스트'를 의미합니다. 즉, 다른 그룹은 환경 및 데이터 설정을 포함하여 비즈니스를 대신하여 시스템에 대해 새 테스트를 작성하고 기존 테스트를 재사용하는 데 시간을 소비합니다.
큰 회귀 테스트 비용에 대한 무자비한 반응은 '보다 자동화 된 테스트'라는 것을 알고 있습니다. 이것은 좋은 원칙입니다. 이 환경에는 몇 가지 과제가 있습니다.
(a) 자동화 테스트는 시스템의 자동화 테스트 범위가 높지 않으면 시스템 경계에서 유용하지 않습니다. (영향의 구체).
(b) 시스템이 이미 크고 복잡 할 때 높은 자동화 된 테스트 적용 범위에 프로그래머 시간이나 자본 투자에 대한 모멘텀을 얻는 것은 문화적으로 어렵습니다.
(c) 자동화 된 테스트 유지 비용은 프로젝트에서 숨겨져 있으므로 프로젝트 수준에서 쉽게 폐기됩니다.
(d) 이것은 은행에서 일하는 문화적 현실 일 뿐이다.
(e) 나는이 문제를 다른 방법으로 분해하기 위해 노력하고 있습니다 (분해).