您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第1章 软件工程学概论
软件工程张聚礼zhjl@lut.cn兰州理工大学计算机与通信学院2第1章软件工程学概述1.0什么是软件?1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程1.5小结习题3软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。数据是使程序能正常操纵信息的数据结构。文档是与程序开发,维护和使用有关的图文材料。§1.0什么是软件?4软件的表现形式:软件分为有形部分和无形部分:软件的有形部分:是软件的各种具体表现形式,包括软件文档,程序代码,二进制代码,用户界面,输出报表等。软件的无形部分:是软件的内部逻辑,是软件本身所包含的思想。5软件的分类:按软件的功能进行划分:系统软件操作系统数据库管理系统设备驱动程序通信处理程序等•6支撑软件文本编辑程序文件格式化程序磁盘向磁带向数据传输的程序程序库系统支持需求分析、设计、实现、测试和支持管理的软件•7应用软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件•8按软件工作方式划分:实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分:项目软件产品软件即针对特定某个客户的要求,并仅为其使用的软件。又称工程软件,特点是有明确的合同,严格的工期,约定的维护期等。如XXX公司XXX系统。即针对某一领域客户的共有需求而开发的软件。特点是通用、功能丰富而冗余,通过一次性的购买行为获得等。如操作系统软件、数据库软件、CAD软件等。9软件发展阶段:程序设计阶段—50至60年代程序系统阶段—60至70年代软件工程阶段—70年代以后10软件开发工具的变迁:穿孔机打孔编程汇编语言(Z80、M6800、8086/88)高级语言(Cobol、Basic、Dbase、TurboC、FoxBase、Foxpro等)C/S、B/S体系结构的开发工具(VFP、VC、VB、Delphi、Powerbuilder、C++Builder、OracleDeveloper/2000、Java、MS.net等等)11§1.1软件危机美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。......这个项目的负责人事后总结了他在组织开发过程中的沉痛教训时说:“......正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。......程序设计工作正像这样一个泥潭,......一批批程序员被迫在泥潭中拼命挣扎,......”SoftwareCrisis!•12软件危机⑴项目没有被很好地理解;计划不周,最终导致进度拖延。例:在20世纪60年代后期,一位热情的年青工程师受命为一个自动化制造应用项目“编写”计算机程序。选择他的理由非常简单,因为在整个技术小组中他是唯一参加过计算机编程培训的人。这位工程师对汇编语言的IN和OUT指令以及Fortran语言有所了解,但是却根本不懂软件工程,更不要说项目进度安排和跟踪了。他的老板给了他一大堆相关的手册,以及需要做些什么的口头描述。年轻人被告知该项目必须在两个月之内完成。他阅读了这些手册,想好了解决方法,就立即编写代码。两周后,老板将他叫到办公室询问项目进展情况。问题出在哪里?欠缺文档欠缺设计,急于编程•13软件危机“非常好”工程师以年轻人的热情回答道,“这个项目远比我想像的简单。我差不多已经完成了75%的任务。老板笑了,说道:“真是太棒了”然后他嘱咐年轻人继续努力工作,准备好一周后再汇报一次工作进度。一周后老板将年轻人叫到办公室,问他说:“现在进度如何?”“一切顺利”年轻人回答说,“但是我遇到了一些小麻烦。我会排除这些困难,很快就可以回到正轨上来。”“你觉得在最后期限之前能否完成?”老板问道。“没有问题”工程师答道。“我差不多已经完成了90%”问题:年轻工程师在整个项目工期内始终停留在90%的进度上,(在别人的帮助下)直到交付期限之后一个月才做完。•14软件危机⑵没有充分的文档资料(documentation)人与人的交流比写程序困难得多。Managers——评价,进程跟踪,......Programmers——与其它程序的通信接口Maintainers——维护•15软件危机⑶软件可靠性(reliability)缺少度量的标准,质量无法保证。如何保证软件产品的质量,是非常复杂困难的问题。特别对于规模庞大的软件。⑷软件难以维护(maintainability)不易升级(evolvability)16软件危机的产生的原因及总结(1)对软件开发成本和进度的估计常常很不准确。拖期,项目管理经验欠缺。(2)用户对“已完成的”软件系统不满意的现象经常发生。模糊的需求、闭门造车、忙于编程,仓促上阵。(3)软件产品的质量往往靠不住。可靠性和质量保证欠缺,缺少测试。(4)软件常常是不可维护的。设计死板,没有整体考虑。•17(5)软件通常没有适当的文档资料。缺少设计资料、难以维护,写文档嫌麻烦。(6)软件成本在计算机系统总成本中所占的比例逐年上升。软件过于庞大,成本过高。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。跟不上计算机和软件技术的发展速度,技术落后。18软件开发付出代价分析根据美国一些软件公司的统计资料,在后期引入一个变动比在早期引入相同变动所需付出的代价高2~3个数量级。图1.1定性地描绘了在不同时期引入一个变动需要付出的代价的变化趋势。维护是极端艰巨复杂的工作,需要花费很大代价。19消除软件危机的办法1、理解软件的概念:软件是程序、数据及相关文档的完整集合。2、应该推广使用在实践中总结出来的开发软件的成功的技术和方法——注意总结和积累3、应该开发和使用更好的软件工具。4、软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。总之,为了解决软件危机,就要引入“软件工程”,既要有技术措施(方法和工具),又要有必要的组织管理措施。20§1.2软件工程所谓软件工程,提倡的是一种软件开发中的系统思想的具体实现,是一门科学,也被称为是软件产业中的“软”科学。软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。它首次出现在1968年NATO(北大西洋公约组织)会议上。主要围绕软件项目,开展有关开发模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化方法等。并且,围绕项目管理提出了费用估算、文档复审等方法和工具。70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要成果有:提出了应用广泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程(CASE)的研究与实践。21软件工程的定义:IEEE:软件工程是开发、运行、维护和修复软件的系统方法FritzBauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法22软件工程的本质特性:1.软件工程关注于大型程序的构造——分析与设计2.软件工程的中心课题是控制复杂性——分解3.软件经常变化——要有准确的需求4.开发软件的效率非常重要——经验技巧5.和谐地合作是开发软件的关键——团队精神6.软件必须有效地支持它的用户——用户在用7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人——具有知识面非常广的领域业务背景,缺乏应用领域的相关知识,是软件开发项目出现问题的常见原因。23软件工程的基本原理:主要有七条基本原理:⑴用分阶段的生命周期计划严格管理项目概要计划里程碑计划项目控制计划产品控制计划验证计划运行维护计划⑵坚持进行阶段评审⑶实行严格的产品控制——基准配置管理(Baselineconfigurationmanagement)•24⑹开发小组的成员应该少而精1+12⑷采用现代程序设计技术⑸结果应能清楚地审查—setstandards⑺承认不断改进软件工程实践的必要性——即不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。25软件工程方法学软件工程三要素:方法、工具和过程方法为软件开发提供了“如何做”的技术工具为软件工程方法提供了自动的或半自动的软件支撑环境软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑传统方法学面向对象方法学261.传统方法学称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。把软件生命周期的全过程依次划分为若干个阶段,前一个阶段是后一个阶段的基础。272.面向对象方法学提出本方法的原因:当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。面向对象方法学4个要点:对象+类+继承+用消息通信优点:简化了软件的开发和维护,提高了软件的可重用性。28§1.3软件生命周期举例:瀑布模型(WaterfallModel)维护开发定义问题定义可行性研究需求分析详细设计编码&单元测试综合&系统测试运行&维护总体设计软件生命周期由上述三个时期组成系统需求必须事先静态地精确定义29问题定义和可行性研究:确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查30需求分析对待开发软件提出的需求进行分析并给出详细的定义编写软件需求说明书或系统功能说明书及初步的系统用户手册提交管理机构评审31设计总体设计—“如何解决问题”可以列出多种解决方案进行比较把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应详细设计—对每个模块要完成的工作进行具体的描述,为源程序编写打下基础编写设计说明书,提交评审。32编码把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的33测试单元测试,查找各模块在功能和结构上存在的问题并加以纠正组装测试,将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用34运行和维护改正性维护运行中发现了软件中的错误需要修正适应性维护为了适应变化了的软件工作环境,需做适当变更完善性维护为了增强软件的功能需做变更35技术审查和管理审查任务:发现技术方面的错误监督项目进度、经费开支、投资回收的前景等。36§1.4软件过程定义:软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常用软件过程模型描述软件过程。广泛使用的4种典型的软件过程模型如下所示:瀑布模型——文档驱动掌握快速原型模型——原型驱动掌握增量模型——构件驱动了解螺旋模型——风险+原型驱动了解371瀑布模型在20世纪80年代之前,是惟一被广泛采用的生命周期模型,现在仍然是软件工程中应用最广泛的过程模型。主要用于描述传统软件工程方法学的软件过程。图1.3实际的瀑布模型特点:脱离用户•38瀑布模型的特点⑴顺序性、依赖性⑵推迟程序的物理实现——按步骤进行⑶质量保证的观点——阶段文档
本文标题:第1章 软件工程学概论
链接地址:https://www.777doc.com/doc-203023 .html