在嵌入式软件开发过程中,一般来说,花在测试和花在编码的时间比为3:1(实际上可能更多)。这个比例随着你的编程和测试水平的提高而不断下降,但不论怎样,软件测试对一般人来讲很重要。很多年前,一位开发人员为了在对嵌入式有更深层次的理解,向Oracle询问了这样的一个问题:我怎么才能知道并懂得我的系统到底在干些什么呢? Oracle面对这个问题有些吃惊,因为在当时没有人这么问过,而同时代的嵌入式开发人员问的多的大都围绕“我怎么才能使程序跑的更快”、“什么编译器好”等肤浅的问题。所以,面对这个不同寻常却异乎成熟的问题,Oracle感到欣喜并认真回复了他:你的问题很有深度很成熟,因为只有不断地去深入理解才有可能不断地提高水平。并且Oracle为了鼓励这位执着的程序员,把10条关于嵌入式软件开发测试的秘诀告诉了他:

  1.懂得使用工具

  2.尽早发现内存问题

  3.深入理解代码优化

  4.不要让自己大海捞针

  5.重现并隔离问题

  6.以退为进

  7.确定测试的完整性

  8.提高代码质量意味着节省时间

  9.发现它,分析它,解决它

  10.利用初学者的思维

  这十条秘诀在业界广为流传,使很多人受益。本文围绕这十条秘诀展开论述。

  1.懂得使用工具

  通常嵌入式系统对可靠性的要求比较高。嵌入式系统安全性的失效可能会导致灾难性的后果,即使是非安全性系统,由于大批量生产也会导致严重的经济损失。这要求对嵌入式系统,包括嵌入式软件进行严格的测试、确认和验证。随着越来越多的领域使用软件和微处理器控制各种嵌入式设备,对门益复杂的嵌入式软件进行快速有效的测试愈加显得重要。

  象修车需要工具一样,好的程序员应该能够熟练运用各种软件工具。不同的工具,有不同的使用范围,有不同的功能。使用这些工具,你可以看到你的系统在干些什么,它又占用什么资源,它到底和哪些外界的东西打交道。让你郁闷好几天的问题可能通过某个工具能轻松搞定,可惜你是不知道。那么为什么那么多的人总是在折腾个半死之后才想到要用测试工具呢?原因很多,主要有两个。一个是害怕,另一个是惰性。害怕是因为加入测试用具或测试模块到代码需要技巧同时有可能引入新的错误,所以他们总喜欢寄希望于通过不断地修改重编译代码来消除bug,结果却无济于事。懒惰是因为他们习惯了使用printf之类的简单测试手段。下面来介绍一些嵌入式常用的测试工具。

  .源码级调试器[Source-level Debugger]

  这种调试器一般提供单步或多步调试、断点设置、内存检测、变量查看等功能,是嵌入式调试根本有效的调试方法。比如VxWorks TornadoII提供的gdb属于这一种。

  .简单实用的打印显示工具[printf]

  printf或其它类似的打印显示工具估计是灵活简单的调试工具。打印代码执行过程中的各种变量可以让你知道代码执行的情况。但是,printf对正常的代码执行干扰比较大(一般printf占用CPU比较长的时间),需要慎重使用,好设置打印开关来控制打印。

  .ICE或JTAG调试器[In-circuit Emulator]