资源预览内容
第1页 / 共74页
第2页 / 共74页
第3页 / 共74页
第4页 / 共74页
第5页 / 共74页
第6页 / 共74页
第7页 / 共74页
第8页 / 共74页
第9页 / 共74页
第10页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
嵌入式系统软件的可靠性设计,5.1 软件的可靠性 5.2 软件工程与管理 5.3 软件的可靠性设计 5.4 软件可维护性及软件可靠性模型,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/ =250,3、利用率软件的平均维修时间为MTTR,软件的利用率为:,例如:某软件的MTBF=250h,平均维修时间MTTR=5h,利用率为0.98软件系统:每维修一次,故障至少减少一次,MTBF会随维修次数增加,而增加硬件系统:硬件的维修不会提高MTBF连续工作的电子系统的利用率:要求达到99.999%,三、软件错误的来源主要由设计错误、疏忽、考虑不周等造成 1、没有认真进行需求调查没有弄清楚用户的要求;没有理解用户的要求;用户提出的要求不完整、有疏漏、有矛盾、有错误用户需求是设计软件的依据、出发点一定要彻底了解用户的要求,逐字逐句推敲实地考察,沟通和讨论设计者在软件开发时,要和用户经常沟通,理解上完全一致,2、方案中有错误 当用户需求充分了解后,进行软件的总体方案设计 总体方案:实现用户需求的软件结构;实现用户需求中涉及的数据结构; 系统软件和用户软件的关系:主程序、子程序、中断处理程序的结构、功能、接口 方案是软件编程的前提,3、采用不合适的编程语言每种编程语言都有一定的针对性嵌入式系统的软件:使用C语言数据库管理软件:使用数据库语言,例如Visual Foxpro网络软件:JAVA,4、编程中的错误编程中出现的错误:语法错、定义错、逻辑错、无法结束的死循环、算法错等有些错误:使用编译、查错、测试能够检查出来有些错误:只在程序某一次执行时发生,很难发现,选择合适的编程语言:达到事半功倍的效果不合适的编程语言:增加开发难度、开发时间、错误,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)编程要注意的问题 使用宏定义表示要经常改变的、在多处出现的常数例如:#define ADC_sample_period 2999 不采用容易混淆的符号: 例如:1和小写的L,0和o,避免含糊不清、过于复杂的程序设计少用复杂的表达式、复杂的程序设计如果没有注释,时间长了,无法读懂, 程序模块要小一些便于程序的编写、查错、测试程序模块:宏定义、函数宏定义:执行速度快,占用更多的ROM函数:执行速度慢,占用ROM少 程序模块要尽可能通用 程序要简单易懂:提高可读性, 详细明确的注释 注释位于每个函数模块的前一行:对一个模块进行说明 注释位于一行的尾部: 对此行程序进行注释 注释的重要性:对程序的查错、测试、维护都非常有意义 例如:,(6)查错错误是难以避免的查错方法:1)人工检查程序2)使用仿真器,单步调试程序,查看结果,(7)测试 1)产生测试数据的方法 模拟输入、输出、外部定时信号、控制信号 在线仿真:使用仿真器,进行测试软件 测试程序:编写专门的测试程序 黑盒测试:又称为功能测试,只考虑输入和输出,不关心程序内部结构和细节白盒测试:又称为结构测试测试程序内部结构和逻辑细节,2)测试数据的选择包括软件所有可能出现的情况测试的规则:制定测试计划: 测试的步骤和先后顺序随机选择测试数据选择特殊数据:最大值、最小值在复杂测试中,使用统计方法测试模块化。 3)测试过程单元模块测试:模块的入口条件、出口条件、结构、功能、性能等测试,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号