开发区域

使用MATLAB先进的软件开发

你觉得幸运吗,小混混?

我是Mathworks的一部分咨询团队总部设在英国,专门从事软件架构和测试(安迪发布了一篇文章前)。作为我送达的一些最近训练的一部分,我正在考虑这一图,这一直在内部浮动多年:

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

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

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

  1. 他们不知道如何。
  2. 他们认为这很难。
  3. 他们认为他们没有时间。
  4. 他们尚未被咬伤 - 也许他们的代码并不是足够大的/复杂/业务 - 尚未发生的重大中断。

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

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

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

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

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

因此,我们需要测试:

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

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

测试也可以帮助单个开发人员

以下是五种方式,测试帮助了解实际项目:

  1. 测试允许我这么做有信心地对大型项目进行更改。即使经过很长一段时间的工作,我也不知道代码所做的事情。当然,我可以给出执行摘要,或者我可以告诉你我工作过的特定代码的低级细节,但并非所有内容。这是客户工程师的域名知识。通过运行测试,我可以确定一切仍然有效。
  2. 测试帮助我学习一个新的代码库当我被丢弃到一个项目时。他们向我展示了如何使用代码以及依赖项的方式。
  3. 测试封装知识即使在一个非常小的项目,我已经获得了我作为开发过程的一部分制作的决定。我多次惊讶地惊讶于复杂性如何积聚 - 在编码几小时内,我已经丢失了每条代码的曲目,以及它处理的所有边缘案例。
  4. 测试允许我关注需求而不是实现细节。当实施不明显时,这是特别有用的。我可以遵循识别它需要做的过程,编写(失败)测试以捕获该信息,执行一些实现,然后迭代 - “红色,绿色,重构”。
  5. 它有助于驱动软件架构通过创造小,专注,可测试的组件。如果代码难以测试,那几乎可以肯定是因为我设计错了。

测试现在是标准的练习

在主流软件开发中,写作测试已成为10多年的标准练习。“朋克”走了 - 专业严谨和工艺是必须的。写作测试与编写代码一起携手共进。

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

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

立即开始写作测试

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

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

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

在这里,需要判断呼叫。在你回答问题的第一阶段,比如“这是可能的”,“我如何实际做到这一点”,“结果是值得进一步的投资”。在第二阶段,您开始依靠代码产生的答案,或者也许其他人也希望运行代码。无论哪种方式,您都开始构建一个工具。

一旦有一丝阶段,就开始测试!

"但我没时间做这些"

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

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

——贝克,K.(2003)。测试驱动开发:示例。波士顿:Addison-Wesley

想想开发过程中迟到的那个错误,需要数天才能追踪。如果您有一个自动化测试,它会在出现后立即查明它吗?考虑更糟糕的方案 - 在找到错误时,您已经发布了代码。需要多少时间来解决?我可以保证它不会在周一早上9点发生。星期五晚上5点!

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

最终,你有时间吗?测试?

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

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

最后……

是的,我知道 - 标题是一个错误。实际的报价是“......你必须问自己一个问题:”我觉得幸运吗?“好吧,你,朋克吗?“




与MATLAB®R2021A发布

|
  • 打印
  • 发电子邮件

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그인하거나계정을새로만드십시오。