软件质量1/50高级软件工程第七讲软件质量软件质量2/50高级软件工程内容一、软件面临的问题二、问题分析三、从质量到可信四、可信软件基本方案五、质量度量软件质量3/50高级软件工程一、软件面临的问题从与软件相关的一些重大事故谈起软件质量4/50高级软件工程黑客入侵深圳福彩篡改数据欲骗3305万巨奖事件:2009年6月9日,双色球2009066期开奖,全国共中出一等奖9注,其中深圳有5注。深圳市福彩中心在开奖(程序)结束后发现系统出现异常。经多次数据检验,工作人员判断,福彩中心销售系统疑被非法入侵,中奖彩票数据记录被人为篡改,5注一等奖中奖数据系伪造。6月10日凌晨2时,福彩中心工作人员报案结果:经调查,这是一起企图利用计算机网络信息系统技术诈骗彩票奖金的案件,所涉金额高达3305万元原因:深圳市某信息技术公司软件开发工程师程某,利用在深圳福彩中心实施其它技术合作项目的机会,通过木马攻击程序,恶意篡改彩票数据,以达到伪造双色球一等奖中奖事实软件质量5/50高级软件工程2007年10月30日,奥运门票第二阶段阶段预售首日……科技奥运?软件质量6/50高级软件工程2007年8月14日14时,美国洛杉矶国际机场电脑发生故障,60个航班的2万旅客无法入关。直至次日凌晨3时50分,所有滞留旅客才全部入关。原因分析:包含旅客姓名和犯罪记录的部分数据系统(海关和边境保护系统:决定旅客是否可以进入美国领土)瘫痪2004年9月发生过类似问题软件质量7/50高级软件工程2006年3月2日14点10分,沪深大盘忽然发生罕见大跳水,7分钟之内上证指数跌去近20点。原因分析:当日下午刚上市的招商银行认股权证成交量巨大,导致其行情显示时总成交量字段溢出,使其价格在股票分析软件上成为一条不再波动的直线,让市场产生了恐慌。软件质量8/50高级软件工程2005年4月20日上午10时56分,中国银联系统通信网络和主机出现故障,造成辖内跨行交易全部中断。这是2002年中国银联成立以来,首次全国性因系统故障造成的跨行交易全面瘫痪。原因:银联新近准备上线的某外围设备的隐性缺陷诱发了跨行交易系统主机的缺陷,使主机发生故障软件能否提供支持?软件质量9/50高级软件工程2003年8月14日下午4时10分,美国及加拿大部分地区发生历史上最大的停电事故。15日晚逐步恢复后果:经济损失250亿到300亿之间原因分析俄亥俄州的第一能源(FirstEnergy)公司x下属的电力监测与控制管理系统软件XA/21出现错误,系统中重要的预警部分出现严重故障,负责预警服务的主服务器与备份服务器连接失控,错误没有得到及时通报和处理,最终多个重要设备出现故障,导致大规模停电2003年国际十大软件质量10/50高级软件工程1996年6月4日,欧洲空间局的阿丽亚娜火箭,发射后37秒爆炸。损失6亿美元原因分析:ADA语言编写的一段程序,将一个64位浮点整数转换为16位有符号整数时,产生溢出,导致系统惯性参考系统完全崩溃软件质量11/50高级软件工程1994年12月3日,美国弗吉尼亚州Lynchburg大学的T.R.Nicely博士使用装有Pentium芯片的计算机时发现错误:(4195835/3145727)*3145727-4195835==0?后果:Intel花费4亿多美元更换缺陷芯片原因:Pentium刻录了一个软件缺陷(浮点除法)软件质量12/50高级软件工程2002年6月28日美国商务部的国家标准技术研究所(NIST)发布报告:“据推测,(美国)由于软件缺陷而引起的损失额每年高达595亿美元。这一数字相当于美国国内生产总值的0.6%”。软件质量13/50高级软件工程二、问题分析从质量谈起1、什么是质量?2、什么是软件质量?3、为什么软件质量保障困难?软件质量14/50高级软件工程1、什么是“质量”–“好坏程度”–ISO9000(2000版)质量是(产品)的一组固有特性满足要求的程度软件质量15/50高级软件工程特性:可区分的特征物理特征:机械运动、温度、电流等化学特征:成分组合、合成、分解等固有特性:某事物中本来就有的、持久的特征直径、硬度、高度、频率赋予特性:对事物增加的特性价格、位置二者有一定的相对性软件质量16/50高级软件工程要求:显式要求:有明确规定的要求(行业标准或用户指定)计算机屏幕尺寸隐式要求:约定成俗的要求大楼要有楼梯产品质量特性:内部特性、外部特性满足的程度!满足的成本!软件质量17/50高级软件工程2、什么是软件质量?软件质量是:软件产品满足规定的和隐含的与需求能力有关的全部特征和特性软件质量18/50高级软件工程来源于BarryBoehm的软件质量模型形成了ISO-9126的软件质量模型框架影响了软件生存周期中的不同阶段……区分不同的软件!软件质量19/50高级软件工程BarryBoehm的软件质量模型阐述性互用性数据公开性正确性可靠性效率完整性可用性可维护性可测试性灵活性可移植性重复性连贯性容错性执行效率/储存效率存取控制/存取检查可训练沟通良好简单性易操作的工具自我操作性扩展性一般性模块性软件系统独立性机器独立性通讯公开性正确性可操作性软件质量20/50高级软件工程ISO-9126的软件质量模型框架外部测量内部质量属性外部质量属性使用质量属性过程质量过程过程测量内部测量使用质量的测量软件产品软件产品的效用使用条件影响影响影响依赖依赖依赖过程质量有助于提高产品质量产品质量有助于提高使用质量软件质量21/50高级软件工程用户质量要求使用质量内部质量需求内部质量外部质量需求外部质量使用和反馈确认验证有助于确定指示指示有助于确定软件生存周期中的质量软件质量22/50高级软件工程外部和内部质量功能性可靠性易用性效率维护性可移植性适合性准确性互操作性保密安全性功能性的依从性成熟性容错性易恢复性可靠性的依从性易理解性易学性易操作性吸引性易用性的依从性时间特性资源利用性效率的依从性易分析性易改变性稳定性易测试性维护性的依从性适应性易安装性共存性易替换性可移植性的依从性***的依从性:软件产品遵循与***相关的标准、约定或法规以及类似规定的能力软件质量23/50高级软件工程使用质量有效性生产率安全性满意度软件质量24/50高级软件工程3、为什么软件质量保障困难?(1)软件产品与需求符合的程度(2)软件的本质(3)软件度量困难软件质量25/50高级软件工程(1)软件产品与需求符合的程度需求与成本之间的矛盾需求是永无止境的成本是永远有限的微软:质量只要好到能使大量的产品卖给客户NASA:可靠性要达到99.999%Motorola:6Σ软件产品属性完全满足用户需求是不现实的软件质量26/50高级软件工程(2)软件的本质–规模、复杂性、演化性–网络环境–软件研发过程缺乏基础理论支撑–软件产品的验证缺乏基础理论支持软件质量27/50高级软件工程(3)软件度量困难“Youcan'tcontrolwhatyoudon'tmeasure”TomDeMarco,1982对比物理属性:尺子、秤、时钟、温度计、测速仪它们的发展过程!代码、过程、组织度量无处不在!软件质量28/50高级软件工程三、从质量到可信1、什么是可信?2、什么样的软件是可信的?Compaq、HP、IBM、Intel和Microsoft等发起(1999):TrustedComputingPlatformAlliance后来增加软件:TrustedComputingGroup(2003)微软倡导(2002):TrustworthyComputing软件质量29/50高级软件工程1、什么是可信?–Trusted–Trustworthy–Dependability–Confidence–Assurance一个实体在实现给定目标时,其行为与结果总是可以预期的软件质量30/50高级软件工程可信软件软件是可信的,如果:其服务总是与用户的预期相符(质量?)即使在运行过程中出现一些特殊情况软件质量31/50高级软件工程1、硬件环境(计算机、网络)发生故障2、低层软件(操作系统、数据库)出现错误3、其它软件(病毒软件、流氓软件)对其产生影响4、出现有意(攻击)、无意(误操作)的错误操作什么特殊情况?软件质量32/50高级软件工程2、什么样的软件是可信的?可用功能:正确、不少、不多可靠性(容错):高安全性(机密性、完整性):高响应时间(从输入到输出):小维护费用(监测、演化):小……软件质量33/50高级软件工程质量与可信(1)可信更多关主体与客体的关系–是系统“承诺”与实际表现的符合程度。存在这样一种情形,质量不是很高,但有具体的说明,仍然有高的可信性。–同一个系统的质量是确定的,但对不同主体的可信度可能不一样:一个受侵害的系统,对于实际用户是不可信的,对于黑客是可信的–对于同一个系统,当用户对其信息掌握得有限时,可信度低,掌握了较多的正面信息时,可信度提升软件质量34/50高级软件工程质量与可信(2)质量主要是针对客体自身而言的质量与可信之间的关系类似于软件与服务之间的关系服务、可信更多地关注主体:最终用户软件、质量更多地关注客体:软件自身软件质量35/50高级软件工程四、可信软件基本方案1、保障软件可信性的几个关键点2、保障软件可信性的几个基础性问题3、“可信”对软件生命周期的影响软件质量36/50高级软件工程1、保障软件可信性的几个关键点如何“正向”得到缺陷少的软件“制品”如何在不同阶段“反向”发现制品中的“缺陷”如何在不同阶段“度量”可信属性软件质量37/50高级软件工程贯穿软件技术的各个方面:软件语言–语言–编译软件工程:生命周期的各个环节!–需求–设计–编码系统软件(操作系统、数据库、中间件)软件质量38/50高级软件工程2、保障软件可信性的几个基础性问题软件可信性度量与建模可信软件的构造与验证可信软件的演化与控制软件质量39/50高级软件工程(1)软件可信性建模与度量如何认识软件的可信性?如何表述软件的可信性?如何度量软件的可信性?软件质量40/50高级软件工程(2)可信软件的构造与验证如何进行可信性设计?如何消解可信性冲突?如何进行可信性保证?软件质量41/50高级软件工程(3)可信软件的演化与控制如何认识环境的演化和软件自身的演化?如何动态获取可信性和控制可信性变化?如何构建可信的运行支撑环境?软件质量42/50高级软件工程3、“可信”对软件生命周期的影响Product(Artifact)AnalyzingDesigningCodingCompilingDeployingDevelopingProcessMaintaining软件质量43/50高级软件工程(1)可信软件的需求分析面向可信性的软件需求工程方法基于社会的可信模型的方法风险分析和可信性分析技术多维异质非功能需求的冲突消解与完整性表达可信性分析的方法学框架软件质量44/50高级软件工程(2)可信软件的设计构造可信软件系统的系统化科学体系可信软件的建模、构造方法与代码生成技术面向服务的可信软件的建模、构造方法与代码生成可信需求规约在设计中的精化方法基于不可信构件构建可信软件系统的方法和技术可信软件在程序意义上的可信性研究支持演化的可信软件体系结构和设计模式软件质量45/50高级软件工程(3)可信代码编写与编译可信程序设计语言可信程序设计语言的形式语义可信软件的编译技术可信编译器体系结构程序验证在可信编译中的集成可信性动态保证代码的生成和插装与优化软件质量46/50高级软件工程(4)代码可信性的验证模型检验技术定理证明技术约束求解技术静态代码分析技术数据流、控制流分析缺陷模式收集、分析软件质量47/50高级软件工程(5)软件的可信性测试基于模型和规约的测试技术可信性测试技术测试设计测试充分性测试用例生成和优化技术测试执行技术和调试排错技术软件质量48/50高级软件工程(6)软件可信性的监测面向可信性的监测模型监测代码的自动生成动态运行时监测代码注入技术基