软件项目开发综合实践1.ppt_第1页
软件项目开发综合实践1.ppt_第2页
软件项目开发综合实践1.ppt_第3页
软件项目开发综合实践1.ppt_第4页
软件项目开发综合实践1.ppt_第5页
已阅读5页,还剩159页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件项目开发综合实践,主讲人黄钢,chapter_1,2,教材:软件工程案例教程第2版韩万江等编著机械工业出版社参考书籍:Java项目开发案例全程实录明日科技清华大学出版社A项目开发案例全程实录明日科技清华大学出版社,1考核方式:大作业2成绩评定:总评成绩构成:平时考核(50);期中考核(0);期末考核(50)平时成绩构成:考勤考纪(20);作业(20);实践环节(60),CompanyLogo,2020年5月16日星期六,物电学院,4,第1章概论,1软件工程学的几个基本概念一、软件与特点主要介绍软件与软件工程的概念、软件工程产生的背景1软件及其组成软件是计算机系统中与硬件对等的一部分,是程序及相关文档资料的集合。因此,软件有两大组成要素:,2020年5月16日星期六,物电学院,5,第1章概论,一是存储介质上的程序,它们是可执行的并可产生用户需要的结果;二是相关的文档资料,它们既是软件开发过程中的质量保证,又是软件使用与维护的依据。两大组成要素详述如下。,2020年5月16日星期六,物电学院,6,第1章概论,(1)可执行部分应用程序是面向用户的解决各种特定实际问题的程序。如工程管理或科学计算程序、信息管理程序及实时监控程序等。系统程序是面向计算机系统的为应用程序服务的程序的综合,它们支撑应用程序的运行。如操作系统。,2020年5月16日星期六,物电学院,7,第1章概论,(2)不可执行部分面向用户的文档告诉用户如何使用、维护和修改程序。如用户手册、操作手册及程序维护手册等。面向开发方的文档提供软件开发过程的质量保证。如系统可行性论证报告、软件计划说明书、需求规格说明书、数据库设计说明书,以及侧试计划、测试分析报告等。项目越大,与其相关的文档资料也越重要,从以后的介绍中可以看出,程序编写在整个项目的开发过程中只占很少的一部分。,2020年5月16日星期六,物电学院,8,第1章概论,2软件的特点(1)软件是一种逻辑产品,它与物质产品有很大的区别。软件产品是看不见摸不着的,因而具有无形性。它是脑力劳动的结晶,总以程序和文档的形式出现,保存在计算机存储器的磁盘和光盘介质上,通过计算机的运行才能体现它的功能和作用。,2020年5月16日星期六,物电学院,9,第1章概论,(2)软件产品的生产主要是研制。其成本主要体现在软件的开发和研制上,软件开发研究完成后,通过复制就产生了大量软件产品。(3)软件产品不会用坏,不存在磨损、消耗问题。(4)软件产品的生产主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做”的。,2020年5月16日星期六,物电学院,10,第1章概论,(5)软件的维护与硬件不同软件从被提交给用户使用开始。只存在维护问题,而不存在使用过程中被“用坏”的问题。而硬件则不同,用户购买到硬件并开始使用硬件后,随着时间的过去,硬件会因为各种原因(如灰尘、振动、高温、磨损等)造成某些部件的失效,从而导致硬件被“用坏”了。软件的使用过程中出错的可能性与硬件不同。如图是软件使用过程中随时间变化的错误率曲线的示意图。,2020年5月16日星期六,物电学院,11,第1章概论,(6)软件的开发和运行常常受到计算机系统的限制软件的开发和运行对计算机系统有着不同程度的依赖性,软件不能完全摆脱硬件单独活动。有的软件这种依赖性大些,常常为某个型号的计算机所专用。有的软件依赖某个操作系统。为了解除这种依赖性,在软件开发中提出了软件移植的问题。,2020年5月16日星期六,物电学院,12,第1章概论,(7)软件费用不断增加,软件成本相当昂贵。软件的研制工作需要投放大量的、复杂的、高强度的脑力劳动,它的成本非常高。在基于计算机的系统中,软件的开销大大超过硬件的开销,如图所示。澄清:认为“软件开发就是写程序并设法使之运行”的错误的认识,2020年5月16日星期六,物电学院,13,第1章概论,软件在开发时期首先需要对软件进行设计(通常又分为概要设计和详细设计两个阶段),然后才能进入编写程序的阶段,程序编写完之后还必须经过大量的测试工作(需要的工作量通常占软件开发全部工作量的40%50%)才能最终交付使用。所以,编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的10%20%。,2020年5月16日星期六,物电学院,14,第1章概论,二、软件危机1.软件的发展自从20世纪40年代第一台计算机诞生以来,随着计算机科学与工程的发展,计算机软件技术的发展大体可以分为程序设计,软件系统与软件工程三个阶段。,2020年5月16日星期六,物电学院,15,第1章概论,2.软件危机20世纪60年代,伴随着计算机系统制造技术的进步,计算机应用对于软件的需求剧增。软件规模功能日益复杂,需求急剧增大。计算机软件开发从早期以个人活动为主的手作坊方式逐步转到以程序员组形式为代表的集体开发为主:在这转换过程中,出现了软件小产与市场需求极不适应的严重现象软件危机。,2020年5月16日星期六,物电学院,16,第1章概论,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。软件危机主要有以下一些典型表现。P2,2020年5月16日星期六,物电学院,17,第1章概论,(1)软件生产不能满足日益增长的软件需求,软件生产率远低于硬件生产率和计算机应用的增长,出现丁软件供不匝求的局面。更为严重的是软件生产效率随软件规模的增加和软件复杂性的提高而急剧下降;软件产品的“供不应求”使得计算机硬件的巨大潜力远未发挥。,2020年5月16日星期六,物电学院,18,第1章概论,(2)软件生产率随软件规模与复杂性提高而下降,智力密集造成的人力成本增加,导致软件成本在计算机系统成本构成中比例急剧上升。早期的计算机系统中软件成本通常不超过系统总成本的20。到70年代约占40一60,80年代中以来,发达国家许多软件产品成本占11算机系统总成本构成的90以上。,2020年5月16日星期六,物电学院,19,第1章概论,(3)软件开发进度与成本失控,很难估计软件开发的成本与进度,通常是预算成倍突破,项目计划进度一再延期。软件开发单位为赶进度,控制成本往往只有降低软件质量:软件开发陷入成本居高不下,软件质量无保证,用户不满,开发单位信誉降低的怪圈中。,2020年5月16日星期六,物电学院,20,第1章概论,(4)软件系统实现的功能与实际需求不符。软件开发人员对用户需求缺乏深入的理解往往急于编程。闭门造车,最后实现的系统与用户需求相去太远。,2020年5月16日星期六,物电学院,21,第1章概论,(5)交付的软件难以维护。程序中的错误很难改正,要想使软件适应新的运行环境几乎不可能,软件使用过程中不能增加用户需要的新功能。“可重复使用的软件”还是个人们努力追求的目标,大量的软件人员在重复开发基本类似的软件。,2020年5月16日星期六,物电学院,22,第1章概论,(6)软件文档配置没有受到足够的重视。软件文档包括开发过程各阶段的说明书,数据词典,程序清单,软件使用、维护手册,软件测试报告及测试用例。这些软件文档的不规范,不健全是造成软件开发进程成本不可控制,软件维护、管理、交流困难的重要原因。软件质量缺乏度量依据。,2020年5月16日星期六,物电学院,23,第1章概论,软件危机的表现实际上是软件开发与维护中存在的具有共性的种种问题。近30年来,为解决这些问题,计算机科学家和软件产业从业者已经做出了巨大的努力。但许多问题远未解决,有些问题的严重性得到部分缓解,新的问题又不断出现。,2020年5月16日星期六,物电学院,24,第1章概论,3.产生软件危机的原因软件危机产生的原因可以从两个方面加以认识:一是软件产品的固有特性;二是软件专业人员自身的缺陷。,2020年5月16日星期六,物电学院,25,第1章概论,软件的不可见性是软件产品的固有特点之一。与硬件产品不同,软件是计算机系统中的逻辑部件。软件开发过程中,在程序代码运行之前,开发工作的质量、进度难以度量。最终软件产品的使用价值是在软件运行过程中体现出来的。而且软件运行没有“磨损”,这使得软件产品可靠性难以度量,故障隐蔽性强。对原有故障的修改可能导致新的错误。,2020年5月16日星期六,物电学院,26,第1章概论,软件产品的固有特点之二是软件的规模与逻辑复杂性。现代软件产品往往规模庞大,逻辑结构十分复杂:随着计算机应用的日益广泛,需要开发的软件规模日益庞大,软件结构也日益复杂。1968年美国航空公司订票系统达到30万条指令;IBM360OS第16版达到100万条指令,花了5000个人年;1973年美国阿波罗计划达到1千万条指令。,2020年5月16日星期六,物电学院,27,第1章概论,从软件开发管理角度看,软件生产率常随软件规模和复杂性的增大而下降。也就是说,如果个程序员一年可以开发1万条代码,则一个400万条代码的软件系统绝对不是集中400个人在一年内可以完成的,软件规模与其逻辑复杂度通常并不是线性比关系。,2020年5月16日星期六,物电学院,28,第1章概论,当多人合作完成一个系统时,作为一个工程项目,参与人员的组织与信息交流、工作质量与进度控制等更是一个极复杂的问题。就目前的软件技术水平而言,软件开发工作量随软件规模呈几何级数上升。,2020年5月16日星期六,物电学院,29,开发工具落后,生产率提高缓慢。软件开发工具过于原始,没有出现高效率的开发工具,因而软件生产率低下。在19601980年期间,计算机硬件的生产由于采用计算机辅助设计、自动生产线等先进工具,使硬件生产率提高了100万倍,而软件生产率只提高了2倍,相差十分悬殊。,2020年5月16日星期六,物电学院,30,第1章概论,软件开发人员自身的缺陷主要包括:相当数量的软件开发人员没有掌握正确的软件开发方法学,对于软件开发与维护存在许多模糊、错误认识。对于软件开发的典型错误队识有:只要初步了解总目标,就可以编写程序细节在编程中解决;软件更改容易,因此用户需求可以在程序设计过程中逐步补充;程序是软件的主要部分,文档是可有可无的;,2020年5月16日星期六,物电学院,31,第1章概论,软件开发依赖于开发人员的创造力与想象力,程序设计是一门艺术,因此软件设计无章可循;一旦软件能够运行,维护是不需要的,或者说是极少的。,2020年5月16日星期六,物电学院,32,第1章概论,这些错误认识与方法的形成可以归于软件人员没有掌握恰当的工程化方法,忽视问题定义与分析,急于求成,闭门造车。一个软件错误修改的代价随该错误发生与修改滞后的时间关系极大。一个早期发生的错误修改越晚,代价越大(如图1所示)。事实上,许多软件工程项目失败的主要原因就是对问题定义、用户要求没有认真的分析、在没有弄清用户到底要求什么时便开始编程。这如同一个大厦的建立没有地基,最终必然垮台。,2020年5月16日星期六,物电学院,33,第1章概论,4.消除软件危机的途径P4为了消除软件危机,首先应该对计算机软件有一个正确的认识。应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。,2020年5月16日星期六,物电学院,34,第1章概论,三、软件工程为了克服软件危机,人们从其他产业的工程化生产得到启示,于是在1968年北大西洋公约组织的工作会议上首先提出“软件工程”的概念,提出要用工程化的思想来开发软件。从此,软件生产进入了软件工程时代。,2020年5月16日星期六,物电学院,35,第1章概论,1软件工程的定义软件工程是用科学知识和技术原理来定义、开发、维护软件的一门学科。该定义说明了软件工程是计算机科学中的一个分支,其主要思想是在软件生产中用工程化的方法代替传统手工方法。工程化的方法借用了传统的工程设计原理的基本思想,采用了若干科学的、现代化的方法技术来开发软件。这种工程化的思想(软件工程的基本原理)贯穿到需求分析、设计、实现,直到维护的整个过程。,2020年5月16日星期六,物电学院,36,第1章概论,2软件工程的性质软件工程是涉及计算机科学、工程科学、管理科学、数学等领域的一门综合性的交叉学科计算机科学中的研究成果均可用于软件工程,但计算机科学着重于原理和理论,而软件工程着重于如何建造一个软件系统。,2020年5月16日星期六,物电学院,37,第1章概论,软件工程要用工程科学中的观点来进行费用估算、制定进度、制定计划和方案;要用管理科学中的方法和原理进行软件生产的管理;要用数学的方法建立软件开发中的各种模型和各种算法,如可靠性模型,明用户需求的形式化模型等。,2020年5月16日星期六,物电学院,38,第1章概论,3软件工程的目标软件工程是一门工程性学科,目的是成功地建造一个大型软件系统。,所谓成功,是要达到以下几个目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按进完成开发任务,及进交付使用;开发的软件可靠性高。,2020年5月16日星期六,物电学院,39,第1章概论,4软件工程的内容软件工程研究的主要内容是指软件开发技术和软件开发管理两个方面。在软件开发技术中,它主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,它主要是研究软件管理学、软件经济学和软件心理学等。,2020年5月16日星期六,物电学院,40,第1章概论,5软件工程面临的问题软件工程有许多需要解决的棘手问题,如软件费用、软件可靠性、软件可维护性、软件生产率和软件重用等。,chapter_1,41,软件项目过程,顾客,顾客,需求,满意,产品,输入,输出,产品实现,?,chapter_1,42,软件工程三段论,软件开发,项目管理,过程改进,chapter_1,43,软件开发路线图,chapter_1,44,软件项目管理,管理过程是项目管理者规划软件开发、控制软件开发的过程,相当于生产线上的管理过程,管理过程是伴随开发过程进行的过程。,chapter_1,45,软件项目管理路线图,chapter_1,46,软件过程改进,过程改进相当于对软件开发过程和软件管理过程的“工艺流程”进行管理和改进,如果没有好的工艺生产不出好的产品,它包括对开发过程和管理过程的定义和改进。,chapter_1,47,软件过程改进路线图,2020年5月16日星期六,物电学院,48,第1章概论,2软件生命(生存)周期软件生存周期是借用工程中产品生存周期的概念而得来的。引入软件生存周期概念,对于软件生产的管理、进度控制有着非常重要的意义,可使软件生产有相应的模式、相应的流程、相应的工序和步骤。,2020年5月16日星期六,物电学院,49,第1章概论,软件生存周期是指一个软件从提出开发要求开始直到该软件报废为止的整个时期。把整个生存周期划分为若干阶段,使得每个阶段有明确的任务,把规模大、结构复杂和管理复杂的软件开发变得容易控制和管理。,2020年5月16日星期六,物电学院,50,第1章概论,软件生存周期的各阶段有不同的划分。软件规模、种类、开发方式、开发环境以及开发使用的方法都影响软件生存周期的划分。在划分软件生存周期的阶段时,应遵循的基本原则是各阶段的任务应尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件项目开发的组织管理。,2020年5月16日星期六,物电学院,51,第1章概论,通常,软件生存周期包括问题定义、可行性分析和项目开发计划、需求分析、概要(总体)设计、详细设计、编码、测试(单元和综合)、维护等活动(P12-14),可以将这些活动以适当方式分配到不同阶段去完成。,2020年5月16日星期六,物电学院,52,第1章概论,3软件生存周期模型根据软件生产工程化的需要,生存周期的划分也有所不同,从而形成了不同的软件生存周期模型,或称软件开发模型。目前有若干种软件生存周期模型,如瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。,2020年5月16日星期六,物电学院,53,第1章概论,一、瀑布模型瀑布模型遵循软件生存周期的划分,明确规定每个阶段的任务。各阶段的工作顺序展开:恰如奔流不息逐级而下的瀑布,如图12所示。,2020年5月16日星期六,物电学院,54,第1章概论,瀑布模型的特点(1)软件生存周期的顺序性。只有前一阶段工作完成以后,后一阶段的工作才能开始,前一阶段的输出文档,就是后一阶段的输入文档。只有前一阶段有正确的输出,后一阶段才可能有正确的结果。如果在生存周期的某一阶段出现了错误,往往要追溯到在它之前的一些阶段。瀑布模型开发适合于在软件需求比较明确,开发技术比较成熟,工程管理比较严格的场合下使用。,2020年5月16日星期六,物电学院,55,第1章概论,(2)尽可能推迟软件的编码。程序设计也称为编码。实践表明,大、中型软件编码开始得越早,完成所需的时间反而越长。瀑布模型在编码之前安排了需求分析、总体设计、详细设计等阶段,从而把逻辑设计和编码清楚地划分开来,尽可能推迟程序编码阶段。,2020年5月16日星期六,物电学院,56,第1章概论,(3)保证质量。为了保证质量,瀑布模型软件开发在每个阶段都要完成规定的文档,每个阶段都要对已完成的文档进行复审,以便及早发现隐患,排除故障。本书以瀑布模型为典型开发模型,介绍各阶段工作的具体方法、步骤和工具,其他模型可以参照执行。,chapter_1,57,WaterFallmodel适合的项目,在项目开始前,项目的需求很明确在项目开始前,解决方案也很明确类似的项目如:公司的财务系统库存管理系统短期项目,2020年5月16日星期六,物电学院,58,第1章概论,瀑布模型的局限性对于当前的大型软件项目,特别是应用软件项目,在开发前期用户常常对系统只有一个模糊的想法,很难明确确定和表达对系统的全面要求。经过详细的要求定义,尽管可得到一份较好的需求说明,但却很难期望该需求说明能将系统的一切都描述得完整、准确、一致并与实际环境相符,,2020年5月16日星期六,物电学院,59,第1章概论,很难通过它在逻辑上推断出系统的运行效果,并以此达到各类人员对系统的共同理解。因此,要保证每个阶段特别是定义阶段是正确的、完整的。这是属于理想情况,实际上是做不到或很难做到的。,2020年5月16日星期六,物电学院,60,第1章概论,作为整体开发的瀑布模型,由于不支持软件产品的演化,对开发过程中的一些很难发现的错误只有在最终产品运行时才能发现。瀑布模型缺乏对付变化的机制,所以最终产品将难以维护。20多年来瀑布模型得到了广泛的应用。它在消除非结构化软件、软件的复杂性、促进软件开发工程化方面起了很大作用。,2020年5月16日星期六,物电学院,61,第1章概论,但是,瀑布模型在大量的软件开发实践中也逐渐暴露出它的严重缺点。它是一种理想的线性开发模式,缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题。这些缺点对软件开发带来了严重影响,最终可能导致开发出的软件并不是用户真正需要的软件,并且这一点在开发过程完成后才能发现,已为时太晚。,2020年5月16日星期六,物电学院,62,第1章概论,二、快速原型模型所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。如图1.4所示,chapter_1,63,Prototype模型适合的项目,在项目开始前,项目的需求不明确需要减少项目需求的不确定性类似的项目如:确定显示界面第一次开发的产品,验证可行性,2020年5月16日星期六,物电学院,64,第1章概论,三、增量模型瀑布模型是一种整体开发模型。在开发过程中,用户看不到软件是什么样子,只有开发完成后,整个软件才全部展现现在用户面前。这时如果用户发现有不满意的地方,为时已晚。,2020年5月16日星期六,物电学院,65,第1章概论,增量模型是一种非整体开发的模型。软件在该模型中是“逐渐”开发出来的,开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。或者先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。增量模型如图所示。,chapter_1,66,IncrementalModel适合的项目,项目开始,明确了需求的大部分,但是需求可能会发生变化对于市场和用户把握不是很准,需要逐步了解对于有庞大和复杂功能的系统进行功能改进,就需要一步一步实施的。增量模型实例,2020年5月16日星期六,物电学院,67,第1章概论,四、螺旋模型(SpiralModel,SM)瀑布模型要求在软件开发的初期就完全确定软件的需求,这在很多情况下往往是做不到的。螺旋模型试图克服瀑布模型的这一不足。SM把软件开发过程安排为逐步细化的螺旋周期序列,每经历一个周期,系统就细化和完善一些。SM每一蛹旋周期由下列6个步骤组成(见图15)。,chapter_1,68,SpiralModel,螺旋模型沿着螺线旋转,在四个象限上分别表达了四个方面的活动,即:制定计划确定软件目标,需求和选定实施方案,弄清项目开发的限制条件风险分析评估所选方案,考虑如何识别和消除风险实施工程实施软件开发,编码,测试等客户评估评价开发工作,提出修正建议,规划下期任务,chapter_1,69,SpiralModel适合的项目,风险是主要的制约因素不确定因素和风险限制了项目进度用户对自己的需求也不是很明确需要对一些基本的概念进行验证可能发生一些重大的变更项目规模很大项目中采用了新技术实例,2020年5月16日星期六,物电学院,70,第1章概论,2020年5月16日星期六,物电学院,71,第1章概论,2020年5月16日星期六,物电学院,72,第1章概论,2020年5月16日星期六,物电学院,73,第1章概论,2020年5月16日星期六,物电学院,74,第1章概论,2020年5月16日星期六,物电学院,75,第1章概论,2020年5月16日星期六,物电学院,76,第1章概论,2020年5月16日星期六,物电学院,77,第1章概论,2020年5月16日星期六,物电学院,78,第1章概论,2020年5月16日星期六,物电学院,79,第1章概论,2020年5月16日星期六,物电学院,80,第1章概论,2020年5月16日星期六,物电学院,81,第1章概论,2020年5月16日星期六,物电学院,82,第1章概论,2020年5月16日星期六,物电学院,83,第1章概论,2020年5月16日星期六,物电学院,84,第1章概论,2020年5月16日星期六,物电学院,85,第1章概论,2020年5月16日星期六,物电学院,86,第1章概论,2020年5月16日星期六,物电学院,87,第1章概论,2020年5月16日星期六,物电学院,88,第1章概论,2020年5月16日星期六,物电学院,89,第1章概论,2020年5月16日星期六,物电学院,90,第1章概论,2020年5月16日星期六,物电学院,91,第1章概论,2020年5月16日星期六,物电学院,92,第1章概论,2020年5月16日星期六,物电学院,93,第1章概论,2020年5月16日星期六,物电学院,94,软件使用过程中随时间变化的错误率曲线,2020年5月16日星期六,物电学院,95,软件和硬件成本对比,2020年5月16日星期六,物电学院,96,程序设计阶段,程序设N阶段:60年代初以前,计算机软件是计算机系统硬件的附属物。那时人们认为软件就是系统或者用户程序。所谓系统程序主要指附着于硬件的输人输出例程库和程序调试器等简单的系统维护工具程序。所谓用户程序通常是为求解某个特定科学、工程计算或者某个具体数据处理要求的单一程序。这些程序规模不大,结构简单,功能单一,许多情况下是谁编制谁使用程序设计活动高度个人化、技艺化。,2020年5月16日星期六,物电学院,97,软件系统阶段,软件系统阶段:从60年代到70年代初,计算机经历了从电子管到晶体管,到集成电路的跃迁;为计算机技术能够在经济、军事发展的关键领域中应用提供了坚实的物质基础。随着硬件技术的发展,计算机软件规模日益增大,其结构、功能越来越复杂。计算机高级语言大量出现;操作系统引人了多道程序、多用户分时与实时处理概念;数据库系统开始出现。大型商业金融数据处理大型企业生产管理与过程控制,以军备竞赛、空间科学为代表所要求的数据处理、复杂计算、控制系统,这些都要求装备大型复杂的计算机系统。这些计算机系统不仅要求最新的计算机硬件配置,同时也要求“大程序系统”为特征的软件支持。,2020年5月16日星期六,物电学院,98,软件系统阶段,“大程序系统”需求的急剧增长使软件技术从方法、开发效串等方面远不能适应。随着软件需求的规模、数量剧增和交付要求迫切,“大程序系统设计”已经成为工程项目,其开发过程要求多人参与,分工协作,严密组织。同时程序设计与使用逐步分离,软件开发开始专业化,“大程序设计”再也不是个人的技艺活动了。软件开发的组织要求,应用需求对软件系统质量、可靠性的要求与程序设计个体化,非物化特征形成尖锐矛盾,出现了严重的”软件危机”。,2020年5月16日星期六,物电学院,99,软件系统阶段,整个60年代,计算机科学家围绕着程序设计方法,软件开发模型,软件开发支持工具与环境,软件开发方法学开展了范围广泛的研究。为克服软件危机,就若干问题进行了深入讨论并取得如下主要成果:,2020年5月16日星期六,物电学院,100,软件系统阶段,提出了结构化设计方法学并设计了以PMd语言为代表的一批结构化程序设计语言;提出了软件生命周期概念和软件开发的瀑布型模型;明确了文档是软件产品的组成部分,对软件开发各阶段的文档规格进行了初步规范;提出了软件可靠性模型,质量控制的基本概念;开发了一些支持工具软件。1968年北大西洋公约组织有关计算机科学的一次国际会议上正式使用了“软件工程”这个名词,正式宣告软件工程这一新兴工程学科的诞生。,2020年5月16日星期六,物电学院,101,软件工程阶段,从70年代初至今,随着超人规模集成电路技术的迅猛发展,微型计算机的出现,计算机应用技术已经深入到社会生活的各个领域。在这阶段,软件开发逐渐专业化。以软件产品系列化工程化,标淮化为特征的软件产业正在发展为2l世纪知识经济的支柱产业之一。跨国大型软件公司的出现,软件产品不再依附于硬件,软件工程规范的标准化趋势,软件复用与软件生产管理技术的研究与实践面向对象方法学的发展等,使得软件工程学在解决软件危机问题的过程中不断地发展、成熟,共主要成果包括实现丁以C+为代表的面向对象的语言和软件开发环境系统,计算机辅助软件工程(CASE)的研究与实践,各类只有一定自动化程度的CASE产品的出现等。,2020年5月16日星期六,物电学院,102,图1错误修改的代价,2020年5月16日星期六,物电学院,103,软件工程的基本原理,用分阶段的生命周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性,2020年5月16日星期六,物电学院,104,软件费用,由于软件生产基本上仍处于手工状态,软件是知识高度密集的技术的综合产物,人力资源远远不能适应这种迅速增长的软件社会要求,所以软件费用上升的势头必然还将继续下去。,2020年5月16日星期六,物电学院,105,软件可靠性,软件可靠性是指软件系统能否在既定的环境条件下运行燕实现所期望的结果。在软件开发中,通常要花费40%的代价进行测试和排错,即使这样还不能保证以后不再发生错误,为了提高软件可靠性,就要付出足够的代价。,2020年5月16日星期六,物电学院,106,软件可维护性,统计数据表明,软件的维护费用占整个软件系统费用的2/3,而软件开发费用只占1/3。软件维护之所以有如此大的花费,是因为已经运行的软件还需排除隐含的错误,新增加的功能要加入进去,维护工作又是非常困难的,效率又是非常低下的。因此,如何提高软件的可维护性,减少软件维护的工作量,也是软件工程面临的主要问题之一。,2020年5月16日星期六,物电学院,107,软件生产率,计算机的广泛应用使得软件的需求量大幅度上升,而软件的生产又处于手工开发的状态,软件生产率低下,使得各国都感到软件开发人员不足。这种趋势将仍旧继续下去。所以,如何提高软件生产率,是软件工程又一重要问题。,2020年5月16日星期六,物电学院,108,软件重用,提高软件的重用性,对于提高软件生产率、降低软件成本有着重要意义。当前的软件开发存在着大量的、重复的劳动,耗费了不少的人力资源。软件的重用有各种级别,软件规格说明、软件模块、软件代码、软件文档等都可以是软件重用的单位。软件重用是软件工程中的一个重要研究课题,软件重用的理论和技术至今尚未彻底解决。,2020年5月16日星期六,物电学院,109,问题定义,问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会白白浪费时间和金钱,最终得出的结果很可能是毫无意义的。,2020年5月16日星期六,物电学院,110,可行性研究,可行性分析和项目开发计划阶段必须要回答的问题是“要解决的问题是什么”。该问题有行得通的解决办法码?若有解决问题的办法,则需要多少费用?需要多少资源?需要多少时间?要回答这些问题,就要进行问题定义、可行性分析,制定项目开发计划。,2020年5月16日星期六,物电学院,111,可行性研究,用户提出一个软件开发要求后,系统分析员首先要解决该软件项目的性质是什么,它是数据处理问题还是实时控制问题,它是科学计算问题还是人工智能问题等。还要明确该项目的目标是什么,该项目的规模如何等。,2020年5月16日星期六,物电学院,112,可行性研究,通过系统分析员对用户和使用部门负责人的访问和调查、开会讨论,就可解决这些问题。在清楚了问题的性质、目标、规模后,还要确定该问题有没有行得通的解决办法。最后要提交可行性研究报告。经过可行性分析后,确定该问题值得去解决,然后制定项目开发计划。,2020年5月16日星期六,物电学院,113,需求分析,需求分析阶段的任务不是具体地解决问题,而是准确地确定“软件系统必须做什么?,确定软件系统必须具备哪些功能。并写出软件需求规格说明书。这份文件资料是软件工程中最重要的文件,是用户和软件研制人员之间相互共同约定和开发的基础。,2020年5月16日星期六,物电学院,114,软件总体设计,这一阶段的主要任务是解决系统“怎么做”的问题。总体设计决定软件系统的总体结构即模块结构,并给出模块的相互调用关系、模块问传递的数据及每个模块的功能说明。这个阶段的文件资料是软件结构图和模块功能说明。,2020年5月16日星期六,物电学院,115,软件总体设计,首先,应该设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。软件工程师应该用适当的表达工具描述每种方案,分析每种方案的优缺点,并在充分权衡各种方案的利弊的基础上,推荐一个最佳方案。此外,还应该制定出实现最佳方案的详细计划。如果客户接受所推荐的方案,则应该进一步完成下述的另一项主要任务。,2020年5月16日星期六,物电学院,116,详细设计,总体设计阶段以比较抽象概括的方式提出了解决问题的办法。详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。,2020年5月16日星期六,物电学院,117,详细设计,这个阶段的任务还不是编写程序,而是设计出程序的详细规格说明。这种规格说明的作用很类似于其他工程领域中工程师经常使用的工程蓝图,它们应该包含必要的细节,程序员可以根据它们写出实际的程序代码。,2020年5月16日星期六,物电学院,118,软件编码,编码编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序清单”。当然,写出的程序应是结构好,清晰易读,并且与设计相一致。,2020年5月16日星期六,物电学院,119,软件测试,测试是保证软件质理的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为模块测试、组装测试、确认测试。,2020年5月16日星期六,物电学院,120,软件维护,由于经过测试的软件仍然可能有错,用户的需求和软件的操作环境也可能发生变化。因此,交付运行的软件系统仍然需要维护,所以软件维护的实质是对软件继续进行查错、纠错和修改。一般维护分为以下几方面。(1)改正性维护。对软件性能、功能、处理和实现中出现的错误进行纠正。,2020年5月16日星期六,物电学院,121,软件维护,(2)适应性维护。当软件处理对象或数据环境变化时,依某些适应性进行修改,(3)完善性维护,为了提高软件的性能或者对可维护性方面所做的某些修改。(4)预防性维护。为了改善将来的可靠性或可维护性,而对软件进行的修改或补充。,2020年5月16日星期六,物电学院,122,图12典型的瀑布模型,问题定义,可行性研究,计划时期,概要设计,详细设计,编码,测试,运行,维护,开发时期,运行,可行性研究报告,需求分析报告,系统功能结构图,需求分析,系统详细设计流程,源程序+文档,测试记录+用户手册,评价报告+维修记录,2020年5月16日星期六,物电学院,123,快速原型模型,图中实线箭头表示开发过程,虚线箭头表示维护过程,快速原型模型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。,2020年5月16日星期六,物电学院,124,增量模型,应用举例见P17,螺旋模型,(2)选择对象。对各种软硬件设备、开发方法、技术、开发工具、人员、开发管理等对象进行选择,并决定软件是进行研制、购买还是利用现有的。,(1)确定任务目标。根据初始需求分析项目计划,确定任务目标、可选方案和限制。,(3)分析约束条件。软件开发的时间、经费等限制条件。(4)风险分析。评估目标、对象、约束条件三者之间的联系,列出可能出现的问题及问题的严重程度等,把最重要的问题列为尚未解决的关链问题的风险。,(5)制定消除风险的方法。应有详尽的说明和周密的计划,并估计可能产生的后果。依此来开发软件,为制定下一周期的计划打下基础。(6)制定下一周期的工作计划。,在第一个螺旋周期,初步开发原型1,制定系统生存周期计划。在第二个螺旋周期,在原形1的基础上开发原形2。在第三个螺旋周期,在原形2的基础上开发原形3。在第四个螺旋周期,开发出可运行的原形。此时对产品进行详细设计实现。,软件复用与构件技术,软件复用的基本概念,软件复用就是将已有的软件成分用于构造新的软件系统,以达到提高软件系统的开发质量与效率、开发成本的目的。可复用的软件成分称为可复用构件(ReusableComponent)或组件,可从旧软件中提取,也可以专门为复用而开发。软件复用不仅是对程序的复用,它包括对软件生产过程中任何活动所产生的制成品的复用。如:项目计划、可行性报告、需求定义、分析模型、详细说明、源程序和测试用例等。,软件生产过程主要是正向过程,即软件产品从抽象级别较高的形态向抽象级别较低的形态演化,所以较高级别的复用容易带动较低级别的复用,反之则不然。复用级别越高,可得到的回报也越大,因此分析软件(AnalysisWare)和设计软件(DesignWare)的复用备受重视。,软件复用的优点:(1)提高软件生产率,降低软件生产成本;(2)提高软件质量;(3)提高互操作性;(4)推动标准化;(5)支持原型开发。,软件复用的级别,包括目标代码,也包括文本形式的源代码。,受实际环境影响小,可复用机会多,所需修改少。,可被复用的分析结果是针对问题域的某些事物或某些问题的抽象程度更高的解法。,主要包括测试用例(testcase)的复用和测试过程信息的复用。,三种复用方式:从现有系统的分析结果中提取可复用构件用于新系统的分析;用一份完整的分析文档作为输入,生成针对不通软硬件平台和其他实现条件的多项设计;独立于具体应用,专门开发一些可复用的分析构件。,软件复用的形式,一、按照重用活动所跨越的应用领域的类型分1.横向复用(horizontalreuse)也称为水平复用,是指复用活动的范围跨越了几个不同的应用领域,复用的软件产品主要包括数据结构、通用算法、人机界面等软件元素。2.纵向复用(verticalreuse)也称为垂直复用,是指复用活动的范围限制在同一个应用领域或者是一类具有较多共性的应用领域内。,二、基于软件复用的软件开发过程的角度分.生产者复用(productreuse)指建立、获取或者重新设计可复用构件的活动。涉及的活动包括:复用的规划、领域分析、构件的开发、构件库的组织和管理。.消费者复用(consumerreuse)指使用可复用的构件建立新的系统的活动。涉及的活动包括:应用系统的规划、构件的检索和选择、应用系统中非复用部分的开发、应用系统的组装。,复用具有许多明显的优点,但目前应用不广泛的主要原因是:(1)技术因素构件与应用系统之间的差异;构件要达到一定的规模,才能支持有效的复用;发现合用构件的困难;基于复用的软件开发方法和软件过程需要一些新的理论、技术及支持环境。,软件复用的困难,(2)人的因素喜欢自己创造而不喜欢使用别人的东西。,(4)教育因素软件科学技术的教育与培训中,缺乏关于软件复用的内容,缺少专门教材和课程。,(3)管理因素把复用构件和一般软件构件同等看待,把复用看作可有可无的事。,7.2软件构件与构件工程,基于软件构件的软件工程也称为构件工程,是以面向对象的方法为基础,实现软件重用,构造新系统的过程。为了实现软件重用,基于软件构件的软件工程强调领域工程与软件工程同时进行。领域工程创建应用领域的模型,标识、构造、分类和传播一组可重用的软件。软件工程师则在软件开发过程中重用它们。下图给出了一个典型的重用的过程模型,描述了领域工程与软件工程的关系。,图,重用的过程模型,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,解决一个相对独立的问题,或大问题中某个相对独立的部分。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,提供较完整的解决,不要遗留很多缺口,让复用者做大量补充。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,构件所解决的问题应该是可标识的,可命名,有简要介绍,便于理解和使用。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,构件解决的问题,应在同类应用中具有一般性。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,应用场合有某些变化时,构件仍是可用的,使构件的某些数据参数化和数据类型参数化。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,要求构件对预计将要使用它的系统是可靠的。,一个软件只有在多个系统中被使用才可称为“可复用构件”,必须具备的条件:(1)独立性(2)完整性(3)可标识性(4)通用性(5)适应性(6)可靠性(7)标准化,可复用构件,可复用构件的标准化对于软件复用是至关重要的。,基于构件的软件工程,基于构件的软件工程与传统的或面向对象的软件工程相比,有显著的差异。它不是针对某个特定的软件系统,而是针对一类软件系统的共同的特征、知识和需求。基于构件的软件的开发过程包括两个并发的子过程,一个是领域工程,另一个是基于构件的开发。领域工程完成一组可复用构件的标示、构造、分类和传播;基于构件的开发完成使用可复用构件构造新的软件系统。,领域分析(DomainAnalysis)是针对一类软件系统的应用领域,进行系统化分析,以发现其共同的特征、知识和需求和规约。领域分析是特定类领域软件重用的基础,领域分析又称作领域工程(DomainEngineering),是软件工程的发展与延伸。其目标是:发现和挖掘在特定领域内可以被复用的构件。领域分析活动中输入和输出如图所示:,领域分析,领域分析,输入信息技术文献已有应用专家经验/建议当前与未来的需求,输出信息领域语言复用标准分类方法功能/行为模型,领域分析的输入和输出,领域分析是一项比系统分析更难的工作。领域分析方法可采用结构化方法和面向对象方法,而后者将成为主流。,构件的开发与构件库,构件的开发领域分析的结果为构件的选取和开发提供了指导性的原则。此外,构件开发还需要遵循一定的设计概念和原则。构件应该具有相当的一般性和抽象性。能够用于满足一类相似的需求,一个过于特殊的构件是很难被重复使用的。为用户对构件的调整和修改留出余地。即使一个通用性很高的构件也不可能完全适应用户的需求和运行环境,所以一个构件被不同的应用复用时,对它的某些部分进行修改是不可避免的。例如,继承、参数化、模板和宏都是典型的提高构件灵活性和可调整性的机制。,构件库,构件库(ComponentLibrary)用于对可复用构件进行存储和管理。它是支持软件复用的必要设施。构件库必须有大量的可复用构件。构件库系统应提供的主要功能:构件的存储、管理、检索以及库的浏览与维护等。关键是支持使用者高效而准确地发现所需的可复用构件。相关的主要技术是分类方法和检索方法。支持方便的、友好的用户管理和使用界面。,构件分类,构件检索,涉及两个基本问题:,大多数构件按枚举、刻面和属性-值分为三类:(1)枚举分类通过定义一个层次结构来对构件进行分类。构件库中的可复用构件按照某种标准被分成了若干个大类,每个大类中的构件再分成若干个小类,这样就形成了一个构件分类的层次结

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论