重新定义软件质量

2020-10-25 03:07:53

我最近的很多咨询工作都是为了帮助团队更全面地看待软件质量--这不仅仅是测试人员(或开发人员)应该关心的事情。这样做,我已经开始形成一个还没有完全成熟的想法-但它帮助我更好地解释了事情-我希望您能对此发表意见。

关于软件质量的很多困惑是,它对不同的人意味着不同的东西,到目前为止,最好的定义是禅宗式的,比如温伯格的“对某人(重要的人)的价值”。它们不描述技术代码质量之类的东西,我凭直觉知道这很重要,但不能直接提供价值。

根据质量的整体定义,团队会衡量错误趋势、代码覆盖率等。衡量的东西会被优化,所以我们最终会过度优化超出合理范围的东西。空气和食物是必需品,但是比我们需要的更多的空气和食物并不能真正提高生活质量。与此类似,技术正确性和性能也是必要的,但超过某一点会使我们的回报递减。就像任何局部优化一样,我们有可能因为做错了事情而损害整个管道。当我向一位客户解释这种比较时,我突然想到,在Abraham Maslow的需求层次结构和软件质量之间建立一个平行关系可能是值得的。

著名的马斯洛金字塔将人类的需求从生理需求(如食物、水)、安全(个人安全、健康、财务安全)、爱和归属感(友谊、亲密)、尊重(能力、尊重)到自我实现(实现潜力)层层列出。需求层次的前提是,当缺少较低层次的需求时,我们会忽略较高层次的需求。例如,当一个人没有足够的食物、亲密感和尊重时,食物就是最紧迫的事情。另一个前提是,满足金字塔较低层次的需求会带来一定程度的回报递减。我们的生活质量通过更多地满足更高层次的需求而提高。吃太多的食物会导致肥胖。超过需要的机场安检变得很麻烦。金字塔模型的核心思想是,一旦基本条件得到满足,我们就应该朝着更高层次的目标努力。

也许软件质量不像禅宗般的句子那么简单,也许衡量错误确实提供了一些价值。也许我们应该停止试图让它变得简单,取而代之的是不同层次的模型质量。我试着用一个客户做这个模型--这是他们的特殊案例--但它可能也适用于其他客户。

最低级别的质量是生理需求--如果这些东西得不到满足,软件就完全没用了。对于这种特殊情况,我们确定了两件事:软件必须是可部署的,并且它必须满足最低限度的功能,这样才能“工作”。TDD、功能测试(自动+手动)、部署后测试等活动帮助我们证明这类需求得到了满足。测量错误数量、代码覆盖率等也适用于此级别。与人类的生理需求类似,适可而止,过了某个时点就没有更多的价值可得了。较新版本的Microsoft Office有数千项从未有人使用过的功能,因为即使是Word 95也有足够的功能。投资于更多的特性,开发、测试和维护它们,是一种矫枉过正的做法。

一旦软件“运行”,我们需要的第二件事就是“运行良好”。看看人类的安全需求和我们对软件的需求之间的相似之处,这就是人们通常所说的非功能性的很多方面。性能、可靠性、安全性等。架构设计和性能优化等活动都达到了这个级别,性能测试、渗透分析、压力测试等可能证明我们已经足够满足了。与人类安全需求类似,适可而止。最近苹果iTunes商店安全问题的例子表明,这个空间中超过需要的功能会惹恼人们,或者浪费钱。构建一个可以处理数百万并发用户的系统,而在未来一年左右的时间里,我们将只有数千个用户,这是一种可怕的时间浪费。几年前,我自己在这方面损失了很多钱-我们在体系结构上镀金,而不是运输更多赚钱的东西。

如果软件运行良好,并且足够安全,那么下一个层次就是爱和归属感--现在我们跨越到软件的用户那里。Twitter就是一个很好的例子。Twitter以失败鲸而闻名,其二级品质通常刚刚好,但这并没有阻止他们建立一个庞大的忠实用户社区。用户交互设计、图形设计、社区参与和类似的支持软件等活动,以满足爱/物层面的需求

到目前为止,这并不是什么革命性的事情。如果我回顾我的大多数客户合约,这三个级别是规范、开发和测试方面的大部分投资,也大致与这三个级别成比例。大部分投资都用于构建功能并对其进行测试。性能和诸如此类的事情有时是计划好的,通常是反应性内置的,测试频率较低。我很少与那些认真对待可用性、投入大量时间或金钱进行设计和测试的团队合作。金字塔模型告诉这个具体的客户,我与之共事,或许他们应该开始稍微转移投资。但真正令人惊讶的是,当我们开始关注最高的两个级别时。

可用性本身可能是一种矫枉过正的做法。这是毫无疑问的。在“设计带来的改变:设计思维如何转变组织和激励创新”一书中,Tim Brown将诺基亚Ovi作为一个关键的成功故事来展示设计理念。

仅仅一年后,诺基亚发布了Ovi,这是一项新的服务,可以通过其任何多媒体设备访问。设计思维使诺基亚不仅探索了新的可能性,而且还说服自己,这些可能性足以迫使自己放弃其根深蒂固的、以前成功的方法。时机恰到好处。今天,Ovi是该公司的运营业务部门之一,而诺基亚--一家技术领先者--已经将自己重塑为一家服务提供商。

哦,真讽刺。如果有IT版的原教旨主义,那就是这里。作为技术领先者的诺基亚已经“将自己重塑为一家服务提供商”,但没有人想要他们的服务。别误会我的意思,我不是说用户交互设计不好,也不是说设计思维是错误的--只是说这不是结束。这是一种被满足的需要,但在一分之后带来的回报却在递减。在它上面的金字塔上还有两层。

诺基亚Ovi的故事中缺少的关键一点是潜力的实现。可用性标志着潜力,如果没有人使用它,我们在乎吗?高于可用性的水平就是有用的。我最近与一位客户做了一项研究,查看了日志文件,我们发现大约60%的功能没有得到足够的使用,不足以证明在进一步维护方面的投资是合理的。也许我们可以投资于衡量软件的有用性,而不是在功能测试上投入大量资金?我为Specification by Example采访的一个团队:成功的团队如何交付正确的软件使用自动化测试作为开发目标,但在第一次通过后禁用大多数测试。取而代之的是,他们通过小批量交付和测量生产使用来防止出现问题。他们对质量的定义更多的是在第四个级别,而不是第一个级别,这使得他们能够更有生产力。如果业务用户期望的指示器不在那里,则取消该功能。把这看作是一种商业漏洞。

最后,有人使用某项功能并不一定意味着该功能从一开始就适合该业务。上面还有一个层次--对应于自我实现。该软件是否实现了其最初的预期目标?它是省钱、挣钱还是保钱?或者不管最初的关键业务目标是什么。如果不是,那么人们是否使用它,它是否可用或性能如何,或者所有单元测试是否通过都无关紧要。这就是影响映射和特性注入等活动发挥作用的领域,以及构建-测量-学习循环的想法和精益创业项目中的可操作度量来证明它们。

顶层确实是“越多越好”的地方,也许下面两层逐步过渡到“够好就够好”,最低的两层肯定属于“够好”的范畴。然而,在我看来,大多数软件团队只在最低的两个级别投资、构建和测试,没有办法解释为什么这是不好的。在视觉模型中分解东西,比如这里有五层金字塔的模型,帮助我让一个团队开始更好地思考他们真正想要实现的目标。下一个轮到你了!