【文档说明】第1章高级软件工程讲述课件.ppt,共(32)页,510.914 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44945.html
以下为本文档部分文字说明:
第1章高级软件工程讲述课程的性质、目的与任务软件工程是计算机科学与技术专业的一门专业核心课程。通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。课程主要内容本课程比较全面、系统
地介绍软件工程的概念、技术与方法。主要内容包括:软件工程概述、软件生存周期及软件需求分析、软件设计方法、软件测试技术等。通过本课程学习,使学生能真正的了解软件开发的整个过程。为了让学生真正得以实践,结合实际软件开发项目,让学生从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码直到最
后对自己开发的软件进行测试,这样一个软件开发全过程,使学生掌握软件开发的基本技能。软件的概念软件的危机软件工程概念软件的生命周期软件工程的目标和原则软件的概念软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。其
中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。软件具有以下8个特点:(1)软件是一种逻辑实体,而不是具体的物理实体,具有抽象性(2)软件的生产与硬件不同,在开发过程中没有明显的制造过程(3)在软件
的运行和使用期间,没有像硬件那样的机械磨损,老化问题(4)软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。(5)软件的开发至今尚未完全摆脱手工艺的开发方式。(6)软件本身是复杂的。包括实际问题的复杂性和程序逻辑结
构的复杂性。(7)软件成本是昂贵的。(8)相当多的软件工作涉及到社会因素。失效率时间磨合调整磨损用坏时间失效率修改点实际曲线理想曲线(a)硬件失效率曲线(b)软件失效率曲线软件的分类1.按功能划分:(1)系统软件。如操作系统、编译程序、设备
驱动程序等(2)支撑软件。如数据库管理系统、网络软件、软件开发环境等(3)应用软件。如工程与科学计算软件、CAD/CAM软件、CAI软件、信息管理系统等2.按工作方式划分:(1)实时处理软件(2)分时软件(3)交互式软件(4)批处
理软件3.按服务对象的范围划分(1)项目软件(2)产品软件4.按使用频度划分(1)一次使用软件(2)频繁使用软件5.按软件失效的影响进行划分(1)高可靠性软件(2)一般可靠性软件软件的危机软件危机是指在计算机软件的开
发和维护过程中所遇到的一系列严重问题。软件危机主要有以下一些典型表现:(1)对软件开发成本和进度的估计常常很不准确(2)用户对“已完成的”软件系统不满意的现象经常发生(3)软件产品的质量往往没有保证(4)软件常常是不可维
护的(5)软件通常没有适当的文档资料(6)软件成本在计算机系统总成本中所占的比例逐年上升(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势软件危机的产生主要有以下一些原因:(1)软件不同于硬件,它是
计算机系统中的逻辑部件而不是物理部件(2)软件规模大,程序的复杂性将随着程序规模的增加而呈指数上升(3)与软件开发和维护有关的许多错误认识和作法的形成,可以归因于计算机系统发展的早期软件开发的个体化特点(4)软件的生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的周期
(5)软件维护消除软件危机的途径:(1)组织管理:软件开发不是某种个体劳动的神秘技巧,软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。(2)方法:应该推广使用在实践中总结出来的开发软件的成功的技术
和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。(3)工具:应该开发和使用更好的软件工具。软件工程介绍软件工程是一门指导计算机软件系统开发和维护的工程学科,
是一门新兴的边缘学科,主要研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的开发,涉及计算机科学、工程科学、管理科学、数学等领域的一门综合性的交叉学科。它借鉴传统工程的原则、方法,以提高质量、降低成本为目的。从1968年提出“软件
工程”一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国著名的软件工程专家Boehm综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理,
这七条原理是确保软件产品质量和开发效率的原理的最小集合。原理1.用分阶段的生命周期计划严格管理原理2.坚持进行阶段评审原理3.实行严格的产品控制原理4.采纳现代程序设计技术原理5.结果应该能清楚地审查原理6.开发小组的人员应少而精原理7.承认不断改进软件工程实践的必要
性软件工程的框架可概括为:软件工程目标、软件工程过程和软件工程原则。(1)软件工程目标:生产具有正确性、可用性以及代价合宜的产品(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤(3)软件工程的原则
:指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件工程方法学包含三个要素:方法、工具和过程。方法是完成软件开发的各项任务的技术方法;工具是为运用方法而
提供的自动的或半自动的软件工程支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。使用得最广泛的软件工程方法学有以下几种:(1)结构化方法学(2)面向对象方法学(3)后面向对象方法学软件的生命周期软件有一个孕育、诞生、成长、成熟、衰亡的
生存过程。这个过程即为计算机软件的生存期。软件生存期的八个步骤如下:(1)问题定义题定义阶段必须回答的关键问题:“要解决的问题是什么?”,通过问题定义阶段的工作,系统分析员应该提出关于问题性质、工程目标和规模的书面报告
。(2)可行性研究这个阶段要回答的关键问题:“对于上一个阶段所确定的问题有行得通的解决办法吗?”,可行性研究阶段应该导出系统的高层逻辑模型(通常用数据流图表示),并且在此基础上更准确、更具体地确定工程规模和目标,然后分析员更准确地估计系统的成本和效益。对建议的系统进行仔细的成本
/效益分析是这个阶段的主要任务之一。(3)需求分析确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要
的算法描述表示系统的逻辑模型。(4)总体设计这个阶段必须回答的关键问题是:“概括地说,应该如何解决这个问题?”。首先,应该考虑几种可能的解决方案。再就是设计软件的结构,也就是确定程序由哪些模块组成以及模块间的关系。(5)详细设计回答下
面这个关键问题:“应该怎样具体地实现这个系统呢?”。这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。通常用HIPO图(层次图加输入/处理/输出图)或PDL语言(过程描述语言)描述详细设计的结果。(6)编码和单元测试这个阶段的关键任务是写出正确
的容易理解、容易维护的程序模块。(7)综合测试这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。(8)软件维护维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有四类维护活动:
改正性维护,也就是诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化;完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护,即修改软件为将来的维护活动预先做准备。软件生命常见周期模型瀑布模型渐
增模型快速原型模型螺旋模型喷泉模型智能模型需求分析验证设计验证编码验证规格说明验证综合测试维护传统的瀑布模型实际上该瀑布模型过于理想化,人在工作过程中不可能不犯错误。在设计阶段可能发现规格说明文档中的错误,而设计上的缺陷或错误可能在实现过程中显现出来,在综合
测试阶段也会发现需求分析、设计或编码阶段的错误。因此,实际的瀑布模型是带“反馈环”的,如下图所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。快速原型验证验证测试编码设计验证规格说明变化的需求验证综合测试维护实际的瀑布模型需求分析针对每个构件,完成详细设计、编码和集成,
经测试后交付给用户验证规格说明验证概要设计验证维护渐增模型快速原型验证验证测试编码设计验证规格说明变化的需求验证综合测试维护快速原型模型风险分析需求与生命周期计划计划下一阶段风险分析风险分析风险分析原型1原型2可运行的原型操作概念开发计划需求确认集成与
测试计划设计验证与确认软件产品设计实现测试验收集成测试单元测试编码详细设计软件需求确定目标,选择方案,设定约束条件累计费用评估方案,识别并排除风险开发、验证下一级产品各步骤的进度原型3螺旋模型分析设计实现确认维护演化喷泉模型模型检查软件需求形式化说明(M0)软件需求形式化说明(M1)(M2)(M
n)程序变换程序变换程序变换……变换模型用户要求维护测试程序编码详细设计概要设计需求分析支持需求分析的专家系统支持维护的专家系统支持测试的专家系统支持软件设计的专家系统智能模型软件工程的目标和原则组织实施软件工程项目,从技术上和管理上采取了多项措
施以后,最终希望得到项目的成功。所谓成功指的是达到以下几个主要的目标:(1)达到要求的软件功能;(2)取得较好的软件性能;(3)开发的软件易于移植;(4)能按时交付使用;(5)付出较低的开发成本;(6)较低的维护费用。软件工程目标之间存在的相互关系如下图所示:低开发成本易于维护按时交
付高可靠性高性能互斥关系互补关系为达到以上软件工程的目标,在软件开发过程中必须遵循下列软件工程原则:(1)抽象:抽取事物最基本的特性和行为,忽略非基本的细节(2)信息隐蔽:将模块设计成“黑箱”,实现的细节隐藏在
模块内部,不让模块的使用者直接访问(3)模块化:模块是程序中逻辑上相对独立的成分,是独立的编程单位,应有良好的接口定义(4)局部化:要求在一个物理模块内集中逻辑上相互关联的计算机资源,保证模块之间具有松散的耦合,模块内部具有较强的内聚(5)确定性:软件开发过程中所有概念的
表达应是确定的、无歧义性的、规范的(6)一致性:整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语(7)完备性:软件系统不丢失任何重要成分,达到可以完全实现系统所要求功能的程度(8)可验证性:开发大型的软件系统需要对系统自顶向下、逐层
分解