第1章_软件工程学概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件工程平时成绩(出席和作业):30%考试:70%课程介绍学习目的:目的在于培养学生用工程化的原理及方法开发软件系统,把专业知识同实际项目结合起来,为将来从事计算机软件的开发及应用维护工作打下坚实的基础。对于培养学生的软件素质,提高学生的软件开发能力与软件项目管理能力具有重要的意义。1.1软件危机1.2软件工程1.3软件生命周期1.4软件过程第1章软件工程学概述第1章软件工程学概述软件的定义软件(Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program),数据(Data)及其相关文档(Document)的完整集合。软件=程序+数据+文档程序=算法+数据结构第1章软件工程学概述程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料面向批处理有限的分布自定义软件初期多用户实时数据库软件产品第二阶段分布式系统嵌入“智能”低成本硬件消费者的影响第三阶段强大的桌面系统面向多项技术专家系统人工神经网络并行计算网络计算机第四阶段1950年1960年1970年1980年1990年2000年计算机软件发展的4个阶段1.1.1软件危机的介绍软件危机(软件萧条、软件困扰):是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有软件都不同程度地存在这些问题。软件危机包含下述两方面的问题:如何开发软件,满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机的典型表现:(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有适当的文档资料;(6)软件成本在计算机系统总成本中所占的比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。1.1.2产生软件危机的原因(1)与软件本身的特点有关软件是逻辑部件。软件不会被“用坏”,如果发现了错误,很可能是开发时期引入。软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。(2)与软件开发与维护的方法不正确有关忽视软件需求分析的重要性。对用户要求没有完整准确的认识就匆忙着手编写程序。越早开始写程序,完成它所需要用的时间往往越长。认为软件开发就是写程序并设法使之运行。程序只是完整的软件产品的一个组成部分。一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。在软件开发的不同阶段进行修改需要付出的代价是很不相同的,见图1.1。图1.1引入同一变动付出的代价随时间变化的趋势轻视软件维护。维护是极端艰巨复杂的工作,需要花费很大代价。软件维护的费用占软件总费用的55%~70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。1.1.3消除软件危机的途径对计算机软件有正确的认识。认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。应该推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。应该开发和使用更好的软件工具。总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。1.2软件工程1.2.1软件工程的介绍软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。软件工程的代表性定义:FritzBauer:软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。IEEE:软件工程是:(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)研究(1)中所述的方法。计算机科学技术百科全书:软件工程是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法制作软件的工程。软件工程的划代(无公认的定义):①1970年末之前,传统软件工程,瀑布模型。②1980年后,面向对象软件工程,面向对象语言以Smalltalk-80的出现为标志。③1984年后,软件过程工程,掀起软件过程运动,1991年出现的CMM是典型代表。④1990年后,构件工程,基于构件的软件开发方法,可重用的构件组装成新系统。软件工程的本质特性:软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品1.2.2软件工程的基本原理用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性1.2.3软件工程方法学软件工程包括技术和管理两方面的内容。管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。技术(软件工程方法学):通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。软件工程方法学3要素:方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境;如,CASE(Computer-AidedSoftwareEngineering)工具过程:需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.传统方法学(生命周期方法学或结构化范型)——强调自顶向下采用结构化技术来完成软件;划分为若干个阶段,然后顺序地完成每个阶段的任务;每个阶段的任务相对独立,而且比较简单,降低了整个软件开发工程的困难程度;前一个阶段是后一个阶段的前提和基础,而后一阶段提出的解法更具体,细节更多;每个阶段结束前必须从技术和管理两方面对这个阶段的开发成果进行严格的检查,通过之后这个阶段才算结束;保证质量,提高可维护性;当软件规模庞大,或者的需求模糊或随时间而变化时,传统方法学往往不成功;维护起来仍然很困难。2.面向对象方法学——强调主动地多次反复迭代面向对象方法:把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。面向对象方法学4个要点:对象(object):融合了数据及在数据上的操作行为。类(class):类是对具有相同数据和相同操作的一组相似对象的定义。继承:按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。消息:对象彼此间仅能通过发送消息互相联系。面向对象方法学的优点:面向对象方法学的尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程,保证了在各项开发活动之间的平滑过渡。促进了软件重用。最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,降低了复杂性,提高了可理解性,简化了开发和维护工作。1.3软件生命周期三个时期八个阶段:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。三个时期:八个阶段:软件生命周期软件定义软件开发软件维护问题定义可行性研究需求分析概要设计详细设计编码和单元测试综合测试运行维护系统设计系统实现1.问题定义任务:问题是什么通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告。经过讨论和必要的修改之后这份报告应该得到客户的确认。结果:关于系统规模和目标的报告书2.可行性研究任务:有可行的解吗系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程。研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。结果:系统的高层逻辑模型(数据流图、成本效益分析)可行性论证报告(立即进行/推迟进行/不能或不值得进行)3.需求分析任务:必须做什么主要是确定目标系统必须具备哪些功能。系统分析员必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。结果:系统的逻辑模型(数据流图、数据字典、简要的算法描述)用规格说明书准确地记录对目标系统的需求4.总体设计任务:如何解决已提出的问题设计出实现目标系统的几种可能的方案(低、中、高成本)。用适当的表达工具描述每种方案,分析优缺点,推荐一个最佳方案,制定出实现最佳方案的详细计划。设计程序的体系结构。结果:可能的解法(系统流程图、成本效益分析)推荐的系统体系结构(层次图或结构图)5.详细设计任务:怎样具体实现该系统详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。结果:每个模块的算法和数据结构(程序流程图、PAD图、N-S图等)。6.编码和单元测试任务:得到正确的程序模块选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序;并且仔细测试编写出的每一个模块。结果:代码和测试报告7.综合测试任务:得到符合要求的软件通过集成测试、验收测试、现场测试、平行运行等方法对目标系统进一步测试检验。通过对软件测试结果的分析可以预测软件的可靠性;反之,根据对软件可靠性的要求,也可以决定测试和调试过程什么时候可以结束。结果:测试计划、详细测试方案以及实际测试结果完整一致的软件配置8.软件维护任务:使系统持久地满足用户的需要改正性维护,诊断和改正在使用过程中发现的软件错误;适应性维护,修改软件以适应环境的变化;完善性维护,根据用户的要求改进或扩充软件;预防性维护,修改软件为将来的维护活动做准备。每一项维护活动实质上是经历了一次压缩和简化了的软件定义和开发的全过程。结果:完整准确的维护记录各类维护工作量所占比例维护工作量在软件生命周期所占比例完善性维护50%~66%改正性维护17%~21%适应性维护18%~25%预防性维护4%维护60%以上1.4软件过程软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。为获得高质量的软件产品,软件过程必须科学、有效。传统的瀑布模型实际的瀑布模型1.4.1瀑布模型瀑布模型的特点:1.阶段间具有顺序性和依赖性前一阶段的工作完成之后,才能开始后一阶段的工作;前一阶段的输出文档就是后一阶段的输入文档。2.推迟实现的观点对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。3.质量保证的观点每个阶段都必须完成规定的文档,是“文档驱动”的模型;每个阶段结束前都要对所完成的文档进行评审,尽早发现问题,改正错误。瀑布模型的优点:可强迫开发人员采用规范的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。瀑布模型的缺点:只能通过文档了解产品,不经过实践的需求是不切实际的。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成瀑布模型适用于:需求是预知的;软件实现方法是成熟的;项目周期较短。快速原型模型1.4.2快速原型模型快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型模型的特点:快速原型模型不带反馈环,软件产品的开发基本上是

1 / 60
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功