1、软件工程 Software Engineering,1,第一章 绪论,什么是工程 什么是软件 软件的特点 软件的分类 软件危机 什么是软件工程 软件工程基本内容 软件开发模型,2,什么是工程(Engineering),The American Engineers Council for Professional Development has defined “engineering“ as: The creative application of scientific principles to design or develop structures, machines, apparatu
2、s, or manufacturing processes, or works utilizing them singly or in combination; or to construct or operate the same with full cognizance of their design; or to forecast their behavior under specific operating conditions; all as respects an intended function, economics of operation or safety to life
3、 and property.,3,什么是工程(Engineering),工程是将自然科学原理应用到工农业生产部门中去而形成各学科的总称。,4,建筑工程,电气工程,航天工程,什么是软件(Software),5,程序能处理的具有一定数据结构的信息,完成特定功能而编制的一组指令集,与程序开发、维护和使用相关的图文资料,计算机程序,软件 文档,数据,软件组成,软件的特点,无法直接观察软件的物理形态 软件产品包含了大量的脑力劳动 软件不存在磨损和老化现象 软件具有可复用性 软件依赖于特定的计算机系统环境,6,软件分类,7,应用软件,支撑软件,系统软件,地理信息系统软件 航空售票软件 MES、ERP,数据
4、库管理系统 中间件,操作系统,为特定的领域或服务开发的针对性较强的软件。,协调用户进行软件开发,对应用软件进行维护。,与计算机硬件结合最紧密的软件。,按照功能分类:,软件分类,8,通用软件,定制软件,操作系统 办公软件,飞机导航系统 MES,面向市场,面向特定的用户需求,按照服务对象分类:,软件分类,9,小型软件,实时软件,中型软件,大型软件,分时软件,交互式软件,批处理软件,按照软件 产品规模,按照工作方式,软件工程主要方面,个体软件过程 一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。 团队软件过程 为开发软件产品的开发团队提供指导
5、 软件过程管理 是提高软件生产率和保证软件质量的一个重要的方法 业界公认最好的能力成熟度模型(CMM),10,Watts S. Humphrey - 沃茨 汉弗雷,Introduction to the Personal Software Process (1997) Managing the Software Process (1989) Introduction to the Team Software Process (2002),11,曾长期在IBM公司担任高级软件开发经理,获得了大量的软件开发过程方面的经验,是卡内基梅隆大学软件工程研究所的研究员,软件危机,12,软件危机爆发于20世
6、纪60年代中期 落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题的现象。,软件危机的主要表现,13,软件产品不能完全满足用户的需求。 软件产品的质量难以得到保证。 软件产品的开发周期或经费大大超出预期。 软件产品不能灵活适应环境的改变。 软件文档不完备。,软件危机的原因,14,软件开发是一项复杂的工程 没有完善的质量保证体系 软件开发人员对这个产业认识不充分、缺乏经验 软件独有的特点也给软件开发和维护带来困难(抽象、脑力劳动) 软件文档的重要性没有得到软件开发人员和用户的足够重视,什么是软件工程,15,软件工程是解决软件危机的方法。 指应用计
7、算机科学技术、数学和管理学原理,运用工程科学的理论、方法和技术,研究和指导软件开发和演化的一门交叉学科。,软件工程的目标,16,使软件产品的功能和性能满足用户需求 提高软件产品的质量 使软件开发的成本能控制在预计的合理范围内 使软件产品的开发周期能控制在预计的合理时间范围内 使软件产品易于移植、维护、升级和使用 提高软件产品的可靠性,可用性,可用性,17,MDT (平均修复时间) =Mean Down Time MTBF (平均故障间隔) =Mean Time Between Failures,可用性,18,如果设备的MTBF为81.5年,MDT为1小时: MTBF in hours = 81
8、.536524=713940 Availability= MTBF/(MTBF+MDT) = 713940/713941 =99.999859%,软件工程基本内容,19,软件工程,软件工程原理,软件工程过程,软件工程方法,软件工程模型,软件工程管理,软件工程度量,软件工程环境,软件工程应用,软件工程基本原则,20,将软件的生命周期划分为多个阶段,各个阶段实行严格的项目管理 坚持阶段评审制度,以确保软件产品的质量 实施严格的产品控制,以适应软件规格的变更 采用现代程序设计方法 开发出来的软件产品应该能够清楚地被审查 合理安排开发小组的人员,并且开发小组的人员要少而精 不断地改变软件开发实践,软件
9、生命周期,21,从设计产品的构想开始,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用以及产品版本的不断更新,到最后该产品被市场淘汰的全过程。,可行性研究,需求分析,软件设计,软件实现,软件测试,软件维护,为什么做,做什么,怎么做,可行性研究,22,为了在技术、经济、社会等多个方面寻求可行的解决方案,并对各个方案进行比较,完成可信性分析报告。 为后续的软件开发做必要的准备工作 确定待开发的产品所要解决的问题 对所需要的资金、时间及各种资源做出合理的估计,需求分析,23,为了解决用户提出的问题,目标系统需要做什么,开发人员需要对原始的需求进行抽象和概括,从功能、性能、界面和接口等方
10、面对需求进行详细的描述,最终反映到软件需求规格说明书中。 需求分析的准确与成功直接关系到后续软件开发的成败 开发人员要通过各种途径获取需求。,软件设计,24,在需求分析的基础上,软件开发人员通过制定设计方案,把需求文档中描述的功能可操作化。 概要设计:总体结构上 详细设计:模块内部实现细节,软件实现(编码),25,开发人员根据设计阶段制定的设计方案,编写程序代码 必须遵守一定的标准 使用编程语言,软件测试,26,发现软件产品中存在的软件缺陷。 软件缺陷的产生是必然的 软件测试是保证软件质量的关键步骤 软件缺陷发现得越晚,修复缺陷所需的成本就越高 软件测试可分为单元测试、集成测试、系统测试和验收
11、测试,软件维护,27,软件产品被交付使用后,软件开发人员需要对产品进行维护,以保证软件产品的正常运行。 在使用过程中发现的隐藏的错误 用户的需求增长或改变,软件产品的功能需要不断更新 一般来讲,软件产品的质量越高,进行维护的工作量就越小,软件开发模型定义,28,模型就是对某一事物的抽象,为了更好地理解和表达问题。 软件工程中的模型用一组图形符号和组织这些符号的规则组成。 软件开发模型是软件开发过程中的抽象与概括,对软件开发过程中各个阶段之间关系的一个描述和表示,是软件工程思想的具体化。,软件开发模型分类,29,常见的软件开发模型有很多,主要介绍: 瀑布模型 原型模型 螺旋模型 统一软件开发过程
12、模型 敏捷模型,瀑布模型,30,线性的,回溯性较差,不能适应环境的变化 基于里程碑,阶段性强,易于对项目进行管理 适用于需求不发生或很少发生变化的项目,计划,需求分析,设计,编码,测试,维护,20世纪80年代前,原型模型,31,帮助开发人员充分挖掘需求,并对技术的可行性进行研究。 适用于产品升级或完善,需求获取困难的项目,初步分析需求,快速构造原型,实现产品,修改原型,用户提出修改意见,用户操作原型系统,满意,不满意,螺旋模型,32,将风险分析的机制扩展到了各个阶段的活动中,有效较低软件开发的风险,可操作性不强 适用于风险较大的项目,制定计划,风险分析,实施工程,客户评估,需求,设计,测试,实现,风险分析,风险分析,风险分析,风险分析,测试,开发计划,评审,统一软件开发模型,33,面向对象的开发模型 基于迭代思想,使用范围极广,软件需求,面向对象分析,面向对象设计,系统集成与实现,目标系统,原型,构件,敏捷模型,34,强调建模要简单,根据用户反馈及时对模型修改(“快”) 轻量级的模型,支持软件产品的快速开发 能很快适应软件开发周期的各种变化,