【文档说明】电子系统可靠性设计嵌入式系统软件的可靠性设计课件.pptx,共(75)页,2.207 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-45326.html
以下为本文档部分文字说明:
电子系统可靠性设计嵌入式系统软件的可靠性设计5.1软件的可靠性一、软件故障1、软件故障的定义:估算公式:硬件系统总的失效率:是构成该硬件系统的各个元器件、电路板、接插件、传输线、焊接点的失效率的总和和
元器件的数量成线性关系软件的失效率:和软件的长度成指数关系指由于软件内部的缺陷、错误,使软件在执行过程中,未能达到规定的功能2、软件故障的特点1)硬件故障的特点:元器件越多,故障率越高2)软件错误和时间的关系:无关硬件元器件的可靠性和时间的关系
:成浴盆曲线软件的错误不会随时间的推移而消失3)软件错误改正后:永不出现硬件的元器件:更换后,还有失效的可能4)软件故障完全来源于设计,与生产、操作无关硬件故障:和设计、生产、操作都有关,其可靠性可以预估相同的软件
:不同水平的设计者去开发,可靠性不一样。软件故障:对设计者有更大的依赖性多数是由算法、逻辑的错误引起5)软件不存在耗损和老化软件故障和外部环境无关软件存储媒质的故障:硬盘、光盘、U盘是硬件故障6)软件故障有更大的隐蔽性通过测试发现隐藏
的错误软件的测试非常困难:由于软件的复杂性、多种不同的条件、多种不同的路径没有执行到有故障的那部分软件:故障不会表现出来7)不同故障出现的概率不一样出现频率高的故障:占软件故障的绝大部分出现频率低的故障:占软件故障的很小一部分8)软件故障的随机性软件开发的每一步如果有错,都会使最终
的软件出现故障故障出现是随机的,无法预测硬件系统的故障:可以预先知道故障可能性的大小例如:电源是故障多发点9)软件故障的可传播性软件运行到有错误的地方:产生错误的数据、状态这些错误的数据、状态会引起软件的其它部分产生错误的状态、数据二、软件
可靠性指标1、可靠度定义:在规定条件下、在规定的时间内,软件无故障运行的概率例如:某软件在10h内运行了100次,96次运行正常,则该软件10h的可靠度为0.96表示符号:R(t)2、平均故障间隔时间MTBF故障
率:λ;平均故障间隔时间:MTBF=1/λ上个例子:故障率λ=0.004平均故障间隔时间MTBF=1/λ=2503、利用率软件的平均维修时间为MTTR,软件的利用率为:例如:某软件的MTBF=250h,平均维修时间MTTR=5h,利用率为0.98软件系统:每维修一次,故障至少减少一次,MTBF
会随维修次数增加,而增加硬件系统:硬件的维修不会提高MTBF连续工作的电子系统的利用率:要求达到99.999%三、软件错误的来源主要由设计错误、疏忽、考虑不周等造成1、没有认真进行需求调查没有弄清楚用户的要求;没有理解用户的要求;用户提出的要求不完整、有疏漏、有矛盾、有错误用户需求是设
计软件的依据、出发点一定要彻底了解用户的要求,逐字逐句推敲实地考察,沟通和讨论设计者在软件开发时,要和用户经常沟通,理解上完全一致2、方案中有错误当用户需求充分了解后,进行软件的总体方案设计总体方案:实现用户需求的软件结构;实现用户需求中涉及的数据结构;系统软件和用
户软件的关系:主程序、子程序、中断处理程序的结构、功能、接口方案是软件编程的前提3、采用不合适的编程语言每种编程语言都有一定的针对性嵌入式系统的软件:使用C语言数据库管理软件:使用数据库语言,例如VisualFoxpro网络软件:JAVA4、编程中的错误编程中出现的错误:语法错
、定义错、逻辑错、无法结束的死循环、算法错等有些错误:使用编译、查错、测试能够检查出来有些错误:只在程序某一次执行时发生,很难发现选择合适的编程语言:达到事半功倍的效果不合适的编程语言:增加开发难度、开发时间、错误5、性能错误指设计
的软件性能和用户的需求相差太大,不能满足用户的要求例如:软件的响应时间、执行时间、控制系统的精度等例如:计算机的语音识别,尽管识别率满足要求,但是识别时间不能太长,如果需要几分钟进行识别,无法应用嵌入式系统发生故障时:需要立即做出响应,自动保护和报警如果响应时间过长:
会发生严重的后果6、中断出错电子系统的实时响应事件:使用中断如果有多个中断:必须处理好中断的先后顺序,防止两个或多个中断相互冲突容易产生小概率事件注意中断嵌套中断服务处理程序需要花费时间,会造成误差的积累7、人为因素程序设计人员
的素质:直接影响软件的质量要求程序设计人员:具有丰富基础知识、软件编程能力,能够熟练使用C语言,具有较好的数据结构、程序设计方法的知识能够熟练对软件查错、测试具备良好的工作态度、优秀的工作作风不能粗心大意、不负责任、马马虎虎5.2软件工程与管理软件故障:在很大程度上取决于设计者、依赖于设
计者的思路、方法在软件开发的每一步:都可能引入故障每一个阶段都要采取质量控制手段实现软件的可靠性要求一、软件工程的开发模式二、嵌入式系统的软件开发三、软件可靠性管理一、软件工程的开发模式1、瀑布式开发模型2、原型
法开发模型3、螺旋形开发模式4、面向对象的软件开发模型1、瀑布式开发模型开发思路如同瀑布,开发过程自上而下1)系统的需求分析软件的需求既有对硬件的需求,也有对软件的需求软件要实现的各项功能:如显示、存储、通信、报警等软件的各项性能:如响应时间、执行时
间、算法规范、各个模块的关系建立详细的文档2)设计把需求分析细化描述清楚:软件的体系结构、数据结构、算法描述、接口细节等使用流程图、文字形成文档3)编程按照上面的要求完成规定的功能选择合适的编程语言4)测试:是发现缺陷和错误的极其重要手段
是否达到功能、性能的要求5)维护:软件使用时,由于发现错误、需求改变等,需要进行维护软件维护从流程的第一步:需求分析进行缺点:错误的积累和放大前一步工作的结果,是后一步工作的基础前一步工作的错误、缺陷必然带到后一步工作中并会扩大、深化需求分析的错误会造成严重的影响特别:先期的需求不十分明确开发过
程中:软件的功能、性能是否满足需求是不知道的测试阶段:才知道2、原型法开发模型用户的需求:有时不十分明确可能随着软件开发的深入,而逐渐明确在开发的过程中,用户提出了新的需求根据一些基本的需求:先建立软件系统的原型(简单实现)用户找出存
在的问题:对不满意、没有实现功能的地方进行修正不断完善性能、参数,直到满足用户的要求3、螺旋型开发模式第一步螺旋:计划阶段:确立初始的基本需求,制定目标,确定方案风险分析:可行性工程实现:设计初步的原型,验证、确定需求用户评价:
用户提出改进要求第二步螺旋:比第一步螺旋更深入、具体4、面向对象的软件开发模型面向对象的方法:以客观世界中的对象为中心,分析和设计的思路复合人们的思维方式,结果与客观实际相接近,易被人们接受1)面向对象的概念面向对象=对象+分类+继承+通过
消息的通信对象:一个软件运行的实体,包括对象的属性、行为。一个对象:由对象名、属性、操作组成类:用来定义一组相似的对象,描述一组对象的共同行为和属性。类的实例就是对象继承:是父类和子类之间共享数据、方法的一种机制类
的继承关系父类:A子类:B子类继承父类的属性、操作,还可以定义自己的属性、操作一个父类:可以有多个子类一个子类:可以有多个父类消息:对象之间的通信称为消息消息的传递:一个对象给另外一个对象发送消息2)面向对象的分析和设计面向对象
的分析:确定对象、组织对象、描述对象间的相互关系、定义对象的操作、定义对象的内部消息面向对象的设计:采用具体的方法实现源程序二、嵌入式系统的软件开发1、嵌入式系统软件开发模式2、用户程序的开发过程1、嵌入式系统软件开发模式嵌入式系统:在
系统设计之前,用户需求已经十分明确,系统实现的功能、性能都很明确,使用环境、使用人员明确所以:使用以瀑布式开发模式为主的混合开发模式如果用户的需求有局部的变化:硬件和软件也要做局部修改2、用户程序的开发过程
(1)可行性分析(2)需求调查与分析(3)确定采用的程序设计方法(4)程序设计(5)编程(6)查错(7)测试(8)形成文档(1)可行性分析从技术可行性、操作可行性、经济可行性进行分析得到解决问题的基本思路(2)需求调查与分析熟悉系统的控制任务和要求,详细划分系统各个部分和之间的关系1)最基本的问题
:系统的输入输出输入信号和输出信号的数量外设以哪种方式和CPU通信、数据速率、误差检验、输入输出状态指示、格式要求、时钟、选通脉冲等2)控制要求或处理要求嵌入式系统对实时性要求较高工作顺序要求严格:发送数据的时间、接收数据的时间、时序关系、CPU和外设的同步3)可靠性问题对软
件的可靠性要求和出错处理的要求确定出错处理方案,列出各种错误图像、显示错误的方法用户的需求:全面详细的了解,设计者的理解和用户的解释必须完全一致,形成文档调查嵌入式系统的使用环境组织专家评审需求调查和分析(3)确定采用的程序设计方
法技术关键:采用合理的程序设计结构1)模块程序设计把大程序分成若干个小的程序模块每个程序模块:单独设计、单独编程和调试使用函数的形式,供其它程序调用优点:每个模块的功能简单,编程容易,查错、测试都方便,可以重复使用缺点:调用函数时,需要参数传递,花费更长的运行时间模块级的调试简单:必须保
证每个模块都是正确的主程序的调试复杂2)自上而下的程序设计先从主程序开始设计,子程序使用代号表示主程序编好后,再编写子程序一层一层自上而下,逐步扩展直到每个细节优点:设计、测试、连接同时进行,能够较早发现问题缺
点:其树形结构,上一级错误对整个程序产生灾难性的影响3)结构程序设计使用标准的结构编程,有3种标准结构:线性结构、条件结构、循环结构共同特点:只有一个入口和一个出口操作清楚、编写程序容易容易查找错误缺点:把程序写出标准结构,使程序变长,占用更多的内存,执行时间加长实际的程序设计:综合使用上面的设
计方法总体设计:利用自上而下的设计思想编程:分成多个模块进行每个模块的编程:使用标准结构(4)程序设计1)设计方法画出主程序的流程图认真考虑对实时处理的要求中断的优先级确定,画出中断处理程序流程图,使用文字进行说明每个模块画出流程图、文字说明形成文档2)评审组织专家评审,堵住漏洞(5)
编程1)选择程序设计语言每种编程语言都有针对性对于每种需求,使用某种语言编程是最方便的不合适的编程语言:程序复杂,错误多,可靠性不高嵌入式系统的程序:使用C语言2)编程要注意的问题①使用宏定义表示要经常改变的、在
多处出现的常数例如:#defineADC_sample_period2999②不采用容易混淆的符号:例如:1和小写的L,0和o③避免含糊不清、过于复杂的程序设计少用复杂的表达式、复杂的程序设计如果没有注释,时间长了,无法读懂④程序模块要小一些便于程序的编
写、查错、测试程序模块:宏定义、函数宏定义:执行速度快,占用更多的ROM函数:执行速度慢,占用ROM少⑤程序模块要尽可能通用⑥程序要简单易懂:提高可读性⑦详细明确的注释注释位于每个函数模块的前一行:对一个模块进行说明注释位于一行的尾部:对此行程序进行
注释注释的重要性:对程序的查错、测试、维护都非常有意义例如:(6)查错错误是难以避免的查错方法:1)人工检查程序2)使用仿真器,单步调试程序,查看结果(7)测试1)产生测试数据的方法①模拟输入、输出、外部定时信号、控制信号②
在线仿真:使用仿真器,进行测试软件③测试程序:编写专门的测试程序④黑盒测试:又称为功能测试,只考虑输入和输出,不关心程序内部结构和细节白盒测试:又称为结构测试测试程序内部结构和逻辑细节2)测试数据的选择包括软件所有可能出现的情况测试的规则:①制定
测试计划:测试的步骤和先后顺序②随机选择测试数据③选择特殊数据:最大值、最小值④在复杂测试中,使用统计方法⑤测试模块化。3)测试过程①单元模块测试:模块的入口条件、出口条件、结构、功能、性能等测试②子系统测试:把多个模块连接到一起,构成子系统例如:数据采集子系统
、显示子系统、键盘扫描子系统、控制算法子系统③系统级的测试用户程序的测试这一级测试最困难,问题最多:找到问题后,回到模块级上修改(8)形成文档必须有文档,便于调试、维护、修改、再设计文档包括:1)流程图:要详细2)注释:必须详细说明程序的功能和
作用尽量明确,言简意赅;重点突出,避免繁琐;注释要加日期3)重要变量的说明变量的意义和功能4)程序库:指经常要调用的函数函数要标准化,包括以下内容:函数的目的;所用的处理器;函数的入口参数;函数的出口参数函数的功能;程序清单。5
)程序逻辑手册包括设计的目的、使用的算法、使用的算法的优缺点、使用的数据结构6)用户指南使用实例,指导用户如何使用这个程序7)维护手册:说明系统的维护方法三、软件可靠性管理软件产品的可靠性:是管理出来的1、软件可靠性管理的概念运用反馈控制原理运行一套管理系统,保证软件的可靠性(1)计划制定工作计
划、具体的实施大纲;确定实施计划的时间、人员、设备、资金(2)组织总负责人;每一项计划需要具体负责人(3)监督利用检查、评审、鉴定、报告获得软件开发中的信息形成闭环控制系统2、软件可靠性管理的具体工作(1)制定可靠性管理的计划大纲
确定工作人员、制定计划、规范;提出进度时间表(2)评审1)需求分析评审对软件需求、数据、软件功能、性能、接口、环境评审认真分析可靠性、可维护性、可测试性2)设计评审程序的总体方案、自上而下的设计是否合适各程
序模块、接口是否正确算法、数据结构的合理性、先进性中断、实时处理的合理性可靠性、可维护性、可测试性的方案软件设计文档、说明软件的流程图3)软件实现的评审程序代码和功能、性能是否一致程序格式是否符合规范模块和子系统调试
结果的正确性测试数据和测试方法的正确性和完备性此阶段文档的齐备情况4)系统测试评审对软件做出评价,确认软件的功能、性能是否符合用户的需求测试计划是否合理功能测试是否合理、完备性能测试是否合理、完备实时性、可靠性的测试测试数
据、测试方法是否合理、正确、完备测试结果是否合理测试环境和实际运行环境是否兼容文档是否规范、齐备(3)管理的延续因为:测试时不可能把所有的可能性都测试到软件使用后:注意软件的运行情况收集软件的工作情况和出现的问题定期对系统随访如果出现问题,及时消除用户的需求可能发生变化5.3软件
的可靠性设计软件的可靠性:很大程度上取决于开发人员的素质一、根据软件工程的要求进行软件开发二、采用软件滤波方法三、检错和纠错编码四、软件容错技术五、时间准则六、容错算法的考虑七、其它措施一、根据软件工程的要求进行软件开发嵌入式软件合适的开
发方法:改进的瀑布式开发模型保障软件可靠性的基本条件:严格按照软件的开发要求去做1、认真仔细进行软件设计清楚细节和用户充分沟通,做必要的实验,对工艺流程仔细观察和分析专家评审2、使用合适的程序设计方法分析问题:自上而
下进行;具体实现:使用模块化程序设计;编写程序:使用结构程序设计3、选择合适的程序设计语言不同的语言:编程的难易度、效率、复杂程度、是否易于发现错误是不一样的嵌入式系统:使用C语言编程4、细心编程编程人员要认真、细心编写程序正确使用函数、中断5、仔细测试编译、汇编:查找语
法、语义的错误执行程序:找出逻辑错误。利用断点:显示内部寄存器、显示变量等选择可能出现的测试数据黑盒测试白盒测试6、提高软件设计人员的素质一方面:提高软件设计人员的技术素质另外:提高软件设计人员的思想素质顽强的意志、进取精神工作作风:严格、严肃、严密二、采用软件滤波方
法2)利用先验知识,判断出不可能存在的数据,把其去掉例如:温度采集控制系统,前几次采集到的温度在1500°左右,这次采集的温度是700°,肯定是不对的1、软件去除干扰1)检测变化缓慢的信号:如果只把一次采集的数据作为真实数据,
会因为采集时的偶然干扰,使数据不准确变化缓慢的信号:例如温度、湿度、压力等软件滤波:连续采集多次数据,对采集到的数据进行平均;去掉最大值、最小值,把剩下的值平均;把数据进行排序,取中间值2、采用数字滤波数字滤波器:
FIR有限脉冲响应数字滤波器IIR无限脉冲响应数字滤波器三、检错和纠错编码1、奇偶校验码常用于异步串行通信起始位、数据位、奇偶校验位、停止位低数据位在前,高数据位在后发送端:使用硬件、或软件加上奇偶校验位接收端:使用硬件或软件进行检验,出现错误报警或重发在水平方向
、垂直方向加奇偶校验位2、累加和校验只读ROM的自检:使用软件求累加和同步通信、向外设传送数据:使用软件求数据块的累加和,和数据一起发送接收方:收到数据后,计算累加和,和传送来的累加和比较,判读数据是否正确3、海明码校验RAM写数据:使用硬件计算海明校验码,一起写入RAMR
AM读数据:进行海明码校验,纠正一位错误给U盘、磁盘写数据,通信:计算出海明码,进行存储或传送读数据、通信接收方:进行校验3、循环冗余校验码简称CRC校验码,检错和纠错能力很强常用的同步串行通信格式:循环冗余校验码的生成:把n位数据
M左移k位后,除以k+1位生成多项式,得到的k位余数,就是校验位k位校验码放在n位数据后面,一起进行传输生成多项式:常用的17位多项式:4位多项式:例如:数据M=1101,使用生成多项式:把M左移3位,得到:1101000除以生成多项式:余数:100,就是校验位接收端或读出数据
时:除以生成多项式没有出错:余数为0出错:余数不为0校验码放在数据后面:1101100,得到循环冗余校验码voidCRC16_plc(unsignedcharbufInOut[],unsignedintsizeIn){unsig
nedintcrc=0xffff;unsignedinti,j;unsignedcharbyte1,crcbit,databit;for(i=0;i<sizeIn;i++){byte1=bufInOut[i];for(j=0;j<8;j++){crcbit=crc&0x8000?1:0;dat
abit=byte1&0x80?1:0;crc=crc<<1;if(crcbit!=databit){crc=crc^0x1021;//CCITTCRC-16standard:X^16+X^12+X^5+1=2^16+2^12+2^5+1=0x11021
}byte1=byte1<<1;}例:CRC计算的函数:生成多项式在数组后面添加2个字节的CRC校验位bufInout:存放计算CRC的数据和校验位的数组sizeIn:要计算的数据的字节个数四、软件容错技术软件容错的定义:当出现软件故障时,软
件能够屏蔽故障,使软件从故障状态,恢复到正确状态,或者能够完成预定功能的能力1、多版本程序设计技术组成:n个功能完全相同的不同程序模块、1个表决器n个程序模块进行计算把n个结果送到表决器判断大数判决:多数的结果是正确的每个程序模块:采用不同的算法和语言2、恢复块技术
工作过程:运行一个程序块,判断运行结果。如果结果不正确,启动备用快运行。然后测试。直到第n个程序块的运行结果都不正确,报警关键问题:在于运行结果的测试。恢复块技术和多版本程序设计的区别:恢复块技术:只对复杂、容易出故障的程序模块冗余多版本程序设计:对所有的程序模块冗余类似于超时故障检测的程序分段
把软件分成独立的程序块,每个程序块都有多个备用块五、时间准则很多外设在工作过程中需要花费时间例如:AD转换器的查询方式如果在AD转换过程中出现故障,AD转换器总是忙,就不会转换结束,造成死循环。不会对使用者有任何提示怎么办?AD每转换一次需要的时间:其数据
手册都有说明例如:ADC0809转换一次需要100μs解决方法:设置可编程定时器,定时的时间大于AD转换需要的时间AD转换时:先启动定时器如果AD工作正常:AD转换结束时,定时器的定时时间未到,关闭定时器
如果AD不正常:AD转换永远不会结束过了定时器的定时时间,就会产生定时器的中断,在定时器的中断服务程序中:报警,提示维修软件模块:每个模块的运行时间可以估算或测量的,使用定时器,发现模块执行时是否程序跑飞六、容错算法的考虑2、子程序设计必须标准化:输入参数、输出参数、出错处理、执行设计
等加时间准则的判断,及时发现跑飞1、数值计算整数运算:比浮点运算的精度低,必须考虑整数运算的顺序:例如:17/10*3=?17先除10,后乘3,等于317先乘以3,后除以10,结果为5后面的计算更精确3、程序回卷指利用措施判断程序的执行是否成功,如果没有成功就多次重复执行程序例如
:控制继电器时,要判断继电器是否吸和当发出继电器吸和命令后,等待一段时间,判断继电器是否吸和,如果没有吸和:再发出一次继电器吸和命令,等待一段时间后,判断继电器是否吸和如果连续3次:继电器都没有吸和,显示错误,报警七、其它措施1、软件不可能没有错误必须查错、测试、校验查找
错误软件编好后:长时间运行,记录发现的错误,查找原因,进行改正注意:无规律、偶尔发生的故障仔细分析、鉴别,判断是偶然的干扰,还是程序本身有错误2、降低CPU的频率,增加硬件、软件的可靠性5.4软件可维护性及软件可靠性模型一、软件的可维护性设计1、软件的可维护性(1)概念软件维护的内容:包括改正性
维护:发现软件错误,改正错误适应性维护、提高性维护:指系统发生变化,或用户提出新需求时,做的工作软件的可维护性:指对软件维护的难易程度影响软件可维护性的因素:可理解性、可修改性、可测试性可理解性:包括简洁性、一致性
、明了性、结构性等(2)提高软件可维护性的措施1)统一编程语言:C语言2)严格开发、严格管理严格按照开发步骤、需求任务书要全面、详细、完备3)简化结构结构尽量简单、长度尽可能短小4)限制子程序的嵌套深度:参数传递要明确5)采用标准结构编程
:一个入口、一个出口6)硬件和软件设计都要留有余量:30%余量RAM、FLASH、输入输出通道、程序模块的执行时间、中断响应时间、中断处理时间等7)源程序要有详尽的注解注解对后期的维护很重要每个函数的说明:函数名称、版
本号、时间、设计者姓名、输入和输出参数、执行时间、出错标志等程序语句的说明:要详细8)要做好详尽、完整的文档每个阶段都要建立文档对于以后的维护很重要2、软件维护工作1)改正性维护工作流程图:错误包括:编程中的逻辑错误
,功能和性能的错误发现错误,得到错误报告,观察错误的表现,找出错误的原因改正错误后,要修改原来的文档:程序流程图、程序清单、软件使用手册、软件维护手册2)改造性维护指适应性维护和提高性维护工作流程图:随着系统的使用:用户在功能、性能上提出
了新的要求必须对软件进行维护需求分析:认真,分析新需求和原来的功能之间的关系增加新的软件模块;对原来的模块修改建立详细的文档第5章嵌入式系统软件的可靠性设计内容总结1.软件的可靠性软件故障的定义、软件故障的特点、软件可靠性指标、软件错误的
来源2.软件工程与管理软件工程的开发模式、嵌入式系统的软件开发、软件可靠性管理3.软件的可靠性设计认真开发、软件滤波、检错纠错编码、多版本程序设计、恢复快技术、时间准则、容错算法4、软件可维护性及软件可靠性模型软件维护的定义、改正性维护、改造性维护第5章结束