我正在为经理准备一份关于单元测试的演讲。我的团队多年来一直在编写单元测试,但公司的其他领域似乎很难采用它。我可以让开发人员对此感到兴奋,但如果没有管理层的支持,它就不会成为标准。
你们对如何最好地处理这个问题有什么建议吗?您过去尝试过哪些有效的方法?哪些事情没有奏效?
我正在为经理准备一份关于单元测试的演讲。我的团队多年来一直在编写单元测试,但公司的其他领域似乎很难采用它。我可以让开发人员对此感到兴奋,但如果没有管理层的支持,它就不会成为标准。
你们对如何最好地处理这个问题有什么建议吗?您过去尝试过哪些有效的方法?哪些事情没有奏效?
对于非技术经理,我已经回到了盖房子的类比。他们是否会在没有蓝图的情况下建造一个,只是从一堆砖头中取出一块块放在另一块上面,心里有一个模糊的房子形状的想法?如果不是,那么为什么他们在编码、设计审查等之前不接受适当的文档?
对于单元测试,您可以尝试将其与将各种房屋组件放在一起(砖、水泥、门、窗、管道)之前单独进行质量测试进行比较
对于那些掌握任何技术的人,我提到 30% 到 50% 处理错误条件和恢复(在关键任务嵌入式系统中),如果没有单元测试,你就无法测试。例如,如果您仅进行黑盒集成测试,那么您如何以受控和可重复的方式测试当模块 A 无法在给定点分配内存时会发生什么,或者在等待回复消息时模块 C 中的超时到期从某个地方,或者通常会成功的数据库读取。说明通过虚拟化接口模块,您可以随意模拟它们的错误行为。
当然,我用一个轴上的 $ 符号和另一个轴上的时钟来绘制我最喜欢的图表。我一有机会就用这个来击败管理层,以表明发现错误的成本越晚(更改需求规范中的一行 - 5 分钟;设计文档中的几段 - 小时;几百个代码行数(在代码审查或单元测试阶段)——天;在大海捞针中找到针并在系统测试时纠正它——几周)。
这不仅仅是单元测试——你必须说服管理层——以及你的开发人员——文档、审查、测试的“不必要的开销”......一般的软件流程(包括学习新工具)......实际上节省时间,而不是为项目增加时间。换句话说,出错需要更长的时间和更多的成本。测量两次,切割一次,等等
对于单元测试,告诉他们持续集成。我强烈推荐 Jenkins,但使用适合你的任何东西。说明常规构建,无论是每晚还是每次签入,都可以自动从您的 VCS 中提取单元测试并运行它们,发送电子邮件或以其他方式提醒新代码,这些代码几乎会在发生时立即破坏现有测试。
如果这些都不起作用,那就找份新工作(如果你在新加坡,或者想成为,跟我谈谈 ;-)
向他们展示测试已经发现问题并挽救了局面的示例。
要建立在@hvgotcodes 答案的基础上,不要只是告诉他们它是如何让事情变得更好的,而是从你自己的团队中编译一些统计数据来了解它是如何做到的
尤其是成本,企业喜欢省钱:)
不要误导。
当您引用降低成本时,您是在暗示 QA 和更容易重构的成本高于创建和维护测试的成本。指出这一点并尝试制定一些指标来支持您的观点会很好。
问题是您不能在未采用的路径上赋予美元价值(“我们避免了 1,000 个需要花费 100 万美元来修复的缺陷!”)。
但是您应该提前了解创建测试需要成本的事实,并且必须对其进行维护。如果您创建它们然后让它们年久失修,那么您的处境同样糟糕。
当您添加新功能时,您的论点将得到加强,并且更容易,因为您保持代码干净。
我认为就非技术经理而言,统计数据是最好的例子。代码完成,第 2 版。对几项研究的总结表明,单元测试导致平均 30% 的缺陷检测率(表 20-2,第 470 页)。我认为从那里开始应该很容易,并证明更少的错误可以转化为更多的钱。
在某些情况下,我发现等待合适的机会是关键。
例如,在一个案例中,我一直等到有客户的热门网站。这是非常痛苦的(想想$$$)。高层管理人员提出的不可避免的问题之一是如何避免将来出现同样的问题。那是我向管理层介绍单元测试的时候......
所以我想这在很大程度上取决于具体情况。
1 - 他们需要知道,甚至批准吗?你是工程师,你比他们更了解如何构建有效的东西,所以他们真的不应该干涉。如果这是您为他们制造的新车模型,他们会关心您使用了哪些工具和质量/安全保证方法吗?不会这么想。
2 - 缺陷成本非常非常高。低质量、缺陷和技术债务是一个非常严重的项目风险,可能会危及软件项目的整个投资。缺陷预防比缺陷检测更具成本效益(根据研究是许多倍数)。单元测试具有尽可能短的反馈循环,从而避免系统性的低项目质量并显着降低项目风险。
3 - 如果缺陷率非常低,您将无法在很长一段时间内快速发展——也就是说,投资胜过支出/投机(这是他们应该得到的)。
告诉他们它使代码更易于维护,从长远来看会为他们省钱。如果操作正确,它还可以减少错误。
换句话说,它降低了成本并提高了软件的可靠性。
单元测试,如果做得好,应该
贵公司是否收集了任何相关统计数据,可以具体作为这些主张的依据?即 QA / 用户在不同产品中发现的错误数量,或平均错误修复 / 功能实施成本,......
如果可能的话,我会尝试提供您的公司过去在支持未经测试的实时代码时所面临的困难的真实示例。然后继续用具体的例子来强调如果测试已经到位,更新和修复的支持成本会降低。
祝你好运,让我们知道你的进展如何。:)
类比经理们可能经常使用的东西——比如他们的邮件客户端或文档编辑器中的拼写检查器......