성공적인 소프트웨어 신상품 개발가이드
소프트웨어 상품은 품질 때문에 흥하기는 힘들지만, 품질 때문에 망하기는 쉽다. 품질은 성공을 위한 필요조건이지 충분조건은 아니다.
1) 품질의 정의
품질에 대한 일반적인 정의는 ‘고객이나 사용자를 만족시킬 수 있는 제품이나 서비스의 특성’이다. 고품질 상품과 헷갈리는 것이 다기능 상품이다. 상품의 기능이 많은 것과 품질이 좋은 것은 다르다. MS 워드는 메모장과 비교가 되지 않을 정도로 많은 기능이 있지만 고품질이라고는 이야기할 수 없다. 메모장을 사용하는 사람이 MS워드의 기능을 기대하지는 않는다. 메모장 사용시 원하는 기능을 수행하지 못한 경험이 있는가? 반면 MS 워드는 원하지 않는 필요 이상의 기능을 수행하여 고객을 당황스럽게 하는 경우가 많다.고객의 입장에서는 기능의 고객가치 제공과 기능의 정확성 관점에서 4가지 유형의 품질로 구분할 수 있다.
- 적합한 품질 : 고객이 원하는 기능을 정확하게 제공
- 과잉품질 ; 고객이 원하지 않는 기능을 고품질로 제공하는 것으로 자동차에 금도장을 하는 것에 비유하여 골드 플래이팅(gold plating)이라고 한다.
- 고객에게 불편을 제공하는 결함 : 고객이 원하는 기능이 제대로 동작하지 않는 것으로 우선적으로 조치해야 한다.
- 문제가 되지 않는 결함 : 고객이 원하지 않는 기능이 제대로 동작하지 않는 것으로 고객이 원하지 않는 기능을 개발하고, 테스트하고, 고치는 비용은 큰 낭비이다.
판매자 관점에서는 제공하는 기능의 결함이 없는 상태가 높은 품질이다. 고객 관점에서는 원하는 기능의 결핍이나 과잉은 없고, 결함이 없는 상태가 높은 품질이다.
〈ISO / IEC 9126 소프트웨어 품질 특성과 척도에 관한 지침〉은 소프트웨어의 품질 특성과 품질 부 특성을 아래 표와 같이 정의하고 있다. 품질특성은 개념적으로는 명확하지만 객관적인 품질지표로 정의하는 것은 쉽지 않다. 아래 품질특성 중 고객관점에서 중요한 품질목표를 계량적으로 정의하여 관리할 것을 권고한다.
2) 기술부채(Technical Debt)
기술부채는 유지보수 담당자 관점에서의 품질이다. 미래에 갚기로 하고 돈을 빌리는 것을 금용부채라 한다면, 미래에 고치기로 하고 부실하게 코딩 한 것을 기술부채라 한다. 당장 결함을 유발하지는 않지만 스파게티 코드, 과도하게 복잡한 논리, 표준 미 준수 등이 이에 해당한다. 기술부채에 대한 대가는 유지보수 담당자가 치른다.
단기적인 일정준수를 위한 기술부채는 장기적인 개발속도 저하를 초래한다. 아파트 부실공사도 유지보수 관점에서 보완하지 않으면 붕괴라는 큰 사고로 이어질 수 있듯이 소프트웨어 기술부채도 방치하면 시스템이 중단될 수 있다. 기술부채의 금리는 고정금리가 아니라 시간이 지날수록 높아지는 변동금리이다. 따라서 기술부채는 평소에 꾸준히 갚아나가야 이자부담을 줄일 수 있으며 이를 리팩토링이라고 한다.
기술부채가 증가할수록 개발 마지막 단계에 안정화 테스트의 기간이 증가한다. 2개월 개발하고 1개월 테스트를 해야 하는 상황이 올 수도 있다.
3) 품질비용
품질관리에는 세 가지 원칙이 있다.
첫째, 결함을 만들지 않는 것이고(예방비용)
둘째, 결함이 있는 제품은 고객에게 전달하지 않는 것이고(평가비용)
셋째, 고객에게 전달된 결함이 있는 제품은 빨리 회수하는 것이다 (실패비용).품질비용은 위의 세 가지 원칙을 준수하기 위한 비용이다
품질통제와 품질보증은 품질향상을 위한 대표적인 활동이다. 품질통제는 결함을 제거하기 위한 활동으로 테스트가 대표적인 예이다. 반면 품질보증은 체계적인 품질통제 활동을 수행하는지 확인하는 활동으로 심사(audit)가 대표적인 예이다. 품질통제 활동이 산출물의 결함을 제거하여 품질을 높이는 방법이라면, 품질보증활동은 프로세스 결함(미 준수, 비효율)을 제거하여 산출물의 품질을 높이는 방법이다. 품질보증과 품질통제를 구분하면 아래 표와 같다.
소프트웨어 산업의 경우 1990년대 후반부터 20여 년 동안 전사적인 품질보증활동 (예:CMMI 적용)을 통해 품질향상을 하려는 시도가 유행했었다. 그러나 투자 대비 품질향상에 대한 성과를 달성하지 못하는 경우가 많아 최근에는 품질보증활동(3자의 프로세스 통제) 보다 프로젝트 팀의 품질통제 활동을 지원하는 활동이 확산되고 있다. 대표적인 예가 테스트 자동화, 테스트 주도 개발 등이다.