我们有七个不同的网站,我们在内部开发。他们是跟踪不同人力资源应用程序的网站,帮助我们的一些人通过安排完成工作。今天,主管软件设计师告诉我开始使用phpUnit为我们现有的代码编写测试用例。我们的主要网站至少有一百万行代码,而其他网站都是其中的分支,可能在数万到数十万行中。
这些代码都不是通过任何明显的设计方法编写的。对我们来说,实际上回顾所有代码并对其应用phpUnit测试是否值得?我觉得如果我们想这样做,我们可能应该从一开始就这样做。另外,如果我们做决定开始进行单元测试,那么我们不应该从这里采用TDD吗?我知道这不是一个优先事项。
tl; dr:我被告知要为现有代码编写推出后测试用例,但我知道现有的代码和未来的代码还没有/不会在考虑TDD原则的情况下创建。这值得么?这可行吗?
答案 0 :(得分:3)
你还在改变代码吗?然后你将受益于编写测试。
更难的问题是:先测试什么?一个可能的答案是:在更改之前测试您要更改的代码。
编写完成后,您无法测试所有代码年。这可能会花费太多的时间和金钱来为您的公司带来的收益。
此外,很难开始使用PHPUnit",这种方法的好处可能在最初的几个月或几年内并不是那么好,因为你还在测试中小代码单元,但无法检查整个系统是否正常工作。您还应该从使用虚拟浏览器的端到端测试开始,该浏览器是"单击"在您的页面上,并期望显示一些文本。搜索关键字将是" Selenium"或者" Behat"。
我知道现有的代码和未来的代码没有/不会在考虑TDD原则的情况下创建
所有开发人员的态度问题将来会发生什么。对于没有测试的现有代码,它们可能永远不会发生。由不情愿的开发人员编写的新代码也将不会被测试。但愿意的开发人员可以发挥作用。
请注意,这不仅仅是领导软件设计师告诉团队开始测试。如果您以前没有做过,并且没有基础设施不断运行这些测试以确保它们仍然有效,那么您必须得到指导并需要适当的专业帮助。设置这一切意味着相当大的努力,如果领先的软件设计师或任何更高的老板准备花时间和金钱,你应该认为自己非常高兴,因为你可以学到一些东西并构建更可靠的软件。
如果没有,由于被动的侵略性拒绝,这种方法可能会失败。
答案 1 :(得分:2)
当您想要重构或重写代码时,自动化测试是一个非常好的主意。如果您对函数或类进行了PHPUnit测试,则可以重写代码,然后使用测试确认代码仍然像以前一样运行。否则,当您重构或重写内容时,最终可能会破坏代码的其他部分。
答案 2 :(得分:1)
您可能无法在当前表单中测试代码。它不仅仅是对一些代码很差的代码进行测试,因为代码可能无法测试。
为了能够编写测试,您可能需要重构代码。根据代码的质量,它可能意味着完全重写它。
我建议只测试代码的新增内容。因此,如果您需要在类或新函数中使用新方法或其他任何方法,则必须对其进行测试。就我个人而言,我更喜欢TDD,但对于那些刚开始测试的人来说,即使在重构代码之前,也不能让他们考虑进行测试。所以你可以坚持以后测试。
为了测试新增内容,您需要对现有代码进行一些重构。例如,如果添加记录信息的方法,则应注入记录器以允许对其进行存根。所以你应该写一些容器。现在它并不意味着在任何地方使用记录器都必须注入它。就在您正在添加或更改某些内容并且必须进行测试的地方。这可能变得非常棘手,需要精通测试的人才能提供帮助。
简而言之,我的建议是: