软件质量是有成本的。用于度量测试的定量价值和效率的成熟方法称为质量成本方法。质量成本方法将项目和运行的成本分成与产品缺陷成本相关的四个类别:
(1)缺陷预防成本,例如培训开发人员,提高他们编写的代码的可维护性和安全性。
(2)缺陷检测成本,例如编写测试用例,配置测试环境和评审需求。
(3)内部失效成本,例如在发布之前,测试或评审期间,修复发现的缺陷。
(4)外部失效成本,例如将有缺陷的软件发布给客户导致的支持成本。
测试预算的一部分用于支付缺陷检测的成本(即便在测试人员没有找到缺陷的情况下也会花费的成本,如开发测试花费的钱),而剩余部分用于支付内部失效成本(与找到的缺陷相关的实际成本)。缺陷检测成本和内部失效成本的总和通常会比外部失效成本低很多,而这正是测试的价值所在。
假设某经理在管理一款移动端应用的测试。该应用提供在线预约运动场馆及健身教练服务,可以允许用户输入他们自己的大致位置和偏好,以找到与他们匹配的运动场馆和健身教练,规避他们不喜欢的运动场馆和健身教练。通过度量收集及分析计算得到了下面的质量成本:平均缺陷检测成本为2500元,平均内部失效成本为3500元,平均外部失效成本为40 000元。平均缺陷检测成本和平均内部失效成本是通过在发布之前发现的缺陷数目计算得到的。而平均外部失效成本是通过在发布之后发现的缺陷数目计算得到的。因此测试阶段发现的每个缺陷,可以为组织平均节省质量成本为40 000-2500-3500=34 000元。
缺陷检测成本:测试预算(TestBudget)由可复用测试资产(ReuseTestAsset)、重新确认测试费用(ConfimationAffair)及缺陷检测费用(BugTestAffair)三部分组成,如式(1-1)所示。
每个缺陷的平均检测成本(AverageTestAffair)由缺陷检测费用(BugTestAffair)和检测发现的缺陷数量(FoundedBugNum)决定,如式(1-2)所示。
内部失效成本(InternalFailureCost)由修复缺陷成本(FixBugAffair)和重新确认测试费用(ConfimationAffair)组成,如式(1-3)所示。
每个缺陷的平均内部失效成本(AverageInternalFailureCost)由内部失效成本(InternalFailureCost)和检测发现的缺陷数量(FoundedBugNum)决定,如式(1-4)所示。
每个缺陷的平均外部失效成本(AverageExternalFailureCost)由外部失效成本(ExternalFailureCost)和必须修复的缺陷数量(MustFixBugNum)决定,如式(1-5)所示。
其中,MustFixBugNum ≤ FoundedBugNum。
由此可计算出测试的回报。每个缺陷的测试回报(AverageTestReturn)由每个缺陷的平均外部失效成本(AverageExternalFailureCost)、每个缺陷的平均检测成本(AverageTestAffair)、每个缺陷的平均内部失效成本(AverageInternalFailureCost)决定,如式(1-6)所示。
测试净回报(TestReturn)由每个缺陷的测试回报(AverageTestReturn)和检测发现的缺陷数量(FoundedBugNum)决定,如式(1-7)所示。
测试收益率(TestROI)由测试净回报(TestReturn)和缺陷检测费用(BugTestAffair)决定,如式(1-8)所示。
在一般情况下,外部失效成本通常会比缺陷检测成本和内部失效成本的总和高很多,而这就是测试的价值所在。测试一方面是成本(费用),另一方面是一种投资(提高软件产品质量的声誉和组织的商誉,带来市场和销售利益),可以减少日后开支(如由缺陷引起的维修费用、由于软件质量低下引发的软件诉讼案的费用)。