softwareEngineeringComputerCenterEastChinaUniversityofScienceandTechnologyEditby胡庆春软件工程技术与应用第3章面向对象方法第4章统一建模语言UML第5章面向对象分析和设计第6章面向对象的测试第7章软件项目管理第1章绪论第2章软件开发概述软件工程技术与应用第1章绪论1.1软件与软件工程1.2软件工程的研究内容1.3软件开发模型软件工程技术与应用第1章绪论由于软件的发展,使计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生很大的变化。对软件的品种、数量、功能和质量等提出了越来越高的要求。软件开发过程、方法、工具和环境的研究,软件工程应运而生。本章介绍软件和软件工程的基本概念,包括软件、软件危机、软件工程学以及软件开发模型等内容。软件工程技术与应用1.1软件与软件工程从20世纪60年代以来,软件也从规模、功能等方面得到了很大的发展,人们对软件质量的要求也越来越高。什么是软件,软件有哪些特征呢?软件工程技术与应用1.1.1软件1.软件的定义有些初学者认为软件就是程序,这个理解是不完全的。美国著名的软件工程专家R.S.Pressman的定义:“软件是能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述程序的操作和使用的文档。”可以简明地表述,“软件=程序+数据+文档”。软件被划分为系统软件、应用软件和介于这两者之间的中间件。软件工程技术与应用2.软件的特征①软件开发不同于硬件设计②软件生产不同于硬件制造③软件维护不同于硬件维修软件工程技术与应用3.软件危机出现软件危机的原因。软件危机,使许多产业界人士认识到必须把软件生产从个人化方式改变为工程化方式,从而导致了软件工程的诞生。软件工程技术与应用1.1.2软件工程1.软件工程的概念软件工程的基本理念是“按工程的概念、原理、技术和方法开发与维护计算机软件”。“软件工程”一词,首先是1968年北大西洋公约组织(NATO)在联邦德国召开的一次会议上提出的。人们从不同的角度,给软件工程下过各种定义。但是不论有多少种说法,它的中心思想,是把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。软件工程技术与应用质量焦点过程方法软件工程三个要素:方法、工具、过程---R.S.Pressman工具软件工程技术与应用2.软件工程的基本原则1983年,B.W.Boehm提出了著名的软件工程七条基本原理。软件工程围绕工程设计、工程支持以及工程管理,提出了以下四项基本原则:第一,选取适宜开发范型。第二,采用合适的设计方法。第三,提供高质量的工程支持。第四,重视开发过程的管理。软件工程技术与应用1.2软件工程的研究内容软件工程学主要有两个分支:软件开发技术和软件工程管理。本节主要介绍软件开发技术的相关内容。软件工程技术与应用1.2.1软件开发过程软件开发过程是指开发一个最终能满足需求且达到目标的软件产品所需要的步骤。软件工程技术与应用1.2.2软件开发方法早期的程序设计基本上属于个人活动性质,程序员各行其是,并无统一的方法可循;这时的软件开发方法称为个性化软件开发(IndividualizedSoftwareDevelopment)。软件工程技术与应用1.2.2软件开发方法20世纪60年代后期兴起的结构化开发方法。随后,人们又认识到编写程序仅是软件开发过程中的一个环节。有效的开发应该包括“需求分析”、“软件设计”、“编码”等多个阶段。结构化的思想扩展到分析阶段和设计阶段,于是形成了“结构化分析”与“结构化设计”等结构化软件开发(StructuredSoftwareDevelopment)。软件工程技术与应用1.2.2软件开发方法80年代以后出现的C++、Java等语言,促进了面向对象程序设计的广泛流行。仅仅使用面向对象程序设计不会产生最好的效果。只有在软件开发的早期乃至全过程都采用面向对象技术,才能更好地发挥该技术的固有优势。于是,形成了包括“面向对象需求分析—面向对象设计—面向对象编码”在内的面向对象软件开发(ObjectOrientedSoftwareDevelopment)方法。软件工程技术与应用1.2.3软件开发工具1.软件工具编译程序、编辑程序、连接程序以及支持它们的计算机操作系统,都属于软件工具。例如:编码阶段常用的C和VB。2.软件工程环境方法与工具相结合,再加上配套的软、硬件支持就形成环境。软件工程环境(softwareengineeringenvironment,简称SE2)软件工程技术与应用开发工具的作用与功能计算机辅助软件工程CASE作用认识与描述系统需求保存与管理开发过程中的信息代码的生成文档的编制与生成软件项目的管理软件工程技术与应用开发工具的分类分类方法按应用阶段划分按功能划分设计工具分析工具项目管理软件配置质量保证分析设计计划工具界面开发客户服务器Web开发软件工程技术与应用IBMRational工具Rational公司是专门从事CASE工具研制与开发的软件公司,2003年被IBM公司收购。该公司所研发的Rational系列软件是完整的CASE集成工具,贯穿从需求分析到软件维护的整个软件生存周期。需求分析与设计工具产品主要构成测试工具软件配置管理工具RosePurifyPlusRobotClearCase软件工程技术与应用北大青鸟工具北大青鸟系列CASE工具北京北大青鸟软件有限公司开发研制的,在国内有较高的知名度,北京大学软件工程国家工程研究中心就设在该公司。产品主要构成面向对象软件开发工具集JBOO构件库管理系统JBCLMS项目管理与质量保证JBCMJBPMJBCCM软件测试系统Safepro软件工程技术与应用微软版本管理器—VSS版本管理是软件配置管理中的核心工作,由Microsoft公司开发的VisualSourceSafe6.0使用非常广泛。产品主要功能文件检入与检出版本控制文件的拆分与共享权限管理软件工程技术与应用1.3软件开发模型1.3.1线性模型1.3.2原型模型1.3.3演化模型增量模型螺旋模型1.3.4基于构件的模型1.3.5形式化模型转换模型净室模型软件工程技术与应用一个软件从开始计划起,到废弃不用止,称为软件的生存周期。一般来说,软件生存周期包括计划、开发与运行三个时期,每一时期又可细分为若干更小的阶段。人的生存周期婴儿——幼儿——儿童——少年——青年——中年——老年——死亡软件的生存周期软件计划软件开发软件运行问题定义可行性研究需求分析概要设计详细设计编码测试维护或退役软件生存周期软件工程技术与应用软件定义阶段问题定义可行性分析立项或签订合同软件开发阶段需求分析软件设计编码与测试发布或安装验收软件运行阶段软件的使用、运行软件维护软件工程技术与应用软件开发模型软件开发过程概括,是软件工程思想的具体化;它是跨越整个软件生存周期的各个阶段所需要的全部工作与任务的结构框架。软件工程技术与应用1.3.1线性模型---瀑布模型可行性分析需求分析设计编码测试维护定义阶段开发阶段运行阶段软件工程技术与应用瀑布模型的特点:瀑布模型的适用范围阶段间具有顺序性和依赖性每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误,但:实际的项目开发很难严格按该模型进行。客户往往很难清楚地给出所有的需求,而该模型却要求如此。软件的实际情况必须到项目开发的后期客户才能看到,这要求客户有足够的耐心。用户的需求非常清楚全面,且在开发过程中没有或很少变化开发人员对软件的应用领域很熟悉。用户的使用环境非常稳定。开发工作对用户参与的要求很低。软件工程技术与应用1.3.2原型模型用户测试运行原型建造/修改原型听取用户意见需求分析原型开发最终系统设计原型评价最终系统实现用户反馈软件工程技术与应用原型模型的特点:原型模型的适用范围可以得到比较良好的需求定义,容易适应需求的变化。开发费用低、开发周期短、维护容易且对用户更友好。客户与开发者对原型理解不同准确的原型设计比较困难不利于开发人员的创新对所开发的领域比较熟悉而且有快速的原型开发工具进行产品移植或升级时,原型模型是非常适合的。软件工程技术与应用1.3.3演化模型1.增量模型规格说明设计实现和集成交付客户增量1规格说明设计实现和集成交付客户增量2规格说明设计实现和集成交付客户增量n软件工程技术与应用2.螺旋模型集成测试软件工程技术与应用螺旋模型螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。制定计划确定软件目标,选定实施方案,弄清项目开发的限制条件;风险分析分析所选方案,考虑如何识别和消除风险;实施工程实施软件开发;客户评估评价开发,提出修正建议。软件工程技术与应用1.3.4基于构件的模型确定候选构件查找构件库复用所查到构件开发候选构件开始下一轮迭代集成构件融合了螺旋模型的特征支持软件开发的迭代方法软件工程技术与应用基于构件的开发模型特点采用了先进的面向对象技术。基于构件库的开发,这是软件复用的基础,开发速度快。融合了螺旋模型特征支持软件开发的迭代方法。软件工程技术与应用1.3.5形式化模型1.转换模型形式化规格说明与需求比较后修正变换2变换1变换n测试形式化开发记录系统需求目标系统软件工程技术与应用2.净室模型需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证增量1增量2增量n需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证需求收集盒结构规约形式化设计统计性使用测试正确性证明代码生成与检查测试计划认证软件工程技术与应用软件开发模型小结:每一种模型都适用于软件开发的某类问题,它们各有优缺点。软件开发组织应该选择适合于本组织及其管理、人员的软件开发模型,而且随着当前正在开发的特定产品的特性而变化。在实际开发中,有时也可以把几种模型组合在一起使用,以便取长补短。软件工程技术与应用第2章软件开发概述2.1软件开发的基本活动2.2软件开发方法的变迁2.3面向对象开发方法2.4模型驱动的软件开发软件工程技术与应用第2章软件开发概述2.1软件开发的基本活动软件开发时期主要包括需求分析、软件设计、编码和测试四个阶段。本节介绍这四个阶段的主要任务、主要活动以及一些相关的概念。软件工程技术与应用2.1.1需求分析软件项目中40~60%的问题都是在需求阶段埋下的。需求分析要完成什么任务,如何来进行需求分析呢?软件工程技术与应用1.需求分析的任务第一是通过对问题及其环境的理解、分析和综合,建立分析模型(analysismodel);第二是在完全地弄清用户对软件系统的确切要求的基础上,用“软件需求规格说明书”(SoftwareRequirementsSpecification,SRS)表达出来。软件工程技术与应用2.需求分析的步骤(1)需求获取(2)需求提炼:分析建模(3)需求描述:编写SRS(4)需求验证软件工程技术与应用3.快速原型法在需求分析中的应用①利用各种分析技术和方法,生成一个简化的需求规格说明;②对需求规格说明进行必要的检查和修改后,确定原型的软件结构、用户界面和数据结构等;③在现有的工具和环境的帮助下快速生成可运行的软件原型并进行测试、改进;④将原型提交给用户评估并征求用户的修改意见;⑤重复上述过程,直到原型得到用户的认可。在实际的软件开发中,快速原型法常常被用作一种有效的需求定义方法。软件工程技术与应用2.1.2软件设计“设计先于(designbeforecoding)编码”,是软件工程方法的一条基本原则。软件设计一般都包括:数据设计体系结构设计接口设计过程设计等内容。软件工程技术与应用1.模块与构件模块是一个拥有明确定义的输入、输出和特性的程序实体。广义地说,对象也是一种模块。在模块设计中要求的高内聚、低耦合等性质,在对象设计中仍然适用。软件工程技术与应用2.抽象与细化随着软件规模的不断增大,设计的复杂性也不断增大,抽象(