范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Get技能嵌入式软件测试的10条秘诀

  在嵌入式软件开发过程中,花在测试和花在编码的时间比通常在3:1左右(实际上可能更多)。这个比例会随着工程师编程、测试水平的提高而不断下降,但无论如何,软件测试都是嵌入式软件开发中至关重要的部分。
  多年前,一位工程师为了对嵌入式拥有更深层次理解的追求,曾发出这样的疑问:"我怎么才能知道并懂得我的系统到底在干些什么呢?"。同时代的嵌入式开发人员问得最多的问题大都围绕"我怎么才能使程序跑得更快"、"什么编译器最好",这个问题虽然不同寻常,但却异乎成熟。今天就让我们一起了解10条在业界广为流传的嵌入式开发测试秘诀。
  一、懂得使用工具
  嵌入式系统通常对可靠性要求较高,一旦发生安全问题可能就会导致灾难性的后果,即使与安全无关也会带来严重的经济损失,对嵌入式系统及软件有着严格的测试、确认和验证要求。随着越来越多的领域的嵌入式设备开始被软件和微处理器控制,对日益复杂的嵌入式软件进行快速有效的测试显得愈加重要。
  好的修车匠需要好工具,好的程序员应该能够熟练运用各种软件工具。不同的工具有不同的使用范围、功能。合适的工具可以让工程师看到系统在干些什么,它又占用什么资源、到底和外界哪些东西打交道。工程师不应该害怕加入测试工具或测试模块到代码需要的技巧或可能引入新的错误,光靠不断修改、重新编译代码来消除Bug是不够的;也不应该因习惯使用printf之类的简单测试手段而不进行新的学习和探索。下面是一些嵌入式常用的测试工具。
  源码级调试器【Source-levelDebugger】:此类调试器一般提供单步或多步调试、断点设置、内存检测、变量查看等功能,是嵌入式调试最基本的调试方法。
  简单实用的打印显示工具【printf】:printf及类似的打印显示工具估计是最灵活、最简单的调试工具。打印代码执行过程中的各种变量可以让工程师获知代码执行的情况,但printf对正常的代码执行干扰比较大(一般printf会占用CPU较长时间),需要慎重使用,最好设置打印开关来控制打印。
  ICE或JTAG调试器【In- circuitEmulator】:ICE是用来仿真CPU核心的设备,可以在不干扰运算器的正常运行情况下,实时检测CPU内部工作情况,也能像桌面调试软件一样提供复杂的条件断点、先进的实时跟踪、性能分析和端口分析等功能。ICE一般都有一个较为特殊的CPU,被称为外合(bond-out)CPU,是一种被打开了封装且通过特殊的连接可以访问CPU内部信号的CPU,这些信号在CPU被封装时是没法被"看到"的。当和工作站上强大的调试软件联合使用时,ICE就能提供几乎最全面的调试功能。然而ICE同样有着昂贵、不能全速工作的缺点;同样,并不是所有的CPU都可以作为外合CPU的,从另一个角度说,这些外合CPU也不大可能及时被新出的CPU所更换。JTAG(Joint Test Action Group)最初开发目的是监测IC和电路连接,但其扩展了包括调试支持在内的用途。
  ROM监视器【ROMMonitor】:一款驻留在嵌入系统ROM中的小程序,通过串行或网络连接和运行在工作站上的调试软件通信。这是最低端的技术,相对便宜,除了要求一个通信端口和少量的内存空间外,不需要其它任何专门的硬件,提供下载代码、运行控制、断点、单步步进,以及观察、修改寄存器和内存等功能。由于ROM监控器是操作软件的一部分,所以如果想要检查CPU和应用程序的状态,必须先停下应用程序,再次进入ROM监控器。
  Data监视器【DataMonitor】:在不停止CPU运行的情况下不仅可以显示指定变量内容,还可以收集并以图形形式显示各个变量的变化过程。
  OS监视器【Operating System Monitor】:操作系统监视器可以显示诸如任务切换、信号量收发、中断等事件。这些监视器能够呈现事件之间的关系和时间联系,还可以提供对信号量优先级反转、死锁和中断延时等问题的诊断。
  性能分析工具【Profiler】:可以用来测试CPU消耗所在,了解系统瓶颈、CPU的使用率以及需要优化之处。
  内存测试工具【MemoryTeseter】:可以找到内存使用的问题所在,比如内存泄露、内存碎片、内存崩溃等问题。如果发现系统出现不可预知或间歇性的问题,就应该使用内存测试工具进行尝试。
  运行跟踪器【ExecutionTracer】:可以显示CPU执行了哪些函数、谁在调用、参数是什么、何时调用等情况,主要用于测试代码逻辑,可在大量事件中发现异常。
  覆盖工具【CoverageTester】:主要显示CPU具体执行了哪些代码,便于了解代码分支未被执行的区域,有助于提高代码质量并消除无用代码。
  GUI测试工具【GUITester】:大多嵌入式应用都带有某种特定形式的图形用户交互界面,部分系统的性能测试是根据用户输入响应时间来进行的。GUI测试工具可以作为开发环境中运行测试用例的脚本工具,其功能包括对操作的记录和回放、抓取屏幕显示供后续分析比较、设置和管理测试过程(Rational公司的robot和Mercury的Loadrunner工具是之中的杰出代表)。没有GUI的嵌入式设备可通过插装来运行GUI测试脚本,虽然需要更改被测代码,但是节省了功能测试和回归测试的时间。
  嵌入式半实物仿真测试开发环境【ETest】:是专门针对嵌入式系统进行测试开发的工具,系统提供图形化的测试用例开发环境,自动生成测试脚本;测试结果数据可以在线监控,同时生成测试结果信息,并自动生成符合要求的测试报告;ETest为开放性平台,提供C/C++, Python, Lua ,JS等API,图形化监控软件界面可以根据用户需求定制;支持各种国产CPU+国产操作系统的部署方案。工程师可基于ETest为嵌入式设备快速构建测控系统,实现对被测件实时、动态、闭环、非侵入式的自动化测试。
  二、尽早发现内存问题
  内存问题存在较大危害且不容易排查,主要有三种类型:内存泄露、内存碎片和内存崩溃。对待内存问题必须要明确早发现、早"治疗"的态度。
  内存泄漏
  内存泄露是软件设计最常见的内存难题,指由于不断分配的内存无法及时地被释放,逐渐耗尽系统内存。即使细心的编程老手也会遭遇内存泄露问题,因其一般隐藏很深,很难通过代码阅读发现,甚至可能出现在库当中——有可能库中本就有bug,也有可能是因为工程师没有正确理解接口说明文档而造成了错用。
  大多数的内存泄露虽然无法探测,但会表现为随机的故障,往往会被认为是硬件问题。如果用户对系统稳定性要求较高,此类问题会导致客户对产品失去信心,项目也会因此失败。考虑到内存泄漏的巨大危害,现在已有众多解决工具,通过查找没有被引用或重复使用的代码块、垃圾内存收集、库跟踪等技术来发现内存泄露,尽管每款工具都有利有弊,但还是应防患于未然,尽量测试内存泄漏。
  内存碎片
  内存碎片比内存泄露有着更深的隐匿性。随着内存不断被分配并释放,大块内存被不断分解为小块内存,从而形成碎片,后续需要申请大块内存时就有可能会失败。系统内存够大或许可能可以坚持较长时间,但最终还是逃不出分配失败的厄运。在使用动态分配的系统中,内存碎片经常发生。
  该问题当前最为有效的方法便是使用工具,通过显示系统内存使用情况来找到内存碎片的罪魁祸首并进行改进。很多公司为避免动态内存管理问题,会选择在嵌入式应用中禁用malloc/free来以绝后患。
  内存崩溃
  内存崩溃是内存使用最为严重的结果,主要造成原因有数组访问越界、指针计算错误、重复释放同一段内存、释放非动态内存等。此类问题发生通常是随机的,极难事先排查,目前也很少有可供排查的工具。
  综上,使用内存管理单元必须要小心谨慎,严格遵守其使用规则。
  三、深入理解代码优化
  人们对嵌入式系统的关注点通常在于实时性和速度,这两个要素直接影响着代码效率,需要对代码进行优化。了解如何优化代码是每个嵌入式软件开发人员必须具备的技能,而优化代码的前提和必要条件则是找到真正需要优化之处,然后再对症下药。
  上文提到的profile能够记录如各任务CPU占用率、优先级分配、数据拷贝次数、磁盘访问次数、是否调用网络收发程序、测试代码是否已经关闭等数据,但在分析实时系统性能方面仍有不足。一方面,profile的使用往往是在系统出现问题,即CPU耗尽之后,而profile本身对CPU占用较大,所以很有可能不起作用。根据Heisenberg效应,任何测试手段或多或少都会改变系统运行。
  四、不要大海捞针
  大海捞针是对调试的生动比喻。寻找bug时应先确实是否在开发时有过为了寻求捷径而没有严格遵守编码设计规范的情况,或是没有检测部分假设条件或算法的正确性、没有将可能存在问题的代码打上记号。可参照《高质量c++/c编程指南》或《关于C的0x8本"经书"》来学习。
  为了尽可能地暴露和捕捉问题根源,可以设计较为全面的错误跟踪代码:尽可能处理每一个函数调用失败,尽可能检测每个参数输入输出的有效性,包括指针及是否过多或过少地调用某个过程。错误跟踪能够了解bug的大概位置。
  五、重视并隔离问题
  对于模块独立的大型项目,如果问题的出现是间歇性的,则有必要设法去重现并进行记录完整过程,以备在下一次出现问题是进行复用。
  确保问题重现后可用隔离的方法来解决问题:用#ifdef把一些可能和问题无关的代码关闭,把系统最小化到仍能够重现问题的地步。如果还是无法定位问题所在,可以考虑打开"工具箱":试着用ICE或数据监视器去查看某个可疑变量的变化;使用跟踪工具获得函数调用的情况(包括参数的传递);检查内存是否崩溃以及堆栈溢出的问题。
  六、以退为进
  猎人为了不使自己在森林里迷路常常会在树木上留下标记,对过去代码修改进行跟踪记录对将来出现问题之后的调试也很有帮助。代码控制系统SCS或代码控制系统SCS可以很好地解决修改回溯问题,将上个版本checkin下来后和当前测试版本比较,可采用SCS/VCS/CVS自带的diff工具或其他功能更强的比较工具,比如BeyondCompare和ExamDiff。通过比较、分析所有改动代码,可以得到所有可能导致问题的可疑代码的分析结果。
  七、确定测试的完整性
  覆盖率测试可供确认CPU到底执行了哪些代码,从而确认测试的完整性。覆盖率工具有不同的测试级别,用户可以根据自己的需要选择某个级别。
  即使单元测试已经很全面且没有deadcode,覆盖率工具还是可以指出一些潜在问题。
  以下方代码为例:
  if(i>=0&& (almostAlwaysZero==0 || (last=i)))
  如果almostAlwaysZero为非0,那么last=i赋值语句就被跳过,无法完成目标。
  此类问题可轻松通过覆盖率工具的条件测试功能完成解决,覆盖率测试工具对提高代码质量是很有帮助的。
  八、提高代码质量意味着节省时间
  有研究表明,超过80%的软件开发时间被用在下面几个方面:调试自己的代码(单元测试)、调试自己和其他相关的代码(模块间测试)、调试整个系统(系统测试),更糟糕的则是可能需要花费10-200倍的时间来找一个最开始时很容易就能发现的bug。
  千里之堤毁于蚁穴,即使bug对整个系统的性能没有太大的影响,但仍然很可能会影响可以被看得到的部分,必须养成良好的编码习惯和测试手段,以求更高的代码质量,缩短代码的调试。
  九、发现它,分析它,解决它
  世界没有万能的膏药,工具再好用也有无法实现之处,对于隐藏很深、用尽所有工具也无法查到其根源的问题,则需要通过问题的外在表现或数据输出来寻找其中规律,从而找出异常。任何异常的发现都应深入理解并回溯其根源。
  十、请利用初学者思维
  "有些事情在初学者的脑子里可能有各种各样的情况,可在专家的头脑里可能就很单一",简单问题想复杂、简单系统设计复杂很可能就是由于"专家思维"。被问题难住时,不妨换个思路,或许就能得到意想不到的启发。
  测试工具推荐
  嵌入式调试无疑是一门艺术,和其它艺术一样,想要取得成功就必须具备智慧、经验并懂得使用工具。嵌入式系统半实物仿真测试集成开发环境ETest,是面向全过程的自动化测试,以向导的方式快速建立测试用例,并根据测试用例自动生成测试脚本,系统根据测试任务自动进行测试,减轻测试工程的工作强度。ETest既可以可视化创建状态机、通信时序、信号处理等多种可执行模型,也可以使用脚本编程实现灵活丰富的动态控制功能,内置百余项API和界面组件,让测控系统开发变得轻松、简单,满足客户敏捷化与个性化需求。提供全方位的执行过程监控,测试过程数据自动记录,并生成符合要求的测试报告。实现高效率、高质量的的软件交付。
  本文参考文件:网络

只剩下一些精神紧张的沙哑虫鸣依旧呼唤着失去的春色满园冬季的风景多少带点萧瑟的感觉特别是在浓雾里漫步的时候明明记得周围是什么样却始终看不清那种感觉会让人轻微的恐惧不知恐惧的是对未知的不确定感还是对事物失去掌控的紧张感确定和掌控这样的词春晚小品坑反映了仇官心态?大家都知道,今年春晚评价最高的一个小品就是坑。他讽刺了躺平式干部,太接地气了。不管你信不信,反正我是碰到过很多这样的干部。在春晚审核越来越严格的情况下,有这样的漏网之鱼确实不容易,1300万,再见湖人!无奈被四处兜售,不怪詹姆斯,佩林卡自我打脸主场惨败给了快船之后,湖人的战绩来到了22胜26负,西部第12屁股还没坐热,他们又把这个位置还给了开拓者,自己再次回到西部倒数第三的位置。乐观的湖人球迷都认为现在球队距离西部第5的世界杯54个帽子戏法盘点贝利17岁,巴蒂两次,更有大神同届两次能参加世界杯,并收获一粒进球的职业足球运动员万中无一。四年一届的大赛,一场比赛独中三元帽子戏法,难度更大。马拉多纳,梅西,罗纳尔多,齐达内,巴乔很多历届世界杯,大放异彩的大球星都不这些男明星们穿高跟皮鞋,但依旧难掩帅气面容高跟鞋其实最初不是专为女性设计的,最初起源于16世纪初,据传一位意大利鞋匠为克服雨天走路泥泞而发明,但某个下雨天,鞋匠妻子穿上高跟鞋后并未感觉走路难受,反而婀娜多姿,慢慢大多女性才轻熟风的气质美。。要说女人和男人的一个显著区别就是,女人头发比男人长,当然这里指的是在通常的情况下。长发飘逸造就了女人柔情似水的外部特征,也同时给女性的妩媚增添了无穷的变化。据说女同胞们要保持发型,愿你不辜负自己,不辜负岁月点上方听一禅第2094次和你说晚安文一禅主播一禅董卿曾说如果说人生是一次不断选择的旅程,那么当千帆阅尽,最终留下的,就是一片属于自己的独一无二的风景。人生在世,白云苍狗。人生下半程日更第483篇1月25日必须做到不可替代冥想是学习最好提升最好的方法炸弹炸弹炸弹警钟常鸣1)说话出现不耐烦的样子,对于任何人的感觉来讲,这个人不能交了。2)任何不假思索的语言,都是伤害自己的刀子。3)人是按照读书的厚度排我在民勤一中教书的日子常晓军难忘绿萝裙从此怜芳草对我而言,记忆是一种选择,是一种重构,甚至是一种创造。冬天里的一把火刚调入一中的时候,进入校门折向西,有一排平房,和公安局一墙之隔。我的办公室就在这里。这些平房历史很悠久,从里到外2023,是时候清理你的朋友圈了知乎上有这样一个问题人与人交往的最好的状态是怎样的?下面一条高赞的回答这样说坦坦荡荡地说不,不为了拒绝苦苦找借口,真诚乃我最喜欢的相处状态。深以为然。每个人的一生都会遇到形形色色的一场迟到26年的爷青回灌篮高手大电影灌篮高手承载了多少人的青春就无需赘述了。不少漫迷遗憾,为什么TV版没有出最精彩的全国大赛部分?灌篮高手承载了多少人的青春就无需赘述了。不少漫迷遗憾,为什么TV版没有出最精彩的全国大
小屁孩春节游系列(四)我是五菱宏光迷你马卡龙的车主,对于这么一款外形时尚可爱,价格又不贵的新能源车型,有人说他好,也有人说他不好。我想说的是,如果你不是马卡龙的车主,你没有真正开车驾驶体验过这款车的话,四川自贡高新区1月现开门红企业接大订单春节加班生产,产值同比大增40视频加载中封面新闻记者刘恪生往左往左2月3日,在自贡运输机械集团股份有限公司的加工车间内,起重设备正移动着一个皮带机滚筒,周围一名工人在指挥着方向。旁边的流水线上,工人们忙碌着滚筒曝新机OscalS801152小时超长待机或成户外最佳手机头条创作挑战赛OSCAL是一个专注于产品性能设计质量和服务的科技品牌。OSCAL秉承只有勇敢者的理念,致力于让户外爱好者勇敢地享受安全快乐的探索。OSCAL手机设计灵感来自自然,O轮到微软抄腾讯?小程序技术如何帮助巨头构建超级APP!据国外媒体报道,知情人士透露,微软最近考虑开发一款超级应用(superapp),或包括购物即时通讯新闻和网络搜索等服务。微软希望通过一款超级App来为Bing以及现有的微软产品和服深度居民定期存款去年飙涨13。8万亿!银行业四大拐点显现,扩表增速修复至10以上经历了2021年的个位数增长,2022年银行业扩表增速开始修复,总资产与总负债的规模增速终于均双双站到了10以上,回归到了2020年的水平。细究来自央行和银保监会的多维监管数据,三火爆全网的三体真人版能看全集了!!!你敢信?火爆全网的三体真人版自年2022年1月15日由腾讯视频上映以来,异常火爆,小编也一直在追,确实是一部悬疑科幻类非常不错的作品。看过小编上一篇文章的朋友,大概也知道下边小编要说的是什港足总副主席港超球队未来或加入中超,港足将启用新主场根据南华早报的报道,亚足联执委港足总副主席霍启山在谈及足球时表示,未来港足联赛球队很可能加入中国职业联赛,实现两地的足球融合。此外,霍启山透露,港足未来将启用新的主场,容量达到了5古代人才选拔的有力标杆是什么,科举又是如何贯穿古代的?在阅读此文前,诚邀您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。引言当今社会选拔人才最普遍的方式,就是通过高考来筛选。不少人都曾说过,高考是人生中通读资治通鉴592597年杨坚大兴仁寿宫公元592年隋朝大一统隋开皇十二年,首都长安(西安),隋文帝,杨坚,52岁。1杨坚大兴仁寿宫杨坚杨坚推行的开皇新政收获成效,官员上奏官府所藏皆已堆满。于是杨坚下令,河北河东减去三分庖丁解牛庖丁,也就是一个名叫丁的厨师,因为他的技术十分精湛,所以被请到了魏国的宫廷里去做事。魏惠王听说了庖丁的手艺非同凡响,就打算亲自过去看一看。魏惠王过来的时候,庖丁正在解一头牛,只听得夏商周三代英雄夏禹商汤,文武周王圣王演变从盟主到天子我国古代历史以夏商周为三代禹汤文武合称为三王。夏为三代之始禹为三王之首这是因为夏代是我国原始国家肇建之始而禹与夏代的建立又有密切的关系。在黄帝尧舜时代仍然处于部