2019/12/151软件工程与软件过程重庆大学计算机学院曾一Email:zyjckxx@cqu.edu.cn2019/12/152讨论主题1.软件工程的发展2.软件过程及其作用与意义3.PSP-TSP-CMM4.现代软件行业的人才需求2019/12/1531.软件工程的发展(1)软件工程的观念形成(2)目标的追求(3)思维的转变(4)质量管理的提出(5)软件工程知识体系的诞生2019/12/1541.软件工程的发展60年代计算机系统发展的初期,软件完全配套硬件,软件生产方式仅是“手工个体”60年代中期到70年代中期,“软件作坊”-“软件危机”1968年秋季,NATO第一次提出了“软件工程”(softwareengineering)这个概念-“软件工厂”90年代以后,软件工程才能算真正意义上大规模实际应用(美国互联网的巨大发展)但中国也只是近几年才真正开始软件工程2019/12/155软件在计算机系统中的重要性80%的效能主要由软件实现工程化构建软件需求-设计-建造-检验-交付使用明确软件工程的目标提高软件的质量提高软件的生产率降低软件的成本(1)软件工程的观念形成2019/12/156例如,开发模型的研究瀑布(waterfall)(W.Royce,1970)原型(prototype)(F.Brooks,1975)螺旋(spiral)(B.Boehm,1988)RAD(rapidappilicationdevelopment)(J.Martin,1991)喷泉(fountain)(B.H.Sollers,J.M.Edwards,1990)并行(Concurrent)(M.J.Davis,1994)智能(intelligent)、构件组装模型…(2)目标的追求快速应用开发模型(RAD)2019/12/1512例如,开发方法的研究传统的开发方法SA/SD/SP、HIPO、JACKSON、WARNIERIDEF(IntegratedDEFinitionMethods,16个方法)IDEF0:功能建模,IDEF1:信息建模IDEF1X:数据建模,IDEF3:过程描述获取IDEF4:面向对象设计…面向对象的方法Caod/Yourdon、OMT、Booch、OOSE基于UML的方法等形式化方法(1)目标的追求输出输出输入变换结构化软件模型XX系统变换输入ProblemenvironmentDatastructureTasktobeperformedReadingandwritingProgramstructureExecutionoperationProgramJackson方法步骤XX系统1.31.21.11.1.11.1.21.11.1.1记录销售明细1.1.2更新库存销售明细库存文件销售明细库存文件IPO图H图传统方法分析与设计之间的关系数据词典数据流图实体关系图状态转换图加工控制规规格格说说明明数据对象描述过程设计接口设计体系结构设计数据设计OOA人机交互部分HIC数据管理部分HIC问题域部分PDC任务管理部分HIC属性层结构层类/对象层主题层服务层设计人机交互部分设计问题域部分设计任务管理部分设计数据管理部分OOD4部分OOD4个活动Caod/Yourdon组织机构名字管理者地址车主名字地址电话汽车编号出厂日期颜色型号柴油机座位职员用户名授权开始日期结束日期合法事件时间拖车×柴油机×座位轿车卡车重量标准旅行长度执照编号所属关系证明费用CalculateFeeAcceptFee注册开始时间结束时间费用CalculateFeeAcceptFee隐含服务显式表示服务消息连接OO=Objects+Classes+Inheritance+CommunicationwithMessagesUSERPASSEXITPDMPDMBOMEXITADD“离开字段”事件及脚本:完成合法性检查“鼠标点“时执行脚本:添加数据“鼠标点“时执行脚本:退出该窗口;返回上级窗口对象的属性UML-选课系统用例UML-杂志报社报刊发行系统对象模型UML-时序图OO=Objects+Classes+Inheritance+CommunicationwithMessages类或对象名属性方法一个封装了的类或对象图使用实例类/对象模型对象/行为模型属性、协作消息设计责任设计类及对象设计子系统设计操作、对象/关系模型VDM(VienaaDevelopmentMethod,IBM1973创建)主要贡献者:D.BjΦrner、C.B.Jones等是一种基于形式语义的形式化开发方法,其元语言Meta-Ⅳ是建立于指称语义基础上的规范描述语言。RAISE(RigorousApproachtoIndustrialSoftwareEngineering)的形式化方法的几个主要阶段:形式化分析:根据用户需求得到最初的规格说明,用RSL(RAISESpecificationLanguage)描述。形式化设计:从最初的规格说明逐步演变到最终的规格说明,但与最初的规格说明保持一致。翻译:将最终的规格说明转换为计算机上可执行的程序。RAISE中可翻译为Ada/C++程序。2019/12/1524例如,工具与环境的研究开发用于应用开发的语言工具:FORTRAN、PASCAL、ALGOL、COBOL、C、C++、JAVA、VB、VC++、DELPHI、POWERBUILDER、JBUILDER、Winsql、Develop2000等;描述工具:FC、NS、PAD、PDL、ER/EER、HIPO、DFD、系统流程图、程序图、IDEF、PETRI、UML(USECASE、对象/类图、状态图、时序图、交互图、活动图、组件图、配置图)等;(2)目标的追求2019/12/1525(2)目标的追求例如,工具与环境的研究开发分析/设计工具:PSL/PSA(问题描述语言与分析器)RSL/REVS(需求描述语言与需求工程有效性系统)BP-Win、ER-Win、S-Designor、PowerDesigner等AIDES(自动交互式设计与评价系统)SDL/PAD(软件设计语言与问题分析图)Unix中的YACC(YetAnotherCompilerCompiler)等;2019/12/1529(2)目标的追求例如,工具与环境的研究开发测试工具:FACES(FORTRAN自动代码评价系统)SADAT(静态与动态分析和测试)TRW的AUTORETESTISA(InternationalSoftwareAutomation)公司的PARANORMA嵌入式软件测试工具LOGISCOPE黑盒测试工具QACenter等2019/12/1530(2)目标的追求例如,工具与环境的研究开发项目管理工具:Symantec公司的TIMELINEMicrosoft公司的ProjectManagerPrimavera公司的P3SoftstarSystems公司的Costar等2019/12/1531(2)目标的追求例如,工具与环境的研究开发配置管理工具:源代码控制系统SCCS(SourceCodeControlSystem)版本控制系统RCS(RevisionCodeSystem)可视化源控制系统VSS(VisualSourceSafe,Microsoft)面向过程的CCCHARVEST(Configuration&ChangeControl,CA)基于构件复用的JBCM(北大软件研究所)并发版本系统CVS(ConcurrentVersionsSystem)基于文件访问透明的统一变更管理系统RationalClearCase等2019/12/1532(2)目标的追求例如,工具与环境的研究开发开发环境UNIX环境APSE(AdaProgrammingSupportEnvironment)JB2(青鸟Ⅱ面向对象开发环境)SEWB3(SoftwareEngineeringWorkBench3)OracleDesigner(CASEAPP.Development/RAD)RationalROSE(基于UML的面向对象集成开发环境)CA公司的BPWin+ERWin+CCCHARVEST等等2019/12/1534(3)思维的转变软件质量的重要性软件质量指标体系早期的理解:可靠性、可理解性、可维护性、效率等Boehm的软件度量模型——层次模型McCall质量模型——三层模型ISO/IEC9126-1991——两级质量模型GB/T16260-1996《软件产品评价、质量特性及其使用指南》在此标准中规定了6个质量特性及其相关的21个质量子特性。功能性、可靠性、易用性、效率、可维护性、可移植性2019/12/1535(3)思维的转变例如,McCall质量模型——三层模型(总能力)(1)质量方面:产品操作(运行);产品修改(修改);产品适应(转移)(2)质量特性/要素:可用性、正确性、可靠性、效率、完备性;可维护性、适应性、可测试性;可移植性、可重用性、互操作性(3)质量子特性:可训练性,……,数据公用性等22项2019/12/1536(3)思维的转变提高软件质量的几个方面质量过程和标准配置管理软件质量保证测试软件工程方法度量形式化技术评审2019/12/1537(4)质量管理的提出质量形成于生产全过程W.E.Deming认为:“产品质量涉及到生产的所有环节,只有各个生产层面都不忽视质量,最后才能得到高质量的产品。”必须使影响产品质量的全部因素在生产全过程中始终处于受控状态A.V.Feigenbaum认为:“TQC(TotalQualityControl)在制造及传递某种合乎特定质量标准的产品时,必须配合适当的管理技术及作业程序,这些程序所组成的结构称之为质量体系。”2019/12/1538(4)质量管理的提出应使企业具有持续提供符合要求产品的能力即质量保证的观念(QualityAssurance):建立质量体系就能够对所有影响质量的因素,包括技术因素、管理和人员等诸方面都采取有效方法进行控制,因而具有减少、消除和预防质量缺陷的机制。质量管理必须坚持进行质量改进J.M.Juran:“质量改进是长期的,建议采用专案小组的形式,不断提高标准并及时解决质量改进的问题。质量管理的核心是预防而不是补救A.V.Feigenbaum和P.B.Crosby都主张:提高产品质量的上策是预防而不是检验。预防是主动的,是在质量事故之前的,而检验和补救毕竟是被动的、事后的,因此代价也是昂贵的。2019/12/1539(4)质量管理的提出软件质量管理的发展历程质量检验阶段:对程序的测试与纠错。全面质量管理阶段:把质量管理活动从单纯的“事后检验”向前、后延伸到生产的全过程。质量认证阶段:质量管理必须坚持进行质量改进;应该使企业具有持续提供合格产品的能力(ISO9000和CMM)。2019/12/1540(5)软件工程知识体系的诞生SWE-BOKCMU/SEI-99-TR-004SWEBOKAStoneManVersion(Version0.7)AprojectoftheSoftwareEngineeringCoordinatingCommittee(JointIEEEComputerSociety-ACMcommittee)2000.042019/12/1541SWE-BOKCMU/SEI-99-TR-004SEBodyofKnowledge(BOK)KnowledgeCategories(KC)KnowledgeAreas(KA)•TheComputingFundamental•TheSoftwareProductEngineering•TheSoftwareManagement•TheSoftwareDomainsKnowle