软件可靠性工程Software Reliability Engineering
软件危机到软件工程
IT产业的迅速发展,软件的作用与地位\r\n软件故障的影响,软件可靠性与硬件可靠性\r\n2000年问题(100亿元)\r\n“阿里安-5”首发失败,损失67亿美元\r\n美国F-18飞控系统,首飞前试验2万小时,\r\n 故障总数 硬件故障数 软件失效数\r\n 580 271 (48.4%) 309 (51.6%)\r\n我国某军舰计算机系统,运行850小时\r\n 故障总数 硬件故障 软件失效\r\n 120多次 约30% 约70%\r\n 致命12次 约30% 约70%
软件工程与软件可靠性工程
软件工程、软件可靠性工程的概念\r\n软件工程:开发、运行、维护和修复软件的系统方法(IEEE83)\r\n软件可靠性工程:软件可靠性设计分析、测试与管理系统方法\r\n软件工程与软件可靠性工程关系\r\n软件工程的目标:质量、进度与费用\r\n质量特性:功能性、可靠性、易使用性、效率、维护性、可移植性\r\n软件可靠性工程的目标:软件可靠性\r\n软件可靠性工程是软件工程的一个子工程\r\n软件工程化、规范化是保证与提高软件可靠性的最有效途径
软件可靠性的基本概念
几个基本概念\r\n软件缺陷(Defect)\r\n故障(Fault)\r\n失效(Failure) \r\n可靠性(Reliability)\r\n千/百行错误数\r\n臭虫(Bug\r\n缺陷、故障、失效的关系\r\n缺陷—→故障—→ 失效\r\n静态、动态概念
软件可靠性的基本特征
软件可靠性特征\r\n缺陷的固有性\r\n缺陷的静态性\r\n缺陷对输入环境的敏感性\r\n故障的传播性\r\n故障率分布
软件可靠性与硬件可靠性
相似处\r\n可以同样的方式加以定义,结合起来就形成系统的可靠性\r\n软件可借鉴硬件可靠性的理论和技术\r\n都有MTBF,失效率等可靠性参数\r\n都与使用环境有关\r\n都是复杂性的函数\r\n都可以通过试验或测试实现可靠性增长\r\n区别点\r\n软件的缺陷是逻辑问题,没有耗损、老化问题(?!)\r\n简单的冗余设计对软件无用\r\n几乎没有软件标准件\r\n对相同的输入软件的表现(输出)是确定的
提高软件可靠性的主要方法
贯彻软件工程要求\r\n软件工程是保证软件可靠性的基础:技术与管理\r\n加强软件可靠性管理\r\n美对其军用软件的调查结论是:软件是一个管理问题,而不是技术问题!\r\n进行软件可靠性设计\r\n目的、方法\r\n加强软件可靠性测试\r\n软件测试:为发现程序的错误而执行程序的过程\r\n软件可靠性测试:为验证或达到软件的可靠性要求所进行的测试。
软件可靠性设计分析
传统的可靠性设计分析方法\r\n可靠性建模、预计、分配\r\nFMEA、FTA\r\n划分并确定关键软件与重要软件\r\n 软件的级别 重要性\r\n 一级软件 不影响安全和任务完成\r\n 二级软件(重要软件) 不影响安全但影响任务完成\r\n 三级软件(关键软件) 影响装备和人员的安全\r\n制定并贯彻软件可靠性设计准则\r\n容错设计\r\n信息容错\r\n时间容错\r\n 结构容错:N版本设计、恢复块设计、表决器。
软件可靠性设计分析
软件工程方法\r\n结构化系统设计\r\n自顶向下设计、模块化\r\n模块独立性:高内聚、松偶合\r\n模块扇入/扇出数控制:\r\n高层模块有较高的扇出、低层有较高的扇入;\r\n程序结构\r\n模块规模:平均60行,最长200行\r\n逻辑用5种简单规范的基本逻辑模块实现:\r\n尽可能不用GOTO 语句或禁止用\r\n复杂度控制\r\n模块长度\r\nMcCabe度量(又称为环路复杂性)控制