开发区

高级软件开发与MATLAB

你觉得幸运吗,小混混?

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

好笑,我知道。这一点是显而易见的,这让我思考——如果写测试是个好主意,那么为什么不让更多的人这么做呢?

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

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

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

最后一点,你必须问自己一个问题:我觉得幸运吗?

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

测试自动化给软件交付带来了好运

我认为,在软件行业,人们普遍认为:

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

因此,我们需要测试来:

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

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

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

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

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

测试现在是标准的实践

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

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

无论您的团队或客户是否要求测试,作为软件行业的专业人士,您都应该为他们指明方向!

从今天开始编写测试

无论何时开始一个项目,你都应该开始编写测试。复杂度的增长速度惊人地快,所以从一开始就开始测试。在进行过程中编写测试比稍后再回来尝试要容易得多。

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

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

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

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

“但我没有时间做这些”

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

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

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

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

现在想象另一个世界——你需要发布一个新功能来满足紧迫的最后期限。您集成了代码,但担心它会破坏其他东西。但是你记得你有一个测试套件,它的覆盖范围是你信任的。你管理套房,一切顺利。您可以完全自信地发送代码,确保一切正常并按时回家。

最后,你有时间吗测试?

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

如何测试本身就是一个完整的主题。现在,我将向您介绍一些资源,以帮助您开始:

最后。。。

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




发布与MATLAB®R2021a

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的 数学作品帐户或创建一个新帐户。