软件工程 yhuayun88@sina.com
1
概述
本课程学习什么?\r解决什么问题?\r怎么学?\r目前软件项目有哪些阶段?各阶段所占的比例是多少?\r你如何定位?
软件工程 yhuayun88@sina.com
2
第一章 软件工程概念
1.1 软件的定义与分类\r1.2 软件的发展\r1.3 软件工程定义\r1.4 软件工程过程与软件生存周期\r1.5 软件工程的目标与原则\r1.6 软件开发范型
软件工程 yhuayun88@sina.com
3
1.1 软件的定义与特点
软件由计算机程序、数据及文档组成。\r软件的特点\r 抽象性\r 软件生产无明显制造过程\r 无磨损性\r 对计算机硬件依赖性\r 软件的手工开发方式\r 软件本身复杂性\r 软件的高成本
软件工程 yhuayun88@sina.com
4
软件与硬件、数据库、人、过程等共同构成计算机系统。\r软件种类可以从六个方面进行划分:\r 按功能分类\r应用软件\r系统软件\r支撑软件\r
软件的分类
软件工程 yhuayun88@sina.com
5
按规模分类\r 微型\r 小型\r 中型\r 大型\r 甚大型\r 极大型\r 按工作方式分类\r 分时软件\r 实时软件\r 交互式软件\r 批处理式软件
软件工程 yhuayun88@sina.com
6
按服务对象分类\r 项目软件\r 产品软件\r 按使用频度分类\r 一次性使用软件\r 频繁使用软件\r 按失效影响分类\r 高可靠性软件\r 一般可靠性软件\r每一类软件在管理方面要求程度不同。
软件工程 yhuayun88@sina.com
7
软件的发展经历了三个阶段\r 程序设计阶段 — 50至60年代\r 程序系统阶段 — 60至70年代 \r 软件工程阶段 — 70年代以后\r软件工程概念的出现源自软件危机。
1.2 软件的发展
软件工程 yhuayun88@sina.com
8
软件危机的主要特征
软件开发周期大大超过规定日期;\r软件开发成本严重超标;\r软件质量难于保证;\r软件难于维护。\r原因\r 软件本身的规模\r软件本身的复杂性\r 软件产品的特殊性\r 人们认识的局限性
软件工程 yhuayun88@sina.com
9
软件产品的复杂性(一)
复杂性\r 生产率\r例如,Windows 95有1000万行代码,Windows 2000有5000万行代码
Exchange2000和 Windows2000开发人员结构
软件工程 yhuayun88@sina.com
10
软件工程 yhuayun88@sina.com
成功的标准:
用户在用\r用户可很容易做完要做的事\r 失败的根本原因:\r开发人员写出的东西达不到\r用户要求(人的问题.技术问题)\r
软件工程 yhuayun88@sina.com
12
1968年Fritz Bauer在NATO会议上的定义: “建立并使用完善的工程化原则, 以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。”\r1983年IEEE的软件工程定义:“软件工程是开发、运行、维护和修复软件的系统方法。”\r1993年IEEE的一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”
1.3 软件工程定义
软件工程 yhuayun88@sina.com
13
换言之,软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。\rR. Pressman在他的《软件工程》教程中指出:软件工程的三个要素是方法、工具、过程。\r软件工程是一种层次化的技术,上一层为下一层提供支持。\r\r
软件工程 yhuayun88@sina.com
14
软件工程 yhuayun88@sina.com
15
软件工程框架
软件工程 yhuayun88@sina.com
16
如框架所示,软件工程有其自己的工程目标、工程活动以及工程原则。\r软件工程目标包括可用性、正确性和合算性,规定了软件工程实践的结果(即软件)应具有的基本性质;\r软件工程活动包括需求、设计、实现、确认和支持,是为生产具有这些基本性质的软件产品应进行的基本工作;\r软件工程原则从四个方面(开发范型、开发方法、工程支持、工程管理)指导每一项工程的活动,以实现软件工程目标。
软件工程 yhuayun88@sina.com
17
软件工程的知识结构
2001年5月ISO/IEC JTC 1发布了《 SWEBOK指南V0.95(试用版)》,即 Guide to the Software Engineering Body of Knowledge。\rSWEBOK把软件工程学科的主体知识分为10个知识领域。这10个领域包括:\r ? 软件需求 ? 软件设计\r ? 软件构造 ? 软件测试\r ? 软件维护 ? 软件配置管理\r ? 软件工程管理 ? 软件工程过程\r ? 软件工程工具和方法 ? 软件质量
软件工程 yhuayun88@sina.com
18
ISO 9000定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。\r从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。
1.4 软件工程过程与软件生存周期
软件工程过程定义
软件工程 yhuayun88@sina.com
19
软件工程过程定义了: 方法使用的顺序、 要求交付的文档资料、为保证质量和适应变化所需要的管理、软件开发各个阶段完成的里程碑。\r软件工程过程包含四种基本的过程活动:\r Plan 软件规格说明\r Do 软件开发\r Check 软件确认\r Action 软件演进
软件工程 yhuayun88@sina.com
20
软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为软件的生存周期。\r软件生存周期包含三个阶段:软件定义、软件开发及软件运行维护。 \r软件生存周期模型是软件工程思想的具体化,是跨越软件生存周期的系统开发、运行、维护所实施的全部活动和任务的过程框架。
软件生存周期
软件工程 yhuayun88@sina.com
21
常用的软件生存期模型有\r 瀑布模型\r 演化模型\r 螺旋模型\r 增量模型\r 喷泉模型\r 智能模型\r 快速应用开发(RAD)模型
软件生存周期模型
软件工程 yhuayun88@sina.com
22
1. 瀑布模型
软件工程 yhuayun88@sina.com
23
按照传统瀑布模型开发软件的特点
各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落。每项活动均处于一个质量环(输入-处理-输出-评审)中。\r阶段间具有顺序性和依赖性。\r推迟实现的观点。\r每个阶段必须完成规定的文档;每个阶段结束前完成文档审查。
软件工程 yhuayun88@sina.com
24
2. 演化模型
软件工程 yhuayun88@sina.com
25
演化模型的特点
演化模型是迭代的。因为软件与所有的复杂系统一样,必须经过不断演化才能完善。\r演化模型先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。\r业务和产品需求在变化中,采用线性开发方式是不实际的。\r快速实现和提交一个有限的版本,可以应付市场竞争的压力,
软件工程 yhuayun88@sina.com
26
3. 螺旋模型
螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析。\r螺旋模型沿着螺线旋转,自内向外每旋转一圈便开发出更完善的一个新版本。 \r制定计划 确定软件目标,选定实施方案,弄清项目开发的限制条件;\r风险分析 分析所选方案,考虑如何识别和消除风险;\r实施工程 实施软件开发\r客户评估 评价开发,提出修正建议。
软件工程 yhuayun88@sina.com
27
软件工程 yhuayun88@sina.com
28
4. 增量模型
增量模型是迭代和演进的过程。\r增量模型把软件产品分解成一系列的增量构件,在增量开发迭代中逐步加入。 \r每个构件由多个相互作用的模块构成,并且能够完成特定的功能。\r早先完成的增量可以为后期的增量提供服务。\r增量开发方法的新演进版本叫做 “极限程序设计(eXtreme Programming)”。
软件工程 yhuayun88@sina.com
29
软件工程 yhuayun88@sina.com
30
软件工程 yhuayun88@sina.com
31
5. 喷泉模型
体现了迭代和无间隙的特性。\r系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分。\r无间隙是指在各项开发活动,即分析、设计和编码之间不存在明显的边界。\r喷泉模型是对象驱动的过程。
软件工程 yhuayun88@sina.com
32
软件工程 yhuayun88@sina.com
33
6. 智能模型
智能模型是基于知识的软件开发模型,它把瀑布模型和专家系统综合在一起。\r该模型在各个开发阶段都利用了相应的专家系统来帮助软件人员完成开发工作。\r为此,建立各个阶段的知识库,将模型、相应领域知识和软件工程知识分别存入数据库。以软件工程知识为基础的生成规则构成的专家系统与包含应用领域知识规则的其他专家系统相结合,构成该应用领域的开发系统。
软件工程 yhuayun88@sina.com
34
软件工程 yhuayun88@sina.com
35
7. 变换模型
变换模型是一种基于形式化规格说明语言及程序变换的软件开发模型。\r它采用形式化的软件开发方法,对形式化的软件规格说明进行一系列自动的或半自动的程序变换,最终映射成为计算机系统能够接受的程序系统。\r多步程序变换过程的重要性质是:每一步程序变换的正确性仅与该步变换所依据的规范 Mi 以及对变换后的假设 Mi 1 有关。
软件工程 yhuayun88@sina.com
36
在此意义上,变换步骤独立于其他变换步骤。这称为变换的独立性。\r该模型只适合于软件的形式化开发方法;需要严格的数学理论和形式化技术支持;需要一整套开发环境(如程序变换工具、定理证明工具等)的支持。
软件工程 yhuayun88@sina.com
37
8. 基于第四代技术的模型
第四代语言 (4GL) 是在大型数据库管理系统的基础上发展起来的,是一种面向结果的非过程性语言。它独立于具体的处理机,有丰富的软件工具支持,能统一利用和管理各种数据资源并能适应不同水平用户的需要。\r以4GL为核心的软件开发技术成为第四代技术(4GT),采用4GT的软件开发模型如图。\r软件开发人员在定义软件需求,给出需求规格说明之后,4GT工具可将该需求规格说明自动
软件工程 yhuayun88@sina.com
38
转换为程序代码。这大大减少了分析、设计、编码和测试的时间。\r以4GL为核心的软件开发技术成为第四代技术(4GT),采用4GT的软件开发模型如图。
软件工程 yhuayun88@sina.com
39
9. 快速应用开发(RAD)模型
快速应用开发模型是一种增量开发模型,强调极短的开发周期。\r该模型开发软件大量使用了可复用的构件。\r每一个增量的开发经历五个阶段:\r 业务建模 对业务功能的信息流建模。\r 数据建模 对业务的数据对象和关系建模。\r 过程建模 描述完成业务功能的数据变换。\r 应用生成 应用构件和自动化工具建造。\r 测试与反复 对新构件和接口进行测试。
软件工程 yhuayun88@sina.com
40
软件工程 yhuayun88@sina.com
41
10. Rational 统一过程
最佳实践\r1.迭代开发\r2.管理需求\r3.使用基于构件的体系结构\r4.可视化建模\r5.验证软件质量\r6.控制软件变更
软件工程 yhuayun88@sina.com
42
Rational 统一过程
RUP软件开发生命周期\r由四个阶段,九个工作流组成\r四个阶段:初始、精化、构建、移交\r九个工作流(6 3)\r6:业务建模、需求、分析与设计、实现、测试、部署\r3:配置与变更管理、项目管理、环境
软件工程 yhuayun88@sina.com
43
软件工程需要解决的问题:软件成本、软件可靠性、软件维护、软件生产率和软件复用。 \r软件工程需要达到的基本目标:\r 付出较低的开发成本\r 达到要求的软件功能\r 取得较好的软件性能\r 开发的软件易于移植\r 需要较低的维护费用\r 能按时完成开发,及时交付使用
1.5 软件工程的目标与原则
软件工程 yhuayun88@sina.com
44
在软件开发过程中必须遵循的软件工程原则有:\r抽象与自顶向下、逐层细化 采用分层抽象的方法,有效控制软件开发的复杂性。\r模块化 把问题分解为若干较小的较易解决的模块,有助于信息隐蔽和抽象。\r信息隐蔽和数据封装 将模块中的软件设计决策封装在模块内部,使得模块实现与使用分离,有助于控制修改局部化。
软件工程原则
软件工程 yhuayun88@sina.com
45
局部化 在一个物理模块内集中逻辑上相互关联的计算机资源,促使聚合具有特定目的的事物。\r一致性 整个软件系统的模块使用一致的设计策略、编程风格,保持程序内部接口的一致性、软件与硬件接口的一致性、系统规格说明与系统行为的一致性。\r完备性 软件系统中不丢失任何成分。\r可验证性 系统分解应当遵循易检查、易测试和易评审的原则,以便保证系统的正确性。
软件工程 yhuayun88@sina.com
46
软件工程的基本原理有:\r按软件生存期分阶段制定计划并认真实施 把整个软件开发过程视为一项工程,把工程划分为若干阶段,分别制定每个阶段的计划,逐个实施。\r坚持进行阶段评审 前一阶段的结果将成为下一阶段的依据。坚持阶段的评审才能保证错误不传播到下一阶段。
软件工程的基本原理
软件工程 yhuayun88@sina.com
47
坚持严格的产品控制 将影响软件质量的因素在整个过程中置于严格控制之下。\r使用现代程序设计技术 先进的程序设计技术带来的是生产率和质量的提高。使用合适的开发模式和工具可以有效地建立功能强大的系统。\r明确责任,使得工作结果能够得到清楚的审查 开发组织严格划分责任并制定产品的标准,使得每个成员的工作有据可依,确保产品的质量。
软件工程 yhuayun88@sina.com
48
用人少而精 开发组织不在人多,在于每个人的技能适合要求。同时用人少而精,可减少沟通路径,提高生产率。\r不断改进开发过程 在开发的过程中不断总结经验,改进开发的组织和过程,有效地通过过程质量的改进提高软件产品的质量。
软件工程 yhuayun88@sina.com
49
1.6 软件开发范型(Paradigm)
范型又称为风范。通常认为范型就是开发模型(Model)或开发模式(Pattern),实际上它与方法(Methodology)一样,都被视为一种开发技术。范型支配了设计方法、编码语言、测试和检验技术的选择。\r过程性范型把软件视为处理流,定义成由一系列步骤构成的算法。每一步骤都是带有输入和输出的一个过程,把这些步骤串联在一起可产生贯通于整个程序的控制流。
软件工程 yhuayun88@sina.com
50
面向对象范型把标识和模型化问题领域中的实体做为系统开发的起点,面向对象系统中的对象是数据抽象与过程抽象的综合。\r逻辑性范型是基于规则的,它把有关问题的知识分解成一组具体规则(如prolog语言)。\r面向进程范型把一个问题分解成独立执行的模块。让不只一个程序同时运行。这些进程互相配合,解决问题。\r面向存取范型是一种在构造用户界面方面很有用的技术。
软件工程 yhuayun88@sina.com
51
函数型范型是基于规则的,它把有关问题的知识分解成一组具体规则,用语言的“if_then”等结构来表示这些规则。 \r说明性范型。\r每种开发范型都有它的支持者和用户:\r 每种开发范型都特别适合于某种类型的问题或子问题;\r 每种开发范型都用不同的方式考虑问题;\r 每种开发范型都使用不同的方法来分解问题
软件工程 yhuayun88@sina.com
52
每种开发范型都导致不同种类的块、过程、产生规则。\r系统开发时通常把大型问题分解成一组子问题。对于每个子问题采用适当的软件开发范型。
软件工程 yhuayun88@sina.com
“软件工程”课程 与其它软件专业课的区别
(1) 立足于系统的整体。\r(2) 讲授系统分析、系统设计、\r 测试及维护的理论和方法。\r(3) 构筑一个软件系统,实践\r 软件开发全过程。\r
软件工程 yhuayun88@sina.com
“软件工程”课程教学与实践的目标
转变对软件开发的认识:\r 上升\r 程序 系统\r 转变思维定式:\r 上升\r 程序员 系统工程师\r (系统分析员)\r 工程化训练
软件工程 yhuayun88@sina.com
系统分析员的地位
用户
分析员
程序员
软件工程 yhuayun88@sina.com
“一个好的工业,应有一套良好的标准来配套”
软件的工业化生产过程应具备的特点:\r明确的工作步骤\r详细具体的规范化文档\r明确的质量评价标准
软件工程 yhuayun88@sina.com
软件产品的标准化
软件开发过程的标准化
软件工程 yhuayun88@sina.com
软件工程技术的两个明显特点:
强调规范化\r 强调文档化