开发区域

MATLAB的高级软件开发

你觉得幸运吗,小混混?

我是MathWorks的一员咨询团队在英国专门从事软件架构和测试(Andy’s贴了我的一篇文章之前)。在我最近进行的一些培训中,我一直在思考这个已经在公司内部流传了很多年的图表:

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

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

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

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

对于上述最后一点,你必须问自己一个问题:我感到幸运吗?

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

测试自动化使软件交付失去了运气

我认为在软件行业中这是被广泛接受的:

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

因此,我们需要测试:

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

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

测试也可以帮助开发人员

以下是测试在实际项目中帮助我的5个方面:

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

测试现在是标准做法

在主流软件开发中,编写测试已经成为标准实践10多年了。“朋克”已经走了——专业的严谨和工艺是必需的。编写测试与编写代码是齐头并进的。

有人说过(我忘了是谁了——也许吧Bob大叔,也许是众多好的演讲之一Cpp反对),如果你问90年代末或21世纪初的人他们是否使用版本控制,你会得到一个参差的回答——这并不常见。今天,如果你不使用版本控制,你会被嘲笑!你怎么可能在没有版本控制的情况下开发任何东西?测试正在经历同样的转变。不要成为别人的笑柄!

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

从今天开始编写测试

您应该在启动项目时就开始编写测试。复杂性会以惊人的速度积累起来,所以从一开始就开始测试。您可以随时编写测试,这比稍后再来尝试编写测试要容易得多。

如果做不到,现在就开始!如果您已经有一个没有测试的项目,不要拖延。您可以采用增量或“随动修复”的方法来构建您的测试。编写测试不需要是一个完整的过程。随着时间的推移,您的测试套件和覆盖率将会增加。

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

在这里,需要做出判断。在第一阶段,你需要回答诸如“这是否可能”,“我该如何去做”以及“结果是否值得进一步投入”等问题。在第二阶段,您开始依赖代码生成的答案,或者其他人也想运行您的代码。不管怎样,你已经开始构建一个工具了。

只要有第二阶段的迹象,就开始测试!

"但我没时间做这些"

在许多测试书籍和文章中都提到了这个常见的反对意见。引用Kent Beck举个例子:

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

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

想想在开发过程后期出现的bug,要花几天时间才能找到。如果你有一个自动测试,它一出现就能准确地找到它呢?想象一下更糟糕的场景——当发现bug时,您已经发布了代码。要花多少时间才能修好?我可以保证它不会发生在周一早上9点。试试周五下午5点吧!

现在想象一下另一个世界——你需要在一个紧迫的期限内发布一个新功能。您集成了代码,但担心它会破坏其他东西。但是您要记住,您已经有了一个您信任的具有全面覆盖的测试套件。你管理这间套房,一切顺利。您交付代码时完全相信一切都能正常工作,并按时回家。

最后,你有时间吗测试?

那么如何开始用MATLAB进行测试呢?

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

最后……

是的,我知道,标题是错误的引用。实际的引用是"...你必须问自己一个问题:“我觉得幸运吗?”你呢,混蛋?”




发布与MATLAB®R2021a

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。

Baidu
map