Unit testing 单元测试稳定生产应用

Unit testing 单元测试稳定生产应用,unit-testing,integration-testing,Unit Testing,Integration Testing,在开发社区中,单元测试是必须的,这似乎是一个绝对真理,您应该添加它,不管它花费多少(我知道它不是100%这样)。 让我在这里扮演魔鬼代言人 管理层希望引入单元测试,以期在每个开发周期中最小化回归开发错误 我认为覆盖大量应用程序的集成级或验收级测试是一个很好的开始。它可能比单元测试更容易编写 关于你的问题: 单元测试是否能有效地减少回归误差? 是的,如果您添加了正确类型的测试。每当我在代码中遇到bug时,我都会编写一个单元测试,利用该bug导致测试失败。修复错误后,测试通过。一旦该测试或测试组在您

在开发社区中,单元测试是必须的,这似乎是一个绝对真理,您应该添加它,不管它花费多少(我知道它不是100%这样)。 让我在这里扮演魔鬼代言人


管理层希望引入单元测试,以期在每个开发周期中最小化回归开发错误 我认为覆盖大量应用程序的集成级或验收级测试是一个很好的开始。它可能比单元测试更容易编写

关于你的问题:

单元测试是否能有效地减少回归误差?

是的,如果您添加了正确类型的测试。每当我在代码中遇到bug时,我都会编写一个单元测试,利用该bug导致测试失败。修复错误后,测试通过。一旦该测试或测试组在您的测试套件中,您就不应该重新引入错误,因为这会导致测试失败

但是,这需要1)编写利用该缺陷的测试,2)定期运行测试以检测回归。3)只有通过所有测试的软件才能发布

你能在不重写应用程序的情况下编写单元测试吗?

这是可能的,但可能性不大。一个已经在生产中没有任何测试的应用程序可能在设计时没有考虑到可测试性。因此,很可能必须对代码进行重构,可能是为了正确地测试代码

你能保证重构代码不会产生昂贵的新bug吗?(我知道这不是一个有效的问题)

不,你不能保证。特别是如果您需要在获得良好的测试覆盖率之前对代码进行实质性的重构,以充当安全网。然而,这种情况应该很少发生,尤其是如果您已经编写了集成测试的话

您如何向业务部门解释您破坏了应用程序重构?

在进行大型软件重构之前,我希望您与利益相关者一起制定出重构计划。在项目获得批准之前,他们应该在短期内充分意识到风险和潜在停机时间,以便在长期内提高可靠性和加快开发速度

代码历史记录如何?有时候,对于审计来说,了解为什么引入了一些代码,而重构失去了这个价值是非常重要的,如果幸运的话,您将发现它只能在源代码管理中导航很长时间。

好的,正如你所说的,你有源代码控制来显示历史作为最后手段。但是,如果问题如此重要,您可能还应该为其编写测试,就像我前面描述的bug一样。这样,如果重构重新引入该问题,您将获得失败的测试

重构遗留应用程序以编写单元测试(然后编写那些单元测试)是一项重大任务,不应轻率完成

我曾经在我的公司完全重构/重新设计了一个遗留的任务关键型400k+LOC应用程序。这花了很多年的时间,几乎100%的努力。当我“完成”并涵盖了最关键的20%代码,架构重新设计到可理解和可维护的水平时,行业格局已经改变,应用程序不再重要。幸运的是,在整个项目过程中,我发布了大约100个版本,因此在项目终止之前,用户可以利用改进的稳定性和新功能


我想我的意思是,在你开始这条路之前,确保你的努力是值得的。

嗨,非常感谢你的回答。很高兴收到经历过这一切的人的来信。在单元测试道路上,我肯定有一些外卖:)