如何说服项目发起人您的代码中的所有函数都应该进行单元测试

时间:2008-09-08 20:51:46

标签: unit-testing project-management tdd

在大多数情况下,非技术人员在编写单元测试时看不到任何价值。他们只想完成基本代码,不要花钱和时间在单元测试等事情上。后来,他们每天都要求更多修复一个bug。项目缺少最后期限,他们仍然认为在良好的自动化测试中没有价值。

9 个答案:

答案 0 :(得分:9)

最好的方法是不要让“非技术”人士如此技术化。只需将其构建到交付时间而无需详细说明。

另一方面,听起来项目截止日期实际上并不现实。

答案 1 :(得分:7)

我只是wrote at length关于这个话题。

总结我反对共同抱怨的论点:

清理对用户是不可见的;我们需要添加新功能。 用户也可以看到由杂乱的代码不断产生的错误。修复这些错误的时间本来可以用于添加功能。我们保持高质量债务的时间越长,添加每个新功能所需的时间就越长。

我们没有时间进行清理。 您宁愿花时间修复问题所产生的错误而不是修复问题?这就像每个周末都在捣乱杂草,而不是从根本上拉扯它们。预防的价值是治愈的十六倍。

开发人员陷入了困境;他们应该在自己的时间内摆脱它。 如果开发人员没有像他们那样快速地发布新版本,如果他们没有迅速回应早期采用者的反馈,即使产品变形为与其原始概念完全不同的野兽,我们也不会拥有我们当前的客户和收入。我们将为另一家公司工作,而不是抱怨我们建立的软件。

注意CEO:指点阻碍解决方案。相反,挑战您的开发人员以减少错误报告。这很容易测量,因此您可以跟踪时间与结果。请记住,开发人员更喜欢实现新功能来修复错误,所以如果他们乞求时间来修复错误,那就很严重了。

答案 2 :(得分:6)

尝试使用模拟。询问他们是否希望他们的孩子驾驶沃尔沃或Kit汽车在街上制造。答案应该始终是沃尔沃。然后问为什么?答案是它更可靠和安全。他们怎么知道的。答案是测试。所有汽车都经过了极端的测试,成本也反映了这一点。如果他们希望软件尽可能可靠,则需要进行测试。 (或者他们成为碰撞测试假人)

答案 3 :(得分:6)

我觉得问题是你说“所有功能”。所有函数都不需要单元测试,有些人认为单元测试单个函数在很多情况下都是正确的错误。

相反,我建议单元测试实际的“功能单元”。不是为每个函数编写单个测试,而是为每个场景或特征编写测试。除了节省大量时间并允许您在雷达下进行测试之外,它通常更准确,因为它实际上测试了它们使用的功能。通常,功能单元测试不能测试正确的东西,甚至更糟糕的是测试模拟。

我建议您不惜一切代价避免使用模拟测试。模拟的使用基本上使测试无效,因为您正在测试它在理想情况下的工作方式,而不是它在现实世界中的工作方式。

另一个好处是您还可以获得更好的死代码检测。高级测试未涵盖的任何代码可能未被使用,可以删除。永远不要低估消除死代码的价值。

答案 4 :(得分:1)

在开发已经开始之后销售完整的单元测试非常非常。我甚至会说它通常是不可能的。如果您没有从所有项目利益相关者那里获得完整的单元测试,那么您应该为您可以发出的任何单元测试感到高兴。

答案 5 :(得分:1)

你没有。测试不应该是单独编写的,因此不需要在日程安排中考虑它们,而不是专门安排“编译”或“输入代码”。编写测试所花费的任何时间都应该由他们保存你的时间来抵消。

答案 6 :(得分:1)

做吧。当你编写更多代码并首先考虑问题时,你会在开始时变慢。但是你会很快通过项目中的其他人,因为你有更少的错误/错误,你的设计更好。

如果您在设计系统时考虑到测试,那么设计本身就会比不可测试的设备更灵活。然后,将来更快地添加功能。

答案 7 :(得分:0)

@Craig,我也考虑过汽车的模拟,但我认为这个类比已经分崩离析,因为它听起来已经在项目中进行了测试,而这仅仅是程度问题。在这种情况下,汽车类比变成“只要关键系统(制动器,前大灯,变速箱等)经过测试,你是否关心汽车顶灯是否经过测试”。作为一个匆忙的项目赞助商,看到该项目已经过了它的结束日期,我并不关心圆顶灯是否经过测试。

答案 8 :(得分:0)

销售单元测试价值的一个好方法是从支持的角度来看 - 如果您使用的单元测试框架具有可以部署的运行时(nUnit是一个),您可以进行“运行单元测试” “帮助菜单上的菜单项。这可以运行所有单元测试,结果可以发送给技术支持,以帮助调试客户端问题。

显然,有很多方法可以用来销售增加的稳定性,但技术支持是大多数管理者希望降低的“真钱”成本。