为什么选择阿仁'•我们在防止错误方面做得更多吗?

软件行业不断抱怨低劣的质量。我听说过几乎所有借口都是不良软件的借口:离岸外包,功能爬升,复杂性飙升。普遍的借口是,糟糕的软件是生活中的事实,就像潮汐和月相一样。

这个观点有多错误!劣质软件不是我们必须忍受的东西。我们必须停止关注不良的产品质量,并开始修复不良的制造工艺。是的,我说了“ M”一词: 制造业。 软件与其他制造产品没有什么不同。汽车,烤面包机,咖啡壶和计算机都下线了。如果在该行的末尾发现缺陷,则逐项修复该缺陷没有任何目的。流水线本身必须进行检查和固定。软件没有什么不同。还必须防止软件缺陷,而不仅仅是检测缺陷。

我们有很多时间来学习如何处理汽车行业的缺陷。是日本人首先学习了无差错装配线的教训。德国人和瑞典人迅速效仿。后来,美国人开始生产质量更高的汽车和卡车。汽车行业发现了什么?错误预防过程。

定义错误预防

让我们研究一下这意味着什么。可以遵循五个特定的程序来防止制造错误:

  1. 识别错误。
  2. 查找错误原因。
  3. 在生产中找到导致错误的点。
  4. 实施预防措施,以确保不会再次发生错误。
  5. 监视过程。
1pixclear.gif
 开发者对话
 亚当·科拉瓦(Adam Kolawa)
1pixclear.gif
亚当·科拉瓦(Adam Kolawa) 博士共同创立 Parasoft Corp.,是一家私有公司,在全球拥有10,000多个客户。合著者 防弹Web应用程序 (Hungry Minds,2001年),他为各种领先的出版物做出了贡献,并撰写了评论文章和技术文章。

例如,汽车装配线上的检查人员发现座椅螺栓未正确拧紧。造成此错误的原因是,螺栓不完全适合用于拧紧螺栓的工具。纠正措施是在座椅安装线中的位置提供合适的装配工具。通过仔细检查阀座螺栓的密封性来监控过程。监视安装了座椅的工作站还提供了有关使用正确工具节省时间的数据。

错误预防与错误检测有很大不同。错误检测是在构建应用程序之后发现并修复错误的过程;导致这些错误的有缺陷的过程将不予纠正。在阀座示例中,错误检测仅会拧紧装配线末端的阀座螺栓。该操作可能确保了螺栓的正确安装,但是这将根深蒂固地埋在制造过程中。该问题永远不会消失,因为根本原因没有得到纠正。

错误检测是软件行业目前通过处理症状(错误)而非疾病(开发过程)来处理错误的方式。鉴于检测不能解决错误的根本原因,我们必须愤慨地问:我们的行业为什么不利用错误预防?为什么在防止错误方面表现不像其他行业?这些是至关重要的问题,因为我们几乎接触和使用了所有软件。

每当我问这样的问题时,都会有人指出软件行业内的质量改进计划直接解决了错误预防问题。 ISO 9001,SEI-CMM和6 Sigma是此类举措的最著名例子。尽管这些措施很有价值,但它们并不能直接解决错误预防问题。他们仅试图以防止错误为目的来规范流程。没有自动化,质量计划就无法实现其目标,因为它们无法实施实际执行和支持其书面程序的实践。

自动化错误预防

对于软件行业来说,制作高质量应用程序的唯一真实方法是通过自动错误预防(AEP)的概念。此概念由上面列出的用于防止错误以及自动化的五个相同步骤组成。婚礼错误的预防和自动化是一项艰巨的任务,许多尝试都失败了。

那怎么办呢?首先,定义并实施经过验证的技术,以帮助防止应用程序开发过程中的错误。诸如编码标准,单元测试,集成测试,负载测试,连接性验证,监视等之类的实践可以置于软件开发生命周期中并实现自动化。如下图的生命周期图所示,它围绕软件开发的四个核心阶段提供了AEP“密封”。 AEP是完整的生命周期错误预防。

word_graphic.gif

Figure 1: The 软件开发 Life Cycle

在开发过程中任何地方发现的错误都可以与之前的过程相关联。所有需要做的就是修改上游过程并防止错误再次发生。这在生命周期图形中由反馈循环显示(由虚线箭头指示)。通过这种方式,从个人实践中获得的信息可用于智能地改进流程并防止将来出现错误。

当这样的过程自动化时,它们可以无限期地保留在原处,每天将收益返回到软件开发生命周期中。 AEP概念适合任何开发过程,包括传统的瀑布和迭代方法以及最新趋势(例如极限编程)。更重要的是,AEP正是试图实施的质量改进计划(例如ISO 9001,SEI-CMM和6西格玛)。 AEP应该集成到任何质量计划中,这是依赖书面程序执行质量改进措施的唯一行之有效的方法。

实施AEP

在确定需要自动化的错误预防技术之后,下一步是解决使这些实践得以成功实施的关键问题。一个重要的问题是群体行为。经验告诉我们,这些做法必须嵌入将要使用它们的软件开发小组中。这意味着开发小组中的每个人都必须了解他的角色(无论是开发人员,架构师还是项目经理),以及在适当的实践下如何坚持该角色。例如,要使小组成功采用自动化编码标准,必须了解谁创建了编码标准,这些标准的存储位置,谁使用它们以及何时使用它们。最重要的是,定义小组行为可确保所采用的做法根深蒂固,并且不会随着时间而恶化。

AEP中的另一个关键问题是改进流程的能力。如上所示,这是通过反馈循环来完成的。让我给你举个例子。假设您正在开发N层系统。要确定系统可以管理的流量类型,您需要执行负载测试。不幸的是,您发现负载使系统不堪重负。这样做的原因是中间件正在泄漏与数据库的连接。

Normally, you would simply fix this bug, but that won't prevent similar errors from occurring. In AEP, you want to also correct the root cause of this error to prevent further leaks. The root cause is that when a connection is opened, it isn't closed. So how can you prevent this? Assuming that the failing middleware is written in Java, you need a way to ensure that each class opening a method has a finalize() method that closes the connection or the finally block. Coding standards are a great way to achieve this—simply create a rule that checks for this pairing, to ensure that each method opened is also closed. 通过 creating this rule, you have moved upstream from the load-testing error and established a coding rule that mandates that no connections should be left open. This loop is illustrated in the life-cycle graphic by the dashed arrow.

下一步是自动实施此更改。可以使用编码标准扫描工具来确保在整个开发组中强制执行此规则。这是真正的AEP实施。您不仅会改变惯例以确保不会重复出现错误,而且还会使过程自动化并使用其结果来衡量整个开发团队对变更的遵循程度。这样就可以确定您的更改是否有效,或者是否需要在流程中的其他地方实施其他更改。

这里描述的过程相当复杂且难以执行。正确实施需要经验和耐心。随着您在AEP中的经验积累,您会发现实施预防方法变得更容易实现。幸运的是,有预打包的编码标准可以帮助您减少实施AEP所需的初始工作。这些预先打包的规则是开始使用AEP实践的最有效,最简单的方法。与其遍历所发现的每个错误的反馈循环,不如简单地采用一组预包装的编码标准并将其放到您的代码中会更有效。这使您可以利用行业专家的辛勤工作,他们花费了无数时间分析大量代码,以提出防止大量错误类型的规则,而不必在测试过程中亲自发现它们。

最后的话

软件产业必须成熟。没有有效的错误预防和流程改进,就不可能成熟。我们没有其他选择,我们必须这样做。如果我们不这样做,我们的行业将为此付出高昂的代价,就像美国汽车行业在1960年代和70年代所做的那样,当时美国汽车行业将近一半的市场输给了知道如何防止错误并生产质量更好的产品的外国竞争对手。 。

版权© 2003 IDG通讯,Inc.

  
在亚马逊上购买技术产品