1、软件工程导论 (第5版),普通高校本科计算机专业特色教材精选,张海藩 编著,课时:48 教师:韩秀娟 地点:5-101 周四-3大节(2-17周) 地点:5-102 周二-1大节(单周),总 目 录,第1章 软件工程学概述第2章 可行性研究第3章 需求分析第4章 形式化说明技术第5章 总体设计第6章 详细设计第7章 实现,总 目 录,第8章 维护第9章 面向对象方法学引论第10章 面向对象分析第11章 面向对象设计第12章 面向对象实现第13章 软件项目管理,第1章 软件工程学概述,1.1 软件危机 1.2 软件工程 1.3 软件生命周期 1.4 软件过程 1.5 小结 习题,什么是软件? 开
2、发大型软件系统与以往编制小型程序有什么区别? 什么是软件生命期模型?如何进行软件质量的评价? 软件方法和软件工具之间有着什么联系?,软件生存期的阶段划分,(1)可行性研究与计划 (2)需求分析 (3)总体设计 上游 (4)详细设计 (5)实现 (6)集成测试 (7)确认测试 下游 (8)使用和维护 (根据国标计算机软件开发规范),软件定义,软件程序文档数据,定义真简单!,软件 定义,软件是 能够完成预定功能和性能的可执行的指令(计算机程序); 使得程序能够适当地操作信息的数据结构; 描述程序的操作和使用的文档。 被普遍接受的软件的定义是: 软件(software)是计算机系统中与硬件(hard
3、ware)相互依存的另一部分,它包括程序(program)、相关数据(data)及其说明文档(document)。,软件生产的发展,程序设计时代,程序系统时代,软件工程时代,时间,19461956,19561968,1968至今,生产方式,个体手工劳动,作坊式小集团合作,工程化的生产,使用工具,机器、汇编语言,高级语言,开发工具,开发方法,个人编程技巧,个人编程技巧,开始提出结构化方法,使用数据库、网络、分布式、面向对象技术等,硬件特征,价格贵,存储容量小,运行可靠性差,速度、容量及工作可靠性明显提高,价格降低,向超高速、大容量、微型化以及网络化方向发展,软件特征,只有程序设计概念,不重视程序
4、设计方法,程序员数量猛增,但开发人员素质差,开发技术没有新突破。软件危机产生。,开发技术有很大进步,但没有突破性进展,没有完全摆脱软件危机。,等于程序加技术文档,完整定义,等于程序,软件定义,用户编码者计算机,软件分类 按软件功能划分,系统软件:操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。它是计算机系统必不可少的一个组成部分。 支撑软件:支持软件设计的图形软件包,支持软件实现的编辑程序、预编译程序等。它是协助用户开发软件的工具性软件。 应用软件:工程和科学计算软件、嵌入式软件、计算机辅助设计制造(CADCAM)软件、系统仿真软件、人工智能软件等 。,经费突破 时间一拖再拖 ,不满
5、足要求 可维护性差,例: 美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。,Software Crisis !,软件危机产生,这个项目负责人F.D.Brooks事后总结了他在组织开发过程中的沉重教训时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难,程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境”。关
6、于本项目的经验积累可以看F.D.Brooks的著作人月神话(UMLChina翻译组 汪颖/译,清华大学出版社出版)。,例:Windows95有1000万行代码Windows2000有5000万行代码, 3000多个工程师,几百个小团队。Exchange2000和 Windows2000开发人员结构,软件危机: 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 包含两方面问题: 1如何开发软件,以满足对软件日益增长的需求; 2如何维护数量不断膨胀的已有软件。,1.1.1 软件危机的介绍,软件危机的主要特征,软件开发周期大大超过规定 日期;软件开发成本严重超标;软件质量难于保证。,产生软
7、件危机的原因,软件本身特点(客观) 逻辑部件:管理和控制软件开发过程相当困难,较难维护 规模庞大:代码长度不正比程序复杂程度,软件开发与维护的方法不正确(主观) 没有认识到软件的生命周期 软件开发不同阶段进行修改需要付出的代价差别很大 软件产品程序每个阶段的文档资料,消除软件危机的途径,对计算机软件有一个正确的认识(软件程序) 技术措施:推广使用在实践中总结出来的开发软件的成功技术和方法;开发和使用更好的软件工具等。 管理措施:必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。,引入同一变化付出的代价随时间变化的趋势,变化出
8、现的时期,代价,早 中 后,高中低,软件工程产生,1968年北大西洋公约组织在联邦德国召开国际会议,讨论软件危机问题,提出软件工程概念。,软件工程的发展历史尽管不长,但也经历了传统软件工程时代、对象软件工程时代、过程软件工程时代、构件软件工程时代。目前的发展趋势,正在这4个时代的基础上,朝着流水线装配软件工程的方向发展,以迎接软件发展的4大趋势:流水线生产、网络化、服务化与全球化。,软件工程目标,目的是成功地建造一个大型软件系统,能在开发成本、开发时间、软件功能、性能等方面达到预期目标。为了实现其目标,软件工程提出了工程化的思想。,软件工程从管理和技术两方面指导软件开发。,工程是对技术(或社会
9、)实体的分析、设 计、建造、验证和管理。,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,1.2 软件工程 1.2.1 软件工程的介绍,1968年在第一届NATO会议: “软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。” 1993年IEEE更全面更具体的定义: “软件工程是: 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
10、研究中提到的途径。”,软件工程的本质特性: 1.软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人,1.2.2 软件工程的基本原理,用分阶段的生命周期计划严格管理阶段划分为:可行性分析和计划、分析、设计、编程、测试和运行维护。,坚持进行阶段评审大部分错误在编码之前造成(设计错误63,编码错误37);错误发现越晚,所付代价越高。,3.实行严格的产品控制改变需求时,为保证软件各个配置成分的一致性
11、,都必须按照严格的规程进行评审,批准后才能实施修改。,4.采用现代程序设计技术:提高软件开发和维护效率。,5 .结果应能清楚地审查:为提高软件开发过程的可见性,应根据软件开发项目的总目标和完成期限,规定开发组织的责任和产品标准,使得结果能清楚地审查。,6 .开发小组的人员应少而精:效率高,错误少。1+1 2,7 .承认不断改进软件工程实践的必要性:不仅要积极主动采纳新的软件技术,而且要注意不断总结经验。,软件工程包括技术和管理两方面的内容,所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方
12、法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。,1.2.3 软件工程方法学,软件工程 一种层次化技术,工具,方法,过程,质量焦点,Software engineering layers,软件工程三个要素:方法、工具、过程,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题; 工具是为运用方法而提供的自动的或半自动的软件工程支撑环境; 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。,软件开发方法,好的软件开发方法是
13、克服软件危机的重要途径之一。,方法名称,优点,缺点,适合的场合,功能强大易于维护,开发方法的新发展:软件复用与基于组件的软件开发、 敏捷开发方法,1. 传统方法学 传统方法学 生命周期方法学 结构化范型。 采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。,2. 面向对象方法学当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软
14、件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。,面向对象方法把数据和行为看成同等重要它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。,概括地说,面向对象方法学具有下述4个要点。 (1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。 (2) 把所有对象都划分成类(class)。 (3) 按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。 (4) 对象彼此间仅能通过发送消息互相联系。,1.3软件生存周期(Life cycle),软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。
15、软件生存周期通常包括 可行性研究和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等活动(GB8567中规定)。,软件生命周期由3个时期组成 软件定义:即问题定义、可行性研究和需求分析。 软件开发 总体设计、详细设计、编码和单元测试、 综合测试。 运行维护(也称为软件维护),1.3 软件生命周期,软件生存期的阶段划分,(1)可行性研究与计划 (2)需求分析 (3)总体设计 上游 (4)详细设计 (5)实现 (6)集成测试 (7)确认测试 下游 (8)使用和维护 (根据国标计算机软件开发规范),软件定义时期,基本任务:回答 要解决的问题是什么?该问题有行的通的解决办法吗?若有解决问题
16、的办法,则需要多少费用、资源、时间? 结束标准:提出关于问题性质、工程目标和规模的问题定义书面报告;提出可行性研究报告;若问题值得去解决,制定项目开发计划。,可行性研究和项目开发计划,需求分析,基本任务:回答“为了解决这个问题,目标系统必须做什么”,确定目标系统的功能。(WHAT) 结束标准:给出软件需求说明书,软件开发时期系统设计(HOW),概要设计,基本任务:回答 “概括地说,应如何解决这个问题”。把确定的各项功能需求转换成需要的体系结构。设计软件的结构,确定程序由哪些模块组成及模块间的关系,同时设计该项目的应用系统的总体数据结构和数据库结构。 结束标准:给出概要设计文档。,详细设计,基本
17、任务:回答 “应怎样具体地实现这个系统”。为每个模块完成的功能进行具体描述,把功能描述转变为精确的、结构化的过程描述。 结束标准:设计出程序的详细规格说明。,软件开发时期系统实现,编码,基本任务:把每个模块的控制结构转换成计算机可接受的程序代码。写出的程序应是结构好,清晰易读,并且与设计一致。 结束标准:以某种程序设计语言表示的源程序清单。,测试,基本任务:通过各种类型的测试使软件达到预定的要求。 结束标准:软件合格,能交付用户使用。,软件维护时期,基本任务:通过各种必要的维护活动使系统持久地满足用户需要。,交互设计,美国的Alan Cooper提出,交互设计应该作为软件生存周期的一个重要阶段
18、考虑进去(具体可参看软件开发的创新思维,刘瑞挺等译,电子工业出版社出版)。,可行性研究和项目开发计划、需求分析、交互设计、概要设计、详细设计、编码、测试、维护,软件生存周期模型概念,模型是为了理解事物而对事物作出的一种抽象,它忽略了不必要的细节,是事物的一种抽象形式 。,软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。它确立了软件开发和演绎中各阶段的次序以及各阶段活动的准则,确立开发过程所必须遵守的规定和限制等。,目前有瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。,瀑布模型,瀑布模型,1970年由W.Royce提出,瀑布模型是传统软件工程的基础。 瀑布模型的
19、基本思想是将软件生命周期划分为若干明确定义的阶段。每一阶段活动具有严格性,要实施评审工作,以便及早发现错误,改正错误 ; 以文档形式驱动的,上一阶段的结果作为本阶段的输入 ;,1. 瀑布模型 (Waterfall Model),可行性研究与计划,需求分析,设计,编码,运行维护,测试,定义 阶段,开 发 阶 段,维护阶段,实际的瀑布模型,瀑布模型特点,是一个理想化过程。会掩饰项目中真正的风险,当你太晚发现它们时已无济于事。过程逆转性很差,因为上游的错误会在下游进行发散性传播。所以逆转会造成很大损失。 缺乏灵活性;特别是无法解决软件需求不明确或不准确的问题后期错误,修正代价高 。 适用于:功能和性
20、能明确、完整、无重大变化的软件开发,并且分析设计人员对应用领域很熟悉,项目风险低,用户很少参与开发工作的项目。,原型模型,快速原型模型:先开发一个“原型”软件,完成主要功能,展示给用户并征求意见,然后逐步完善。 探索型原型:用于需求分析阶段; 实验型原型:用于设计阶段; 演化型原型:软件开发全过程,及早向用户提交一个原型系统。原型运用方式:抛弃策略和附加策略。,快速原型模型,2. 原型模型(快速原型模型 Rapid Prototype Model),建造/修改原型,用户测试 运行原型,听取用户意见,原型范型,采用原型模型的软件生存周期,分析定义 系统需求,生成 原型,系统 设计,程序 设计,编
21、码,测试,运 行 和维护,原型化,含原型化的 软件生存期,原型开发过程,原型开发步骤: 快速分析:分析人员与用户配合,迅速确定系统的基本要求。要根据原型所要体现的特征,描述基本需求。关键是要注意分析描述内容的选取。 构造原型:在软件工具支持下尽快实现一个可运行的系统。 运行原型:是发现问题、消除误解、开发者与用户充分协调的一个步骤。 评价原型:评价原型的特性,纠正误解与错误,增添新要求或提出要求变动,提出全面的修改意见。 修改:原型开发的循环。,原型模型的评价,原型的优点: 可及早为用户提供有用的产品。 可及早发现问题,随时纠正错误。 减少技术、应用风险,缩短开发时间,减少费用。 促使用户主动
22、参与开发活动,促进各类人员的协调,减少误解,适应需求的变化,能有效提高系统质量。 原型存在的问题: 缺乏丰富而强有力的软件工具和开发环境。 缺乏有效的管理机制,还未建立起自己的开发标准。 对设计人员水平和开发环境要求较高。 在多次重复改变原型的过程中,程序员会感到厌烦。 系统的易变性对测试有一定影响,难于做到彻底测试,更新文档较为困难。,增量模型,需求分析,设计,编码,测试,第1块,第1次集成,第2次集成,第3次集成,第N次集成,第4次集成,第1块,第1块,第1块,第1块,第N块,第4块,第3块,第2块,第2块,第2块,第2块,第3块,第3块,第4块,分析,增量模型,设计,编码,测试,分析,设
23、计,编码,测试,分析,设计,编码,测试,分析,设计,编码,测试,增量1,增量2,增量3,增量n,增量1 交付客户,增量2 交付客户,增量3 交付客户,增量n 交付客户,日历时间,增量模型,遵循递增方式进行软件开发。开发一部分,向用户展示一部分。 增量模型是一种非整体开发的模型。 适用条件: 1)使用面向对象语言或第四代语言; 2)需求可能发生变化,客户接受分阶段交付; 3)分析设计人员对应用领域不熟悉,难以一步到位; 4)项目风险高;,螺旋模型,螺旋模型是一种风险驱动的模型。螺旋模型需要有相当丰富的风险评估经验和专门知识。,螺旋模型,风险 分析,工程 实施,用户通信,用户 评估,产品维护项目,
24、产品增强项目,新产品开发项目,概念开发项目,计划,建造及发布,简化的螺旋模型,喷泉模型,主要用于采用面向对象技术的项目 喷泉体现迭代和无间隙的特征 软件的某些部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分 在分析、设计、实现等各项活动之间无明显边界,4.1 喷泉模型,分析,设计,实现,测试,集成,演化,迭代模型(RUP模型),Rational Unified Process,初始,精化,构建,移交,9个核 心流程,对初学者来说,使用比较困难,Trade-off Decision (折中决定),可 靠 性,发布日期,功 能,最优,约束范围,可接受,正确的Trade-off 决
25、定,软件生存周期模型的选择,1)模型应符合软件本身的性质(规模、复杂性) 2)模型应满足软件应用系统整体开发进度要求 3)模型应有可能控制并消除软件开发风险 4)模型应有可用的计算机辅助工具(如快速原型工具)的支持 5)模型应与用户和软件开发人员的知识和技能相匹配 6)模型应有利于软件开发的管理与控制,软件生存周期模型的剪裁,在一个成熟的IT企业或软件组织内部,通常要根据各种软件开发模型的特点,结合本单位的开发经验和行业特点的具体实际,还需要定制适合本单位的“生存周期模型裁剪指南”,有针对性地对选定的软件开发模型中定义的生存周期,进行适当剪裁,使它完全适合于本单位的需求。 所谓裁剪,就是对原模型中定义的内容进行增、改、删,去掉对本单位不适用的内容,同时进一步细化,从而构成了完全适合本单位的“软件生存周期模型裁剪指南”。该指南在软件组织内部,专供高层经理和项目经理在软件策划中选取软件开发模型时使用。,