开发区

高级软件开发与MATLAB

你觉得幸运吗,小混混?

我是MathWorks的一员咨询团队总部位于英国,专门从事软件架构和测试(Andy's发了一篇我写的文章之前)。作为我最近培训的一部分,我在思考这个已经在公司内部流传了很多年的图表:

搞笑,我知道。所提出的观点很明显,这让我思考——如果编写测试是一个很明显的好主意,为什么没有更多的人去做呢?

你需要一个测试,为什么不自己写一个呢?

关于人们为什么不编写测试,我提出了一些可能的原因:

  1. 他们不知道怎么做。
  2. 他们认为这很难。
  3. 他们认为自己没有时间。
  4. 他们还没有被咬到——也许他们的代码还不够大/复杂/关键业务,还没有发生重大中断。

对于最后一点,你应该问自己一个问题:我是幸运的吗?

想想我参与过的一些客户项目,人们依赖于开发的应用程序。如果他们停止工作,他们不会把生命置于危险之中,但10-100人可能无法工作。这需要花费时间和金钱,并且可能会损害应用开发团队的声誉。

测试自动化从软件交付中带走了运气

我认为软件行业普遍接受的是:

  • 软件变得越来越复杂。
  • 我们对它的依赖越来越大。
  • 开发团队越来越大。
  • 更新/交付需要更频繁。

因此,我们需要测试来:

  • 验证复杂的行为。
  • 确保鲁棒性。
  • 检查集成时整个团队的代码是否协同工作。

通过通过自动化快速有效地运行这些测试,我们可以满怀信心地实现那些频繁的交付。

测试也有助于单个开发人员

以下是测试在实际项目中帮助我的五种方法:

  1. 测试允许我这么做有信心地对大型项目进行更改.我不知道这些代码到底是做什么的,即使是在做了很长时间之后。当然,我可以给出一个执行摘要,或者我可以告诉您我所编写的特定代码的底层细节,但不能告诉您中间的所有内容。这是客户工程师的领域知识。通过运行测试,我可以确定一切仍然正常。
  2. 测试帮助我学习新的代码库当我被丢进一个项目的时候。它们向我展示了代码是如何使用的以及依赖关系是什么。
  3. 测试封装的知识即使是在一个非常小的项目中,我也在开发过程中获得了一些设计决策。我不断惊讶于复杂性的快速累积——在几个小时的编码过程中,我已经忘记了每段代码的作用以及它所处理的所有边缘情况。
  4. 测试让我关注需求而不是实现细节。当实现不明显时,这尤其有用。我可以遵循这样的过程:确定它需要做什么,编写一个(失败的)测试来捕获该信息,做一些实现,然后迭代——”红、绿、重构”.
  5. 它可以帮助驱动软件体系结构通过创造小的,集中的,可测试的组件。如果代码难以测试,那几乎可以肯定是因为我设计错了。

测试现在是标准的实践

在主流软件开发中,编写测试已经成为标准实践10多年了。“朋克”们已经变得专业严谨工艺是必需的。编写测试与编写代码是密切相关的。

有人说过(我忘了是谁了——也许吧鲍勃叔叔,也许是众多精彩的演讲之一Cpp反对),如果你在90年代末或21世纪初问人们是否使用版本控制,你会得到不完整的回答——这不是一个普遍的地方。今天,如果你不使用版本控制,你会被嘲笑的!没有版本控制你怎么可能开发任何东西?测试也在经历同样的转变。不要成为笑柄!

无论您的团队或客户是否需要测试,作为软件行业的专业人员,您都应该向他们展示方法!

从今天开始编写测试

无论何时开始一个项目,您都应该开始编写测试。复杂性惊人地快速建立,所以从一开始就开始测试。在你去的时候编写测试要比以后再回来试着做要容易得多。

否则,现在就开始吧!如果您已经有一个没有测试的项目,请不要推迟。您可以采用增量或“随用随修”的方法来构建您的测试。编写测试不需要是一项单一的任务。随着时间的推移,您的测试套件和覆盖率将增加。

与此相关的一个常见问题是,如何管理从原型算法和工作流到更正式的测试实现的转换。反对意见是:“当代码如此多变时,编写所有这些测试有什么意义?”

在这里,需要作出判断。在第一阶段,你需要回答诸如“这是否可行”、“我该如何做”以及“这个结果是否值得进一步投资”等问题。在第二阶段,您开始依赖代码生成的答案,或者可能其他人也想运行您的代码。无论哪种方式,您都开始构建一个工具。

一旦出现第二阶段的提示,就开始测试!

"但我没时间做这些"

许多测试书籍和文章中都包含了这种常见的反对意见肯特贝克举个例子:

“你感受到的压力越大,你做的测试就越少。你做的测试越少,你犯的错误就越多。你犯的错误越多,你感受到的压力就越大。冲洗并重复”。

--贝克,K.(2003)。测试驱动开发:通过示例.波士顿:addison - wesley

考虑到在开发过程中出现的bug,需要花费几天的时间来跟踪。如果你有一个自动测试,一旦它出现就能精确定位它,那会怎么样?想象一个更糟糕的场景——当发现一个bug时,您已经发布了您的代码。修复需要多长时间?我可以保证它不会在周一早上9点发生。试试周五下午5点吧!

现在想象一下另一个世界——您需要发布一个新特性,以满足紧迫的最后期限。您集成了代码,但担心它会破坏其他东西。但是您要记住,您有一个完全信任的测试套件。你管理好套房,一切就都过去了。您满怀信心地交付代码,确保一切正常工作,并准时回家。

最后,你有时间吗测试?

那么,如何开始在MATLAB中进行测试呢?

如何测试本身就是一个完整的主题。现在,我只会给你一些资源来帮助你开始:

最后……

是的,我知道,标题是错误的引用。实际的报价是"...你应该问你自己一个问题:“我是幸运的吗?”好吧,你知道吗,小子?”




发布与MATLAB®R2021a

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。