10大优享服务
62项会员特权

关于嵌入式软件开发测试的重要秘诀

发布时间:2021-12-01 10:04:27     阅读次数:10314次     评论数:0次

    在嵌入式软件开发过程中,通常花在测试和花在编码的时间比约为3:1,并且这个比例随着编程和测试水平的提高而不断下降,但不论怎样,软件测试都很重要。大多数嵌入式软件开发人员关心的问题是“我怎么才能使程序跑的更快?”而很少有人关心“我的系统到底在干些什么?”这个问题看似不成熟却很有深度。接下来一品威客网就为您介绍一下关于嵌入式软件开发测试的重要秘诀。

关于嵌入式软件开发测试的重要秘诀

    1.深入理解代码优化

    知道怎么优化代码是每个嵌入式软件开发人员必须具备的技能。代码优化的前提是找到真正需要优化的地方,然后对症下药,优化相应部分的代码。前面提到的profile(性能分析工具,一些功能齐全IDE都提供这种内置的工具)能够记录各种情况比如各个任务的CPU占用 率、各个任务的优先级是否分配妥当、某个数据被拷贝了多少次、访问磁盘多少次、是否调用了网络收发的程序、测试代码是否已经关闭等等。

    2.不要让自己大海捞针

    如果你确实已经把针掉在海里是,为了防止在找到之前刺到自己,你必须要做一些防范工作,比如戴上安全手套。同样,为了尽能地暴露和捕捉问题根源,我们可以设计比较全面的错误跟踪代码。怎么来做呢?尽可能对每个函数调用失败作出处理,尽可能检测每个参数输入输出的有效性包括指针以及检测是否过多 或过少地调用某个过程。错误跟踪能够让你知道你大概把针掉在哪个位置。

    3.重现并隔离问题

    对于模块独立的大型项目,使用隔离方法往往是对付那些隐藏极深bug的最后方法。如果问题的出现是间歇性的,我们有必要设法去重现它并记录使其重现的整个过程以备在下一次可以利用这些条件 去重现问题。如果你确信可以使用记录的那些条件去重现问题,那么我们就可以着手去隔离问题。怎么隔离呢?我们可以用#ifdef把一些可能和问题无关的代码关闭,把系统最小化到仍能够重现问题的地步。如果还是无法定位问题所在,那么有必要打开“工具箱”了。可以试着用ICE或数据监视器去查看某个可疑变量 的变化;可以使用跟踪工具获得函数调用的情况包括参数的传递;检查内存是否崩溃以及堆栈溢出的问题。  
 
    4.以退为进

    对过去代码的修改进行跟踪记录对将来出现问题之后的调试很有帮助。假如有一天,你最近一次修改的程序跑了很久之后忽然死掉了,那么你这时的第一反映就是我到底改动了些什么呢,因为上次修改之前是好的。那么如何检测这次相对于上次的修改呢?没错,代码控制系统SCS或称版本控制系统VCS (Concurrent Version Control)。将上个版本check in下来后和当前测试版本比较。比较的工 具可以是SCS/VCS/CVS自带的diff工具或其它功能更强的比较工具。通过比较,记录所有改动的代码,分析所有可能导致问题的可疑代码。

    5.懂得使用工具

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

    内存问题危害很大,不容易排查,主要有三种类型:内存泄露、内存碎片和内存崩溃。对于内存问题态度必须要明确,那就是早发现早“治疗”。在软件设计中,内存泄露的“名气”最大,主要由于不断分配的内存无法及时地被释放,久而久之,系统的内存耗尽。即使细心的编程老手有时后也会遭遇内存泄露问题。有测试过内存泄露的朋友估计都有深刻地体验,那就是内存泄露问题一般隐藏很深,很难通过代码阅读来发现。有些内存泄露甚至可能出现在库当中。有可能这本身是库中的bug,也有可能是因为程序员没有正确理解它们的接口说明文档造成错用。
     
    7.确定测试的完整性

    覆盖测试(coverage testing)可以回答这个问题。覆盖测试工具可以告诉你CPU到底执行了那些代码。好的覆盖工具通常可以告诉你大概20%到40%代码没有问题,而其余的可能存在bug。覆盖工具有不同的测试级别,用户可以根据自己的需要选择某个级别。即使你很确信你的单元测试已经很全面并且没有dead code,覆盖工具还是可以为你指出一些潜在的问题。  
  
    8.提高代码质量意味着节省时间

    糟糕的是你可能需要花费10-200倍的时间来找一个bug,而这个bug在开始的时候可能很容易就能找到。一个小bug可能让你付出巨大的 代价,即使这个bug对整个系统的性能没有太大的影响,但很可能会影响让那些你可以看得到的部分。所以我们必须要养成良好的编码和测试手段以求更高的代码 质量,以便缩短调试的代码。
   
    9.发现它,分析它,解决它
 
    profile再强大也有力不从心的时候;内存监视器再好,也有无法发现的时候;覆盖工具再好用,也有不能覆盖的地方。一些隐藏很深的问题即使用尽所有工具也有可能无法查到其根源,这时我们能做的就是通过这些问题所表现出来的外在现象或一些数据输出来发现其中的规律或异常。一旦发现任何异常,一定要深入地理解并回溯其根源,直到解决为止。
 
    10.利用初学者的思维

    有时候,有些简单的问题会被想的很复杂,有些简单的系统别设计的很复杂,就是由于你的“专家思维”。当你被问题难住时,关掉电脑,出去走走,把你的问题和你的朋友说说,或许他们可以给你意想不到的启发。
    
    以上就是关于嵌入式软件开发测试的重要秘诀。嵌入式软件开发调试也是一门艺术,如果你想取得成功,你必须具备智慧、经验并懂得使用工具。一品威客上还提供嵌入式软件开发方法、嵌入式软件开发技术和嵌入式软件开发流程等服务,如果你有嵌入式软件开发的需求,那就直接到一品威客网发布任务,这里会有更专业的人士为您解答。
本文地址:
来源:一品威客,转载须经版权人书面授权并注明来源

留言(0

↓展开留言

该攻略尚无留言记录