版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程学教程西安邮电大学曹小鹏cxp2760@163.comcaoxp程简介课程名称:软件工程教 材:《SoftwareEngineering》(英)IanSommerville
《软件工程导论》张海藩教学方式:授课+项目讨论+上机实习 课时安排:32+16考试类别:闭卷考试
参考教材:
《软件工程——实践者之路》(原名:SoftwareEngineering–APractitioner’sApproach,SixthEdition),RogerS.Pressman,清华大学出版社2006软件工程学教程陈明科学出版社软件工程实践者的研究方法黄柏素等译机械软件工程邓良松等西安电子科技大学出版社第1章软件工程概述1.1计算机软件概念1.2
软件的发展1.3软件危机与软件问题1.4软件工程与开发准则1.5软件生命周期1.6软件开发模型1.1.1
计算机软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料1.1计算机软件概念1.1.2软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题软件的生产与硬件不同,在它的开发过程中没有明显的制造过程,软件维护困难1.1.2软件的特点(2)软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式软件本身是复杂的,相当多的软件工作涉及到社会因素实际问题的复杂性程序逻辑结构的复杂性软件成本相当昂贵1.1.3软件与硬件的关系硬件的故障率曲线故障率生命初期“磨损”后软件的故障率曲线故障率时间理想曲线实际曲线修改副作用1.1.4软件分类1、按功能进行划分:(1)系统软件:能够控制计算机系统各部件(软硬件)协调、高效地工作和进程处理、资源共享管理等操作系统数据库管理系统设备驱动程序通信处理程序等(2)支撑软件工具软件,它帮助软件开发人员开发自己的软件产品文本编辑程序文件格式化程序磁盘向磁带向数据传输的程序程序库系统支持需求分析、设计、实现、测试和支持管理的软件为特定的应用目的而开发的服务性软件
商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件(3)应用软件类别参加人员数 研制期限源程序行数
微型
1 1~4周0.5k
小型
1 1~6月1k~2k中型
2~5 1~2年5k~50k大型
5~20 2~3年50k~100k甚大型
100~10004~5年
1M(=1000k)极大型
2000~50005~10年1M~10M 2、按软件规模进行划分只是一个人,在几天之内完成的软件。写出的程序不到5百行语句,仅供个人专用。通常这种小题目无需做严格的分析,也不必要有一套完整的设计、测试资料。不过这并不是说可以随便地不讲任何方法地做。事实说明,即使这样小的题目,如果经过一定的分析、系统设计、结构化编码以及有步骤地测试,肯定也是非常有益的。(1)
微型(2)小型一个人半年之内完成的2千行以内的程序。例如,数值计算问题或是数据处理问题就是这种规模的课题。这种程序通常没有与其它程序的接口。但需要按一定的标准化技术、正规的资料书写以及定期的系统审查。只是没有大题目那样严格。(3)中型5个人以内在一年多时间里完成的5千到5万行的程序。这种课题开始出现软件人员之间、软件人员与用户之间的联系、协调的配合关系问题。因而计划、资料书写以及技术审查需要比较严格地进行。这类软件课题比较普遍,许多应用程序和系统程序就是这样的规模。在开发中使用系统的软件工程方法是完全必要的,这对提高软件产品质量和程序人员的工作效率起着重要的作用。(4)大型5至10个人在两年多的时间里完成的5万到10万行的程序。例如编译程序、小型分时系统、应用软件包、实时控制系统等很可能是这种软件。参加工作的软件人员需要按二级管理,例如划分成若干小组,每组5人以下为好。在任务完成过程中,人员调整往往不可避免。因此会出现对新手的培训和逐步熟悉工作的问题。对于这样规模的软件,采用统一的标准,实行严格的审查是绝对必要的。由于软件的规模庞大以及问题的复杂性,往往会在开发的过程中出现一些事先难于做出估计的不测事件。(5)甚大型100至1000人参加用4到5年时间完成的具有100万行程序的软件项目。这种甚大型项目可能会划分成若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。例如,实时处理系统、远程通信系统、多任务系统、大型操作系统、大型数据库管理系统、军事指挥系统通常现有这样的规模。很显然,这类问题没有软件工程方法的支持,它的开发工作是不可想象的。(6)极大型2000人到5000人参加,10年内完成的1000万行以内的程序。这类软件很少见,往往是军事指挥、弹道导弹防御系统。3、按工作方式划分实时处理软件:指在事件或数据产生时立即进行处理分时软件:在多个用户在联机情况下同时要求系统对其进行处理时,系统将处理机时间轮流分配给各用户,使用户感到系统仅为自己服务交互式软件:可通过各种用户界面实现人机通信批处理软件:将一组作业或一批数据按要求的顺序逐个处理,直至全部作业处理完毕(1)项目软件,也称定制软件是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。例如军用防空指挥系统、卫星控制系统的软件就属于这一类。这类项目软件中有的软件带有试验研究性质,项目完成后根据需要可能在此基础上做进一步开发。为取得客户的委托项目,软件开发机构的质量管理、技术实力、开发经验以及履行合同的信誉成为受到重视的问题。3、按服务对象范围划分(2)产品软件是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。这是一些服务于多个目的及多个用户的软件。例如,文字处理软件、财务处理软件、人事管理软件等。由于要参与市场竞争,其功能、使用性能以及培训和售后服务显得尤为重要。1.2软件的发展随着计算机硬件性能的极大提高和计算机体系结构的不断变化,计算机软件系统更加成熟和更为复杂,从而促使计算机软件的角色发生了巨大的变化,其发展历史大致可以分为如图所示的四个阶段。
1.2软件的发展
早期(程序设计阶段): 【时间】:20世纪50年代初期至60年代中期 【特点】:硬件已经通用化,而软件的生产却是个体化。软件产品为专用软件,规模较小,功能单一,开发者即使用者;软件只有程序,无文档;软件设计在人们的头脑中完成,形成了错误观念“软件=程序”。【典型技术】:面向批处理、自定义软件1.2软件的发展
第二阶段(程序系统阶段):【时间】:20世纪60年代中期至70年代末期【特点】:多道程序设计技术、多用户系统、人机交互式技术、实时系统和第一代数据库管理系统的出现,使得计算机应用得到迅速。出现了专门从事软件开发的“软件作坊”,软件作为产品得到了广泛应用。但在软件业空前繁荣的同时,原始的开发与维护方法陷入了极端困境,“软件危机”产生。【典型技术】:多用户、实时、数据库、软件产品1.2软件的发展
第三阶段(软件工程阶段): 【时间】:20世纪70年代中期至80年代中期【特点】:微处理器的出现和广泛应用,使得计算机真正成为大众化的东西。以软件的产品化、系列化、工程化和标准化为特征的软件产业发展起来,软件开发有了可以遵循的软件工程化的设计准则、方法和标准。【典型技术】:分布式系统、广域网和局域网、低成本的硬件、嵌入“智能”1.2软件的发展
第四阶段:【时间】:20世纪80年代中期至今【特点】:计算机的发展不再着重与单台计算机和计算机程序、而是针对计算机和软件的综合应用。由复杂的操作系统控制的PC机、广域网、局域网、Internet,配合以先进的软件应用已经成为标准。面向对象的开发方法在许多领域迅速取代了传统的软件开发方法。【典型技术】:强大的桌面系统、面向对象技术专家系统、人工神经网络、网络计算机1.3软件危机与软件问题1.3.1软件危机软件总是超出预算、落后于进度表,而且不可靠在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件受其自身特点的影响,生产过程不象硬件那样规范,受人的因素和外界影响很大,在软件生产的各阶段都会引入不同程度的错误,造成不能预期完成任务,致使成本上升,甚至导致软件失败1.3.2软件危机的表现(1)软件开发和维护费用急剧上升(2)不重视文档资料(3)产品质量不可靠(4)软件产品成本高于硬件产品(5)供需失配1.3.3软件危机的原因一方面是与软件本身的特点有关;另一方面软件开发和维护的方法不正确:忽视软件开发前期的需求分析;开发过程没有统一、规范方法论的指导;文档资料不齐全;忽视人与人的交流;忽视测试工作,提交给用户的软件质量差;轻视软件的维护。1.4软件工程与开发准则由于认识到软件的设计、实现、维护和传统的工程规则有相同的基础,于是北大西洋公约组织(NATO)于1967年首次提出了“软件工程(SoftwareEngineering)”的概念。关于编制软件与其他工程任务类似的提法,得到了1968年在德国召开的NATO软件工程会议的认可。委员会的结论是,软件工程应使用已有的工程规则的理论和模式,来解决所谓的"软件危机"。软件危机至今仍然困绕着我们,这表明软件生产过程在许多方面和传统的工程相似,但却具有独特的属性和问题。1.4.1软件工程概念基本思想是强调在软件开发过程中应用工程化原则,解决软件的整体质量较低、最后期限和费用没有保证等问题。
Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料IEEE:软件工程是(1)把系统的,规范的,可度量的途径应用于软件开发,运行和维护过程,也就是把工程应用于软件。(2)研究(1)中提到的途径。
软件工程三要素软件工程是一种层次化的技术软件工具为软件工程方法提供了自动的或半自动的软件支撑环境软件工程方法为软件开发提供了“如何做”的技术软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑里程碑的含义:里程碑在项目生命中是一个重要的界标、发展或转折点一般地,使用它来标记项目一个重要部分的完成,它并不代表正在做一个工作,仅指明这一工作已经开始或已经结束软件工程三要素(2)1.4.3软件工程的基本准则1、严格阶段管理有人经统计发现,在不成功的软件项目中有一半左右是由于计划不周造成的,在软件开发与维护的漫长的生命周期中,需要完成许多性质各异的工作。这条基本准则意味着,应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护工作进行管理。1.4.3软件工程的基本准则(2)2、坚持阶段评审
软件的质量保证工作不能等到编码阶段结束之后再进行:第一,大部分错误是在编码之前造成的,例如,根据Boehm
等人的统计,设计错误占软件错误的63%,编码仅占37%;第二,错误发现与改正得越晚,所需付出的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。
1.4.3软件工程的基本准则(3)3、加强产品控制在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的,由于外部环境的变化,相应地改变用户需求是一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求当改变需求时,为了保持软件各个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。1.4.3软件工程的基本准则(4)4、采纳新技术60年代末提出的结构程序设计技术,以后又进一步发展出各种结构分析(SA)与结构设计(SD)技术,
软件生存周期瀑布模型80年代以后的OO程序设计技术,OOA/OOD/UML实践表明,采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率1.4.3软件工程的基本准则(5)5、结果应能清楚地审查软件产品不同于一般的物理产品,它是看不见摸不着的逻辑产品软件开发人员(或开发小组)的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地审查1.4.3软件工程的基本准则(6)6、开发小组的人员应该少而精软件开发小组的组成人员的素质应该好,而人数则不宜过多。开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。素质高的人员的开发效率比素质低的人员的开发效率可能高几倍至几十倍,而且所开发的软件中的错误明显少。此外,随着开发小组人员数目的增加,因为交流情况讨论问题而造成的通信开销也急剧增加。1.5软件生存周期
软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期一般说来,软件生命周期划分为三个时期:计划时期、开发时期、运行时期。计划时期划分为问题定义和可行性研究;开发时期又划分为需求分析、概要设计、详细设计、编码和测试阶段;运行时期主要是在运行中完成各类维护。1.5.1计划时期1.问题定义(要解决的问题是什么?)确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求,系统定义2.可行性研究(对于问题有解决方法吗?)估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划和解决方案,可行性研究报告1.5.2开发时期1.需求分析(为了解决问题,目标系统必须做什么?)对待开发软件提出的需求进行分析并给出详细的定义编写软件需求说明书或系统功能说明书及初步的系统用户手册提交管理机构评审1.5.2开发时期(2)2.概要设计(怎样实现目标系统?)把各项需求转换成软件的体系结构,结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应编写概要设计说明书3.详细设计(怎样具体实现这个系统?)对每个模块要完成的工作进行具体的描述,为源程序编写打下基础编写详细设计说明书1.5.2开发时期(3)4.编码把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的5.测试单元测试,查找各模块在功能和结构上存在的问题并加以纠正组装测试,将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用1.5.3运行时期运行时期的主要工作是维护改正性维护运行中发现了软件中的错误需要修正适应性维护为了适应变化了的软件工作环境,需做适当变更完善性维护为了增强软件的功能需做变更各阶段工作小结阶段关键问题结束标准问题定义问题是什么关于规模和目标的报告书可行性研究有可行的解系统的高层逻辑模型需求分析系统必须做什么,功能系统逻辑模型总体设计概括地说,应该如何解决问题可能解法详细设计怎样具体实现编码规格说明各阶段工作小结(2)阶段关键问题结束标准编码和单元测试正确的程序模块源程序清单,单元测试方案和结果综合测试符合要求的软件综合测试方案和结果,完整一致的软件配置维护持久地满足用户需要的软件完整准确的维护记录1.6软件生存期模型软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架软件开发模型是对软件过程的建模瀑布模型原型模型增量模型螺旋模型1.6.2瀑布模型可行性研究与计划需求分析设计编码运行维护测试定义阶段开发阶段维护阶段1.6.2瀑布模型(2)瀑布模型的特点1.阶段间具有顺序性和依赖性关系顺序性的含义是必须待前一阶段的工作完成之后,才能进行下一阶段的工作。依赖性的含义是前一阶段的输出就是后一阶段的输入,只有前一阶段的输出正确,后一阶段的工作才有可能获得正确的结果。1.6.2瀑布模型(3)2.推迟实现实践表明,编码开始得越早完成开发工作所需要的时间反而越长这是因为,前期阶段的工作没完全做好,就急于考虑程序实现,其结果导致大量返工,有时甚至产生无法弥补的问题,带来严重后果1.6.2瀑布模型(4)3.质量保证各阶段都必须完成规定的文档。完整、正确、合格的文档不仅是软件开发时期各类人员之间相互通信的媒介,也是软件维护的重要依据各阶段结束前都要对所完成的文档进行评审,以便及时发现问题,改正错误1.6.2瀑布模型(5)瀑布模型的优点“线性”是人们最容易掌握并能熟练应用的思想方法。当人们碰到一个复杂的“非线性”问题时,总是千方百计地将其分解或转化为一系列简单的线性问题,然后逐个解决。一个软件系统的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式来实现。线性是一种简洁,简洁就是美。领会线性的精神,不要呆板地套用线性模型的外表,而应该用活它。例如增量模型实质就是分段的线性模型,螺旋模型则是接连的弯曲了的线性模型,在其它模型中也能够找到线性模型的影子。1.6.2瀑布模型(6)瀑布模型的缺点(1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量(2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险(3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果1.6.3快速原型模型由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求第二次则在此基础上获得较为满意的软件产品需求分析原型开发与建模原型评价系统设计系统实现用户反馈1.6.4增量模型在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干个构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。1.6.4增量模型(2)在使用增量模型时,第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。1.6.4增量模型(3)例如使用增量模型开发字处理软件。可以考虑
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河北省保定市定州市2025-2026学年三年级上学期期末质量监测语文试卷(含答案)
- 卫星通联题目及答案
- 激励同学的演讲稿3分钟5篇
- 2022~2023高职单招考试题库及答案解析第8期
- 首钢安全监护人考试试题及答案
- 人工技能原理考试题库及答案
- 小儿肺炎患儿的心理护理与家属支持
- 能源安全管理员培训课件
- 2026 年初中英语《书面表达》专项练习与答案 (100 题)
- 2026年深圳中考语文暑假提分特训试卷(附答案可下载)
- 000现行有效的国铁集团技术标准目录(截止2024-12-31、共1240项)
- 2025年及未来5年中国三文鱼行业市场前景预测及投资战略研究报告
- 人工智能在射频电路中的应用-洞察及研究
- (正式版)DB65∕T 3997-2017 《油气田钻井固体废物综合利用污染控制要求》
- 小学科学实验课程活动设计
- 2024-2025学年四川省广元市苍溪县九年级(上)期末数学试卷(含答案)
- T-CBDA 82-2024 家装防水防潮与渗漏修缮技术规程
- 基于灰色模型下的经济发展生育意愿分析与预测
- 肠道屏障修复研究-洞察及研究
- 感染性心内膜炎护理查房
- 导管相关皮肤损伤患者的护理 2
评论
0/150
提交评论