资源预览内容
第1页 / 共122页
第2页 / 共122页
第3页 / 共122页
第4页 / 共122页
第5页 / 共122页
第6页 / 共122页
第7页 / 共122页
第8页 / 共122页
第9页 / 共122页
第10页 / 共122页
亲,该文档总共122页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
7/30/2024第一章第一章 软件工程学概述软件工程学概述 参考教材参考教材1. 1. 软件工程件工程实践者的研究方法践者的研究方法 Roger S.Pressman ( (第第6 6版)版) 机械工机械工业出版社出版社2. 2. 软件工程(第件工程(第8 8版)版) Ian Sommerville 机械工机械工业出版社出版社 n n什么是软件n n软件的特点n n软件的发展n n软件生存期n n什么是软件工程n n软件工程的目的和要求第一章 软件工程学概述先接受开发软件不等于编写程序的正确观点:先接受开发软件不等于编写程序的正确观点: 开发软件应该完成的工作远远多于编写程序应该完成的工作。开发软件应该完成的工作远远多于编写程序应该完成的工作。编写程序步骤为首先设计算法编写程序步骤为首先设计算法(即完成指定功能的步骤),然后用程序设计语言(即完成指定功能的步骤),然后用程序设计语言(例如:(例如:C C语言)语言)表达该算法表达该算法。而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占一小部分。的一部分,而且只占一小部分。为了开发出一个符合用户需要、质量合格的软件,软件工程师必须为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用首先弄清楚用户面临的问题是什么户面临的问题是什么,也就是要明确软件需要解决用户的哪些问题;,也就是要明确软件需要解决用户的哪些问题;接下来应该进行可行性研究方案接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;然后应该进行需求分析工作然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。通常,大型软件的在编写程序之前需要先进行设计。通常,大型软件的设计工作又分成设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计;计;编写程序编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序;实质上是把设计结果翻译成用某种程序设计语言书写的程序;程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的占软件开发全部工作量的40%40%50%50%) ,软件确实符合用户需求而且,软件确实符合用户需求而且质量合格,才能交付给用户使用。质量合格,才能交付给用户使用。1.1什么是软件软件软件是计算机系统中与硬件相互依存的另一部分,是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。它是包括程序,数据及其相关文档的完整集合。程序程序是按事先设计的功能和性能要求执行的指令序是按事先设计的功能和性能要求执行的指令序列。列。计算机程序包括源程序和目标程序。计算机程序包括源程序和目标程序。 数据数据是使程序能正常操纵信息的数据结构(即数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。的组织形式)。文档文档是与程序开发,维护和使用有关的图文材料。是与程序开发,维护和使用有关的图文材料。1.1什么是软件n软件的特点软件的特点软件是一种逻辑实体,而不是具体的物理实体。软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。因此,它具有抽象性。软件的生产与硬件不同,没有明显的制造过程。软件的生产与硬件不同,没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。对软件的质量控制,必须立足于软件开发方面。在软件的运行和使用期间,没有像硬件那样的磨在软件的运行和使用期间,没有像硬件那样的磨损、老化问题。损、老化问题。软件的开发和运行往往受到计算机系统的限制,软件的开发和运行往往受到计算机系统的限制,对计算机系统有不同程度的依赖性。对计算机系统有不同程度的依赖性。故障率曲线时间故障率软件的故障率曲线时间故障率软件的故障率曲线时间故障率硬件的故障率曲线理想曲线实际曲线1.1什么是软件n软件的特点(续)软件的特点(续)迄今为止,软件的开发尚未完全摆脱手工艺的方式。软件本身是复杂的。软件的成本相当昂贵。相当多的软件工作涉及到社会因素。例例例例: : : : Windows95Windows95Windows95Windows95有有有有1000100010001000万行代码万行代码万行代码万行代码 Windows2000Windows2000Windows2000Windows2000有有有有5000500050005000万行代码,万行代码,万行代码,万行代码, 3000 3000 3000 3000多个工程师,几百个小团队。多个工程师,几百个小团队。多个工程师,几百个小团队。多个工程师,几百个小团队。Exchange2000Exchange2000Exchange2000Exchange2000和和和和 Windows2000 Windows2000 Windows2000 Windows2000开发人员结构开发人员结构开发人员结构开发人员结构Exchange2000Windows20002000项目经理项目经理25人人约约250人人开发人员开发人员140人人约约1700人人测试人员测试人员350人人约约3200人人1.1什么是软件n软件的分类软件的分类按软件的功能划分:按软件的功能划分:系统软件、支撑软件、应用软件按软件的规模划分:按软件的规模划分:微型、小型、中型、大型、超大型按软件的工作方式划分:按软件的工作方式划分:实时、分时、交互、批处理按软件服务对象的范围划分:按软件服务对象的范围划分:项目软件、产品软件 计算机系统的发展计算机系统的发展 自从1945年第一台电子数字计算机问世以来,计算机经历了电子管、半导体、集成电路到大规模集成电路几个发展时期,软件也经过程序、软件、软件工程及软件产业化等不同的发展时期。1 1、程序时代(、程序时代(60年代前年代前) 计算机硬件处于电子管时代、应用于科学计算。 其特点:.软件的开发者、使用者、维护者都是同一人 .重视编程技巧和运算效率的提高。.结构不清晰,不易理解,像一部天书,是人脑进行的隐含过程(4).使用机器语言。(后期用汇编语言) 软件=程序。 计算机系统的发展(计算机系统的发展(续续1 1)2 2、软件时代(、软件时代(60607070年代)年代) 计算机进入了半导体时代,CPU速度和存储容量大幅提高(几万次秒100万次秒) 其特点: .多人分工合作,共同协作完成。 .软件逐渐成为计算机系统必不可少的组成部分。 .应用领域从科学计算拓宽到工业控制、商业系统等。 软件=程序+使用说明 软件商品化。60年代末IBM实行价格分离,软件独立于硬件单独定价,这项政策大大促进了软件的发展,几万、几十万语句行的程序屡见不鲜。 同时由于软件的发展迅猛也给软件的开发、运行、维护带来新的问题,软件的庞大及其复杂性造成了许多大型软件开发失败,有些交付使用后并不能运行,不能被用户所接受。在此时期爆发了“软件危机”。 计算机系统的发展(计算机系统的发展(续续2 2)3 3、软件工程时代(、软件工程时代(7070年代年代8080年代)年代) 在这个时期里,计算机从集成电路发展到大规模集成电路,主机芯片的产生,将计算机的主要部件集中在一个小芯片上。计算机走出机房,有了个人电脑。 软件无论从数量到质量都无法满足发展的需要,早期的错误观念和做法严重的阻碍了软件的发展。1968年,北大西洋公约组织的计算机专家提出并使用了“软件工程”这一术语,即按工程化的技术进行软件开发。诞生了软件工程这门新兴的科学。 软件开发不再把效率作为追求的第一目标,而是重视易读、易理解,软件质量的标准起了变化可维护性、可靠性、可理解性,这一阶段围绕软件工程的目标和内容,与之相应的理论、技术及方法相继建立,软件开发过程的规范化,工程化为软件的产业化奠定了坚实的基础。 软件=程序+文档 计算机系统的发展(计算机系统的发展(续续3 3)4 4、软件产业化的时代(、软件产业化的时代(9090年代以后)年代以后)由于软件工程技术的发展带动了软件产业的发展,80年代后期至90年代全社会的信息化进程,使得软件从传统的技术性应用到大规模地向消费性应用过渡。软件产业已名符其实地成为国民经济信息化和社会信息化的战略产业。计算机软件发展三个时期的比较计算机软件发展三个时期的比较时间特点程序时代5060年代软件时代6070年代软件工程时代70年代以后软件所指程序程序及说明书程序、文档、数据主要程序设计语言汇编及机器语言高级语言软件语言软件工作范围程序编写包括设计和测试软件生存期需求者程序设计者本人少数用户市场用户开发软件的组织个人开发小组开发小组及大中型软件开发机构软件规模小型中小型大中小型决定质量的因素个人程序技术小组技术水平管理水平开发技术和手段子程序程序库结构化程序设计数据库、开发工具、开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术维护责任者程序设计者开发小组专职维护者硬件特征价格高、存储容量小工作可靠性差降价、速度、容量及工作可靠性有明显提高向超高速、大容量、微型化及网络化方向发展软件特征完全不受重视软件技术的发展不能满足需要,出现软件危机开发技术有进步,但未获突破性进展,价高,未完全摆脱软件危机发展带来的新问题:l 硬件的发展超过软件发展;集成度18个月翻一翻,计算速度、存储容量成倍增长,成本每10年递减两位数。l 制作软件的能力和速度与需求不适应;l 计算机的应用依赖于可靠的软件,软件失败将造成巨大经济损失;l 已有的软件难以维护。中国软件产业面临挑战与机遇l 外国软件渗透l 软件开发投资力度不足l 软件侵权行为l 软件人才结构不合理,缺乏高级系统程序员和项目负责人。l 软件人员缺乏软件工程化的概念。1.2软件危机一、一、 软件危机的出现软件危机的出现 软件危机案例软件危机案例例例: : IBM公司在公司在1963年至年至1966年开发的年开发的IBM360机的操作系统。这一项目花了机的操作系统。这一项目花了5000人一年的工作量,最多时有人一年的工作量,最多时有1000人投人投入开发工作,写出了近入开发工作,写出了近100万行源程序。万行源程序。.据统计,这个操作系统每次发行的据统计,这个操作系统每次发行的新版本都是从前一版本中找出新版本都是从前一版本中找出1000个程序个程序错误而修正的结果。错误而修正的结果。. 项目负责人项目负责人F. D. BrooksF. D. Brooks事后总结了他事后总结了他在组织开发过程中的沉痛教训时说:在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。无法逃脱灭顶的灾难。.程序设计工作程序设计工作正像这样一个泥潭,正像这样一个泥潭,.一批批程序员被一批批程序员被迫在泥潭中拼命挣扎,迫在泥潭中拼命挣扎,.谁也没有料到谁也没有料到问题竟会陷入这样的困境问题竟会陷入这样的困境.”。IBM360IBM360操作系统的历史教训成为软件开发项目的操作系统的历史教训成为软件开发项目的典型事例为人们所记取。典型事例为人们所记取。问题出在哪里?问题出在哪里?u项目没有被很好地理解;计划不周,最终导致进度拖延;u文档资料不充分,使人与人的交流变得比写程序困难得多;u缺少度量软件可靠性(reliability) 的标准,质量无法保证;u软件难以维护(maintainability) , 不易升级(evolvability);必须意识到:必须意识到:软软件件 编编程程 1.2软件危机二、什么是软件危机二、什么是软件危机软件危机软件危机是指在计算机软件的开发和维护过程中所是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。主要是两个问题。遇到的一系列严重问题。主要是两个问题。1. 如何开发软件,怎样满足对软件的日益增长的需求。如何开发软件,怎样满足对软件的日益增长的需求。2. 如何维护数量不断膨胀的已有软件如何维护数量不断膨胀的已有软件1.2软件危机三、软件危机的主要表现三、软件危机的主要表现1.对软件开发成本和进度的估计不准确2.用户不满意3.软件质量不高、可靠性差4.软件常常不可维护、错误难以改正。5.缺乏适当的文档资料6.软件成本占系统总成本的比例逐年上升7.软件开发速度跟不上计算机发展速度三、软件危机(续三、软件危机(续1 1) 危机的表危机的表现软件成本在计算机系统中总成本所占的比例逐年增高。 软件生产率的提高远跟不上需求的增长。失败案例失败案例1962年美国飞向金星的探测器失败,损失几千万美元,问题出在控制程序中:DO5i=1,3,错写为:DO5i=1.3。1982年日本第五代计算机计划,预算达8亿美元,由于没能突破关键性的技术难题的原因于1993年下马。上世纪六十年代操作系统的研制经受了一系列重大挫折,典型的例子是OS360。数百万行汇编代码中有成千上万处错误,IBM不断发行新的版本试图更正这些错误,每个新版本在更正老错误的同时又引入了新的错误;随着时间的流逝,错误的数量大致保持不变。相关数据相关数据IBM每年花费大约2.5亿美元,用于修复1.3万个客户反馈缺陷和重新安装修复后的版本,每个缺陷大约花费千美元。20世纪90年代中期,美国软件工程实践的现状是:软件开发仍然很难预测,大约只有10%的项目能够在预定的费用和进度下交付。很多投入了巨大资金和人力的软件产品不能取得很好的成绩。1.2软件危机软件危机四、四、产生生软件危机的原因件危机的原因在软件的开发和维护过程中存在着这么多的问题,一方面与软件本身的特点有关,另一方面也与软件的开发和维护的方法有关。造成上述软件危机的原因概括起来有以下几方面:2024年年7月月30日日30(1)软件的规模愈发庞大。1968年美国航空公司订票系统达到30万条指令;IBM360OS第16版达到100万条指令;1973年美国阿波罗计划达到1000万条指令。XP3000万行,win7近2亿行这些庞大软件的功能非常复杂,体现在处理功能的多样性和运行环境的多样性。随着计算机应用的日益广泛,需要开发的软件规模日益庞大,软件结构也日益复杂。2024年年7月月30日日31(2)软件开发的管理困难。软件不同于硬件,它是计算机系统中的逻辑部件。在写出代码并在计算机上试运行前,由于软件规模大,结构复杂,又具有无形性,软件开发过程的进展情况较难度量,质量也难评价。因此导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。2024年年7月月30日日32(3)相当多的软件开发人员对于软件的开发和维护存在不少糊涂的观念,实践中或多或少地采用错误的方法和技术。这可能是软件危机的主要原因。2024年年7月月30日日33(4)软件开发和维护中许多错误认识和方法的形成可以归结与计算机发展早期软件开发的个体化特点。其主要表现在对软件需求分析的重要性认识不够,错误地认为软件开发就是写程序并使之运行,不重视软件需求分析与维护等工作。2024年年7月月30日日34(5)软件开发技术落后。在20世纪60年代,人们注重一些计算机理论问题的研究,如编译原理、操作系统原理、数据库原理、人工智能原理、形式语言理论等,不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应,它们之间的差距越来越大。2024年年7月月30日日35(6)生产方式落后。软件仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依据,靠言传身教方式工作。(7)开发工具落后,生产率提高缓慢。软件开发工具过于原始,没有出现高效率的开发工具,因而软件生产率低下。在19601980年期间,计算机硬件的生产由于采用计算机辅助设计、自动生产线等先进工具,使硬件生产率提高了100万倍,而软件生产率只提高了2倍,相差十分悬殊。1.2软件危机五、解决软件危机的途径五、解决软件危机的途径.研制新一代体系结构的智能计算机,以改变软件的实现方式,降低软件的复杂性。目前尚未研制成功。.采用工程化、规范化的开发方法来指导软件的开发:这就是产生“软件工程学”的背景,并在70年代形成了结构化分析、设计方法。也是本课程要讲授的主要内容。.在求解方法上采用面向对象的软件设计方法。即在软件开发中,以客观世界的问题空间入手进行软件设计,以减少求解方法空间与客观世界问题空间存在的“鸿沟”。1.3软件工程简述一、什么是软件工程一、什么是软件工程软件工程软件工程是指导计算机软件开发和维护的工程学科。是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。当前能够得到的最好的技术方法结合起来。一、什么是软件工程?一、什么是软件工程? 不同机构从不同角度给出了许多定义。“运用现代科学技术知识来设计并构造计算机程序设计及为开发,运行和维护这些程序所必须的相关文件资料”。 Boehm“软件工程是开发,运行,维护和修复软件的一套系统方法”。 IEEE“软件工程学是为在成本限额以内按时完成开发和修改软件产品所需的系统生产和维护的技术和管理的学科”。 Fairley“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。 Fritz Bauer1.3软件工程简述二、软件工程的基本原理二、软件工程的基本原理1968年,北大西洋公约组织(NATO),召开的有关计算机软件会议上正式提出“软件工程”术语。目前有100多条关于软件工程的准则,其中最出名的是著名软件工程专家B.W.Boehm在1983年提出的7条基本原理。1.3软件工程简述1.用分阶段的生命周期计划严格管理经统计表明,不成功的软件项目中有一半左右是由于计划不周造成的。Boehm认为,在软件的整个生命周期中应制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。1.3软件工程简述2.坚持进行阶段评审大部分错误是在编码之前造成的因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程的错误1.3软件工程简述3.实行严格的产品控制在软件开发过程中不要随意改变需求,因为改变某项需在软件开发过程中不要随意改变需求,因为改变某项需求往往需要付出较高的代价,但在实践中用户往往会提求往往需要付出较高的代价,但在实践中用户往往会提出需求变更,因此需要采取科学的产品控制技术。出需求变更,因此需要采取科学的产品控制技术。目前主要实行基准配置管理:基准配置是指经过阶段评目前主要实行基准配置管理:基准配置是指经过阶段评审后的软件配置成分,如各个阶段产生的文档或程序代审后的软件配置成分,如各个阶段产生的文档或程序代码。码。对涉及基准配置的修改,必须经过严格的评审,通过后对涉及基准配置的修改,必须经过严格的评审,通过后才能实施修改。才能实施修改。1.3软件工程简述4.采用现代程序设计技术实践表明:采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。80年代及之前:结构化分析、设计技术90年代:面向对象分析、设计技术1.3软件工程简述5.结果应能清楚地审查软件产品是看不见、摸不着的逻辑产品,开发过程软件产品是看不见、摸不着的逻辑产品,开发过程难以评价和管理。难以评价和管理。根据软件开发项目的总目标及完成期限,规定开发根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使所得的结果能够清楚地组织的责任和产品标准,使所得的结果能够清楚地审查审查1.3软件工程简述6.开发小组的人员应该少而精开发小组人员的素质和数量是影响软件产品质量和开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。开发效率的重要因素。开发小组人员数目的增加,使相互交流复杂、费用开发小组人员数目的增加,使相互交流复杂、费用增加。增加。1.3软件工程简述7.承认不断改进软件工程实践的必要性遵循前遵循前6 6条基本原理,就能够按照当代软件工程基条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但不能保证赶上时本原理实现软件的工程化生产,但不能保证赶上时代前进的步伐。代前进的步伐。积极主动采纳新的软件技术,且不断总结经验。积极主动采纳新的软件技术,且不断总结经验。三、三、 软件工程的目标软件工程的目标2024年年7月月30日日47软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。下面分别介绍这些概念。2024年年7月月30日日48(1)可修改性(modifiability)。容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护,是一个难以度量和难以达到的目标。2024年年7月月30日日49(2)有效性(efficiency)。软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性方面会发生矛盾,这时不得不牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性。时/空折中是经常出现的。有经验的软件设计人员会巧妙地利用折中概念,在具体的物理环境中实现用户的需求和自己的设计。2024年年7月月30日日50(3)可靠性(reliability)。能够防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。对于实时嵌入式计算机系统,可靠性是一个非常重要的目标。2024年年7月月30日日51(4)可理解性(understandabimy)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。2024年年7月月30日日52(5)可维护性(maintainability)。软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化等等。由于软件是逻辑产品,只要用户需要,它可以无限期地使用下去,因此软件维护是不可避免的。2024年年7月月30日日53(6)可重用性(reusebility)。概念或功能相对独立的一个或一组相关模块定义为一个软部件。软部件可以在多种场合应用的程度称为部件的可重用性。可重用的软部件有的可以不加修改直接使用,有的需要修改以后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。2024年年7月月30日日54(7)可适应性(adaptability)。软件在不同的系统约束条件下,使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。 2024年年7月月30日日55(8)可移植性(portability)。软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性,在软件设计过程中通常采用通用的程序设计语言和运行支撑环境。可移植性支持软件的可重用性和可适应性。2024年年7月月30日日56(9)可追踪性(tracebility)。根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段产档和程序的完整性、一致性和可理解性。降低系统的复杂性会提高软件的可追踪性。2024年年7月月30日日57(10)可互操作性(interoperability)。多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性,软件开发通常要遵循某种标准,支持这种标准的环境将为软件元素之间的可互操作提供便利。可互操作性在分算环境下尤为重要。1.4 软件的生存周期 1.“生命周期法”的起源。软件工程采用的“生命周期法”,就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后再逐步完成每个阶段的任务.1.4软件的生存周期 2.生命周期划分的原则任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。3.生命周期的划分软件生命周期一般分为:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码和测试)、软件使用与维护等三个时期八个阶段。1.4软件的生命周期软件生命周期的各个阶段:软件生命周期的各个阶段:(1)问题定义)问题定义(2)可行性分析)可行性分析(3)需求分析)需求分析 分析软件需求,编写软件需求规格说明分析软件需求,编写软件需求规格说明(4)概要设计和详细设计)概要设计和详细设计 确定软件体系结构,设计软件模块确定软件体系结构,设计软件模块(5)程序编写)程序编写(6)软件测试)软件测试(7)运行和维护)运行和维护l问题定义 “要解决什么问题?”l可行性研究 “上一个阶段所确定的问题是否有行得通的解决办法” 目的:用最小的代价在尽可能短的时间内确定问题是否能够解决l需求分析 “系统必须做什么” 对待开发软件提出的需求进行分析并给出详细的定义 编写软件需求规格说明书 提交管理机构评审l概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应l详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础编写设计说明书,提交评审。l编码 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的l软件测试单元测试: 查找各模块在功能和结构上存在的问题并加以纠正组装测试:将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用l软件维护改正性维护改正性维护: 运行中发现了软件中的错误需要修正适应性维护:适应性维护: 为了适应变化了的软件工作环境,需做适当变更完善性维护:完善性维护: 为了增强软件的功能需做变更4.软件工程三要素 过程、方法和工具1.2软件工程软件工程过程方法工具 软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。 方法支撑过程和工具、过程和工具促进方法学的 研究。 为软件工程的过程和方法提供自动化或半自动化的工具支持软件工程过程是为了获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动完成项目的技术手段(传统方法学、面向对象方法学)n软件工程过程定义了软件工程过程定义了:n n 方法使用的顺序方法使用的顺序n n 要求交付的文档资料要求交付的文档资料n n 为保证质量和适应变化所需为保证质量和适应变化所需要的管理要的管理n n 软件开发各个阶段完成的里软件开发各个阶段完成的里程碑程碑1)传统方法学传统方法学(生命周期方法学生命周期方法学)原理: 采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用,即把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务。优点:分阶段完成任务,各阶段任务较为独立,便于人员分工协作,降低了开发难度; 上一阶段的工作经审查后进入下一阶段,可保证软件质量,提高软件的可维护性。2)面向对象方法学)面向对象方法学原理及特点:以数据为主线,把数据和对数据的操作紧密地结合起来的方法,对软件便于维护。4个要点:把对象作为融合了数据及在数据上的操作行为的统一的软件构件;对象具有“类”的特性;父与子类间具有继承性;对象之间用发送消息互相联系,即封装性。面向对象方法学的出发点和基本原则: 是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。1.5软件的开发模型一、瀑布模型一、瀑布模型瀑布模型的优点:瀑布模型的优点:通过设置里程碑,明确每阶段的任务与目标。可为每阶段制定开发计划,进行成本预算,组织开发力量。通过阶段评审,将开发过程纳入正确轨道。严格的计划性保证软件产品的按时交付。瀑布模型的缺点:瀑布模型的缺点:缺乏灵活性,不能适应用户需求的改变。开始阶段的小错误被逐级放大,可能导致软件产品报废。返回上一级的开发需要十分高昂的代价。随着软件规模和复杂性的增加,软件产品成功的机率大幅下降。瀑布模型的适应范围:瀑布模型的适应范围:它主要适应于小规模和需求较为稳定的的软件开发。 瀑布模型瀑布模型问题定义可行性研究概要设计详细设计实际瀑布模型实际瀑布模型特点:特点:阶段间具有顺序性和依赖性阶段间具有顺序性和依赖性推迟实现的观点(逻辑设计与物推迟实现的观点(逻辑设计与物理设计分开)理设计分开)质量保证观点质量保证观点文档驱动文档驱动线性顺序改正一个问题需付出的代价改正一个问题需付出的代价改正一个问题的估计费用改正一个问题的估计工作量20200200010005.02.50.050.5(人/天)需求分析概要设计详细设计编码调试系统测试用户现场瀑布模型适应场合 瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。1.5软件的开发模型二、原型模型二、原型模型1. 基本思想基本思想在获取一组基本的需求定义后,利用高级软件工具的可开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改的过程,应用系统的“最初版本”就逐步演变为系统的“最终版本”。1.5软件的开发模型原原型型:一个具体的可执行模型,它实现了系统的若干功能。原原型型法:不断地运行系统“原型”来进行启发、揭示和判断的系统开发方法。由于软件项目的特点和运行原型的目的不同,分为两种类型: 软件原型的分类软件原型的分类软件原型的分类软件原型的分类2、追加(add on)型也称快快速速建建立立渐渐进进原原型型RCPRCP法法(Rapid Rapid Cyclic Cyclic PrototypingPrototyping)法采用循环渐进的开发方式,对系统模型作连续精化,即先构造一个功能简单而且质量要求不高的模型系统,将系统需要具备的性质逐步添加上去,通过不断地扩充修改,逐步追加新的要求,直至所有性质全部满足,此时的原型模型也就是最终的产品。1、废弃(throw away)型也称为快快速速建建立立需需求求规规格格原原型型RSPRSP法法(Rapid Rapid Specific Specific PrototypingPrototyping),先构造一个功能简单而且质量要求不高的模型系统,针对这个模型系统反复进行分析修改,让用户学习。待需求说明书一旦确定,原型将被废弃,后阶段的工作仍按照瀑布模型开发。1.快速分析 快速确定软件系统的基本要求,确定原型所要体现的特性(总体结构,功能,性能、界面等)。2.构造原型 根据基本规格说明,忽略细节,只考虑主要特性,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。3.运行和评价原型用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性。4.修正与改进 对原型进行修改,增删。运 行评价 构造快速分析或修改 快速原型模型开发过程快速原型模型开发过程快速原型模型开发过程快速原型模型开发过程快速原型法的工作模型如图所示,按以下步骤循环执行。图1.7 快速原型模型YYNNYN图1.8 快速原型化开发过程 快速建立系统原型进行系统的分析和构造有如下优点: 1、增进软件开发人员和用户对系统需求的理解。便于将用户模糊的功能需求明确化。2、为用户提供了一种强有力的学习手段。3、易于确定系统的性能,是理解和确认软件需求规格说明的工具。4、按照RCP 法建立的原型即为最终的产品。缺点:1、对于大型软件项目,原型模型需要足够的人力资源以建立足够的原型组。2、原型模型要求开发者和客户在一段时间内共同完成原型系统的开发,如果任何一方没有实现承诺,会导致原型开发的失败。3、如果系统难以模块化,建造原型所需构件就有问题。三三 增量模型增量模型(incremental model)(incremental model) 增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。 使用增量模型开发模型时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能完成特定的功能。第一个增量构件往往提供最核心的功能。 注意:在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。 增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。定义概要需求把需求分配给增量设计系统结构开发系统增量验证增量组装增量验证系统系统不完全最终系统 图1.9 增量模型1.5软件的开发模型四、螺旋模型四、螺旋模型在原型基础上,进行多次原型反复并增加风险评估,形成螺旋模型。螺旋模型综合了传统的软件生命周期模型和原型模型的优点。将瀑布模型与增量模型结合起来,加入了两种模型均忽略了的风险分析,弥补了这两种模型的不足。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次,螺旋模型是一种风险驱动的模型2024年年7月月30日日88 将原型的迭代特征与线性顺序模型中控制的将原型的迭代特征与线性顺序模型中控制的和系统化的方法结合起来。和系统化的方法结合起来。五五 喷泉模型喷泉模型 2024年年7月月30日日91软件生命周期可以按瀑布模型,先进行分析,后进行设计;也可以按螺旋模型或增量模型,交替地进行分析和设计。不过更能体现两者之间关系特点的是近几年提出的喷泉模型。喷泉模型以面向对象的软件开发方法为基础,以用户需求为动力,以对象作为驱动的模型。它适合于面向对象的开发方法。2024年年7月月30日日92喷泉模型2024年年7月月30日日93喷泉模型的特点:(1)模型规定软件开发过程有5个阶段,即分析、设计、实现、测试与集成。(2)模型从高层返回低层无资源消耗,反映了软件过程迭代的自然特性。(3)以分析为基础,资源消耗呈塔型,在分析阶段消耗的资源最多。(4)各阶段相互重叠反映了软件过程并行性。2024年年7月月30日日94(5)模型强调增量开发,它依据分析一点,设计一点的原则,并不要求一个阶段的彻底完成,整个过程是一个迭代的逐步提炼的过程。(6)模型是对象驱动的过程,对象是所有活动作用的主体和项目管理的基本内容。六、六、 形式化方法模型形式化方法模型是基于形式化语言和程序变换的模型,因此,是基于形式化语言和程序变换的模型,因此,也称变换模型。从软件需求形式化说明开始,也称变换模型。从软件需求形式化说明开始,经经过一系列的数学变换和正确性证明过一系列的数学变换和正确性证明,最终得到系,最终得到系统高层的设计逻辑或低层的目标程序。形式化方统高层的设计逻辑或低层的目标程序。形式化方法使开发者应用一个严格的数学符号体系来表示、法使开发者应用一个严格的数学符号体系来表示、构造和验证系统,从而大大提高软件的可靠性。构造和验证系统,从而大大提高软件的可靠性。 基于模型的描述语言及方法如基于模型的描述语言及方法如Z、VDM( (Vienna Definition Method)、B、Petri Nets等。等。 形式化过程模型的一个扩展,称为形式化过程模型的一个扩展,称为净净室软件工程室软件工程(cleanroom software engineering) )或或净室模型净室模型,它除了强调分析,它除了强调分析和设计上的严格性,以及使用基于数学的正和设计上的严格性,以及使用基于数学的正确性证明来对设计模型的每个元素进行形式确性证明来对设计模型的每个元素进行形式化验证外,还强调了统计质量控制技术。化验证外,还强调了统计质量控制技术。 基本思想基本思想: 力求在分析和设计阶段就消除错误,确力求在分析和设计阶段就消除错误,确保正确,然后在无缺陷或保正确,然后在无缺陷或“洁净洁净”的状态下的状态下实现软件的制作。实现软件的制作。 七、构件组装模型七、构件组装模型构件(构件(component) )也称为组件,是一段实现也称为组件,是一段实现一系列有确定一系列有确定标准接口标准接口的程序体,具有自己的功能的程序体,具有自己的功能和逻辑,能同其他构件组装起来协调工作。和逻辑,能同其他构件组装起来协调工作。 该模型支持该模型支持软件重用软件重用,对缩短软件开发周期、,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台的软件,扩展了软件的布式的、跨越不同操作平台的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。应用前景,促进了软件标准化、商品化的发展。 因此,在此基础上专家们又提出了因此,在此基础上专家们又提出了“基于构件基于构件的软件工程的软件工程”( (CBSE) )。 构件组装模型的一种形式如下图所示:构件组装模型的一种形式如下图所示: 构件组装模型的构件组装模型的一种一种形式形式 该模型是软件体系结构被建立后用构件去充实。这些该模型是软件体系结构被建立后用构件去充实。这些构件可从复用库(或商品库)中获得,或者根据专门需要构件可从复用库(或商品库)中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。术上的支持。1.6 统一过程统一过程-RUPRUP ( Rational Unified Process )或或UP于于1998年年6月由月由Rational公司推出。有上千家公司公司推出。有上千家公司在使用,分布于电信、交通、航空、国防、制在使用,分布于电信、交通、航空、国防、制造、金融等不同的行业和应用域。造、金融等不同的行业和应用域。 RUP是一个二维的迭代结构是一个二维的迭代结构: 横轴为横轴为生命周期生命周期的四个阶段的四个阶段起始、细起始、细化、构建和产品化,各阶段结束于一个里程碑。化、构建和产品化,各阶段结束于一个里程碑。 纵轴为九个工作流(纵轴为九个工作流(RUP2000版)版)业业务建模、需求、分析设计、实施、测试、部署、务建模、需求、分析设计、实施、测试、部署、配置配置(称为核心过程工作流)与变更管理、项目称为核心过程工作流)与变更管理、项目管理、环境(称为核心支持工作流)。管理、环境(称为核心支持工作流)。 下图显示了五个核心过程工作流的二维结下图显示了五个核心过程工作流的二维结构:构: 起始起始(inception):定义业务需求、提):定义业务需求、提出系统大致的架构,识别各种资源,评估主出系统大致的架构,识别各种资源,评估主要风险,制定开发计划。要风险,制定开发计划。 细化细化(elaboration):扩展起始阶段定):扩展起始阶段定义的用例,扩展体系结构以包括各类视图义的用例,扩展体系结构以包括各类视图用例模型、分析模型、设计模型、实现模型用例模型、分析模型、设计模型、实现模型和部署模型,修改项目计划。和部署模型,修改项目计划。 构建构建(construction):以体系结构模):以体系结构模型作为输入,开发或获取软件构件,确保最型作为输入,开发或获取软件构件,确保最终用户能够操作用例。终用户能够操作用例。 转换转换(transition):软件被提交给用):软件被提交给用户进行户进行Beta测试和验收测试,根据缺陷进行测试和验收测试,根据缺陷进行必要的变更,创建系统发布所必要的支持信必要的变更,创建系统发布所必要的支持信息。息。 生产生产(production):持续的监控软):持续的监控软件的运行并提供运行环境的技术支持。件的运行并提供运行环境的技术支持。 在构建、转换和生产阶段的同时,下一在构建、转换和生产阶段的同时,下一个增量的工作已开始。个增量的工作已开始。1、RUP每一阶段产生的主要工作产品每一阶段产生的主要工作产品 起始阶段起始阶段 初始用例模型初始用例模型 初始项目术语表初始项目术语表 初始业务用例初始业务用例 初始风险评估初始风险评估 项目计划项目计划 阶段及迭代阶段及迭代 业务模型业务模型 如果需要如果需要 一个或多个原一个或多个原型型 细化阶段细化阶段 用例模型用例模型 补充需求补充需求 包括非功能需求包括非功能需求 分析模型分析模型 软件体系结构描述软件体系结构描述 可执行的体系结构原型可执行的体系结构原型 初步的设计模型初步的设计模型 修订的风险列表修订的风险列表 项目计划,包括项目计划,包括 迭代计划迭代计划 调整的工作流调整的工作流 里程碑里程碑 技术工作产品技术工作产品 初始用户手册初始用户手册 构建阶段构建阶段 设计模型设计模型 软件构件软件构件 集成的软件增量集成的软件增量 测试计划及步骤测试计划及步骤 测试用例测试用例 支持文档支持文档 用户手册用户手册 安装手册安装手册 对于并发增量的描述对于并发增量的描述 转换阶段转换阶段 提交的软件增量提交的软件增量 Beta测试报告测试报告 综合用户反馈综合用户反馈 2、RUP的主要特点:的主要特点: (1)用例驱动)用例驱动 用例作为系统分析、设计、实现和测试用例作为系统分析、设计、实现和测试的基本输入。即用例不只是一种确定的基本输入。即用例不只是一种确定系统需求系统需求的工具,它还能驱动系统的设计、实现和测试的工具,它还能驱动系统的设计、实现和测试的进行。的进行。 基于用例模型,开发人员可以创建一系基于用例模型,开发人员可以创建一系列实现这些用例的设计模型和实现模型。开发列实现这些用例的设计模型和实现模型。开发人员可以审查每个后续建立的模型是否与用例人员可以审查每个后续建立的模型是否与用例模型一致。模型一致。 测试人员测试实现以确定实现模型的构测试人员测试实现以确定实现模型的构件是否实现了用例。所以用例启动了开发过程,件是否实现了用例。所以用例启动了开发过程,还使开发过程结合为一体。开发过程是沿着一还使开发过程结合为一体。开发过程是沿着一系列从用例得到的工作流前进的。系列从用例得到的工作流前进的。 下图显示了用例模型与其他模型之间的相下图显示了用例模型与其他模型之间的相关性:关性:用例模型用例模型由由建立建立分析模型分析模型为系统描述一为系统描述一系列类系列类由由设计设计设计模型设计模型为系统定义一为系统定义一系列子系统和系列子系统和界面界面由由实现实现实现模型实现模型将类映射将类映射到构件到构件由由分布分布测试模型测试模型由由验证验证验证系统验证系统是否提供是否提供了用例模了用例模型中描述型中描述的功能的功能实施模型实施模型定义软件定义软件部署部署(2)以构架()以构架(Architecture)为中心为中心 架构是一个系统的草图。软件架构描述的架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象际的组件,比如具体某个类或者对象 (3)迭代与增量的过程)迭代与增量的过程 迭代指工作流中的步骤,是反复求精的迭代指工作流中的步骤,是反复求精的概念;增量指产品中增加的部分概念;增量指产品中增加的部分,是逐块建造是逐块建造的概念。的概念。 迭代过程要处理一组用例,这组用例合迭代过程要处理一组用例,这组用例合起来能扩展所开发产品的可用性,后续的迭起来能扩展所开发产品的可用性,后续的迭代过程建立在前一次迭代过程末期所开发的代过程建立在前一次迭代过程末期所开发的产品上。产品上。 (4)基于构件)基于构件 统一过程所构造的软件系统,是由软件统一过程所构造的软件系统,是由软件构件通过明确定义的接口相互连接所建造起构件通过明确定义的接口相互连接所建造起来的。来的。(5)使用)使用UML 统一过程使用统一过程使用UML来制定软件系统的来制定软件系统的所有蓝图,所有蓝图,UML是整个统一过程的一个完是整个统一过程的一个完整部分,他们是共同发展起来的,它强调创整部分,他们是共同发展起来的,它强调创建和维护模型。建和维护模型。(6)过程可剪裁)过程可剪裁 RUP是一个过程模式,或过程定义是一个过程模式,或过程定义(PD)而非过程()而非过程(P)。可以根据系统的规)。可以根据系统的规模、项目的性质、开发组织的经验对过程加模、项目的性质、开发组织的经验对过程加以裁剪。以裁剪。 Ivar Jacobson 于于2005年发布了年发布了EssUP,即,即“超轻和超敏捷的超轻和超敏捷的”RUP。2007年,他提出年,他提出“Enough of Processes,Lets Do Practices”。 另外,在另外,在人员人员方面,方面,RUP定义了角色定义了角色的概念,从角色视角对不同人员从事的不同的概念,从角色视角对不同人员从事的不同活动进行了规范。活动进行了规范。 在在方法与产品方法与产品方面,方面,RUP提供了使用提供了使用UML进行可视化建模、基于用例驱动且以架进行可视化建模、基于用例驱动且以架构为中心的分析设计方法,并有相应的工具构为中心的分析设计方法,并有相应的工具支持支持,如如Rational Solutions,包括建模工具,包括建模工具Rose、文档自动生成工具、文档自动生成工具SoDA、测试工具、测试工具Purify和和Quality、配置管理工具、配置管理工具ClearCase、变更管理工具变更管理工具ClearQuest等。等。RUP强调了开强调了开发方法的统一发方法的统一、建模语言的统一、研究成果、建模语言的统一、研究成果的统一。的统一。 现代软件工程领域的一些专家普遍认为影现代软件工程领域的一些专家普遍认为影响软件实践的三个基本要素是:人、技术和响软件实践的三个基本要素是:人、技术和过程。过程。 RUP 主要强调的是过程,认为具有主要强调的是过程,认为具有好的过程才能生产出稳定质量的软件。好的过程才能生产出稳定质量的软件。 敏捷(敏捷(Agile)是一种从)是一种从1990年代开始年代开始逐渐引起广泛关注的一些新型软件开发方法逐渐引起广泛关注的一些新型软件开发方法,方法强调的是人,认为人才是创造的源泉,方法强调的是人,认为人才是创造的源泉,只有人与人之间的充分交流(包括与用户的只有人与人之间的充分交流(包括与用户的交流和开发着之间的交流)才是解决许多问交流和开发着之间的交流)才是解决许多问题的关键。是一种应对快速变化的需求的一题的关键。是一种应对快速变化的需求的一种软件开发能力。更强调程序员团队与业务种软件开发能力。更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。也更注重做为软件开发中人的作用。7月-24陕西理工学院 数计学院 软件工程第 110 页 2024年7月30日各模型比较图模型模型模型模型优点优点优点优点缺点缺点缺点缺点瀑布模型瀑布模型瀑布模型瀑布模型 文档驱动文档驱动文档驱动文档驱动 系统可能不满足客户系统可能不满足客户系统可能不满足客户系统可能不满足客户的需求的需求的需求的需求 快速原型模快速原型模快速原型模快速原型模型型型型 关注满足客户需关注满足客户需关注满足客户需关注满足客户需求求求求 可能导致系统设计差、可能导致系统设计差、可能导致系统设计差、可能导致系统设计差、效率低,难于维护效率低,难于维护效率低,难于维护效率低,难于维护 增量模型增量模型增量模型增量模型 开发早期反馈及开发早期反馈及开发早期反馈及开发早期反馈及时,易于维护时,易于维护时,易于维护时,易于维护 需要开放式体系结构,需要开放式体系结构,需要开放式体系结构,需要开放式体系结构,可能会设计差、效率可能会设计差、效率可能会设计差、效率可能会设计差、效率低低低低 螺旋模型螺旋模型螺旋模型螺旋模型 风险驱动风险驱动风险驱动风险驱动 风险分析人员需要有风险分析人员需要有风险分析人员需要有风险分析人员需要有经验且经过充分训练经验且经过充分训练经验且经过充分训练经验且经过充分训练 中国软件产业中国软件产业 中国软件产业的途径之一中国软件产业的途径之一(软件外包软件外包)印度软件产业发展与软件外包印度软件产业发展与软件外包q 中国向印度学习中国向印度学习发展软件外包业务发展软件外包业务中国目前外包业务与市场分析中国目前外包业务与市场分析q 中国目前中国目前80%80%的外包业务来自日、韩等亚洲国家的外包业务来自日、韩等亚洲国家q 印度的外包业务主要来自于美国印度的外包业务主要来自于美国q 中国和印度的不同中国和印度的不同( (文化、语言、软件工程意识文化、语言、软件工程意识) )2024年7月30日五部委联合报告:人才需求每年增加万五部委联合报告:人才需求每年增加万 目前,教育部、信息产业部、国防科工委、目前,教育部、信息产业部、国防科工委、交通部、卫生部联合发布数控技术应用、计算机交通部、卫生部联合发布数控技术应用、计算机应用与软件技术、汽车运用与维修、护理等四个应用与软件技术、汽车运用与维修、护理等四个专业领域的人才需求状况。其中,计算机应用与专业领域的人才需求状况。其中,计算机应用与软件技术人才需求最大,初步统计人才需求软件技术人才需求最大,初步统计人才需求量每年增加万。量每年增加万。 国内现有软件从业人员近10万人,其中专业人才约有70万人,其中高级人才15万人,中级人才35万人,初级人才20万人。人才结构呈两头小中间大的橄榄型结构,既缺乏一大批能从事基础性工作的“软件蓝领”,更缺乏既懂技术又懂管理的软件高级人才,即“软件金领”。根据国际经验,合理的软件人才市场应该是软件蓝领、软件工程师、软件架构与分析师并存的金字塔形状人才基数由大到小形成梯次,他们之间的比例应该是。 教育部关于紧缺人才的报告 软件工程教育的定位软件工程教育的定位n我国软件工程的专业教育与软件人才的链之间的我国软件工程的专业教育与软件人才的链之间的关系可描述为如下图:关系可描述为如下图:软件开发工程师架构设计师产品经理项目管理者系统分析师系统设计师程序员研究生教育本科教育大专教育中专教育1. 程序员岗位能力规定程序员岗位能力规定录录用用员员工工条条件件年龄范围:年龄范围:20-2520-25学历要求:学历要求:大专以上或中专以上并有计算机相关证书大专以上或中专以上并有计算机相关证书专业要求:专业要求:计算机及相关专业计算机及相关专业工作经历要求:工作经历要求:1.1.有从事软件编程的实习经历有从事软件编程的实习经历3-63-6个月以上。个月以上。 2.2.通过公司内部实习期。通过公司内部实习期。日语水平:日语水平:1.1.相当三级相当三级 2.2.或者有或者有4 4级证书级证书 3.3.或者进公司时能理解日语仕样书,熟悉日语环境或者进公司时能理解日语仕样书,熟悉日语环境技术水平:技术水平:1.1.熟悉和掌握基本的数据库熟悉和掌握基本的数据库 2.2.熟悉和掌握熟悉和掌握2 2门开发语言门开发语言 3.3.能胜任项目中编程能胜任项目中编程能力要求:能力要求:1.1.具备较强的学习能力具备较强的学习能力 2.2.工作积极主动,有责任心,有良好的品质意识工作积极主动,有责任心,有良好的品质意识岗岗位位工工作作描描述述1.1.能按时按质完成软件项目中的编码工作能按时按质完成软件项目中的编码工作2.2.能按时按质完成单体测试工作能按时按质完成单体测试工作3.3.能制作符合要求的测试报告能制作符合要求的测试报告4.4.能认真的参加项目内或部门、公司安排的培训,并且能达到培训要求。能认真的参加项目内或部门、公司安排的培训,并且能达到培训要求。5.5.每年的技术水平和日语水平考核有进步。每年的技术水平和日语水平考核有进步。2. 软件工程师岗位能力规定软件工程师岗位能力规定录录用用员员工工条条件件年龄范围:年龄范围:20-2720-27学历要求:大专以上学历要求:大专以上专业要求:计算机及相关专业专业要求:计算机及相关专业工作经历要求:工作经历要求:1.有从事软件编程一年以上的相关工作经历有从事软件编程一年以上的相关工作经历 2.通过公司内部试用期通过公司内部试用期日语水平:日语水平:1.相当三级相当三级 2.或者有或者有4级证书级证书 3.能理解日语仕样书,熟悉日语开发环境达一年能理解日语仕样书,熟悉日语开发环境达一年 技术水平:技术水平:1.熟悉运用熟悉运用SQL server、Oracle数据库数据库 2.熟悉运用熟悉运用VC、C+或或Java编程编程 3.能带一个实习生能带一个实习生 能力要求:能力要求:1.具备较强的学习能力具备较强的学习能力 2.工作积极主动,有责任心,有良好的品质意识工作积极主动,有责任心,有良好的品质意识 3.具有团队协作精神及沟通能力具有团队协作精神及沟通能力 岗岗位位工工作作描描述述1.能按时按质完成软件项目中的编码工作能按时按质完成软件项目中的编码工作2.能完成详细设计的任务能完成详细设计的任务3.能完成综合测试任务能完成综合测试任务4.能协助公司独立担当带好新手的任务能协助公司独立担当带好新手的任务 3. 高级软件工程师岗位能力规定高级软件工程师岗位能力规定录录用用员员工工条条件件年龄范围:年龄范围:25岁以上岁以上学历要求:本科以上或专科并有学历要求:本科以上或专科并有 计算机相关技术证书计算机相关技术证书 专业要求:专业要求:计算机及相关专业计算机及相关专业工作经历要求:工作经历要求:1.从事日本软件编程的工作经历超过三年从事日本软件编程的工作经历超过三年 2.有在项目中担任技术骨干的经验至少一年有在项目中担任技术骨干的经验至少一年 3.通过公司内部试用期。通过公司内部试用期。日语水平:日语水平:1.相当三级相当三级 2.能理解日语仕样书能理解日语仕样书 技术水平:技术水平:1.精通运用精通运用SQL server、Oracle数据库数据库 2.精通精通VC、C+或或Java,同类技术运用时间在三年以上,同类技术运用时间在三年以上 3.熟悉各种计算机开发语言。熟悉各种计算机开发语言。 能力要求:能力要求:1.具备较强的学习能力具备较强的学习能力 2.工作积极主动,有责任心,有良好的品质意识工作积极主动,有责任心,有良好的品质意识 3.具有团队协作精神及沟通能力具有团队协作精神及沟通能力 4.在项目组中有解决技术难题的能力或能起到项目组协理作用在项目组中有解决技术难题的能力或能起到项目组协理作用 岗岗位位工工作作描描述述1.能配合项目主管按时按质完成项目任务。能配合项目主管按时按质完成项目任务。2.在项目组内担当技术骨干作用或担当部门协理作用。在项目组内担当技术骨干作用或担当部门协理作用。3.首先理解项目中客户规定的首先理解项目中客户规定的“工具工具”,并能辅导组员掌握,并在整个项目中担当指,并能辅导组员掌握,并在整个项目中担当指导工作。导工作。4.担当事业部内或公司安排的技术培训任务。担当事业部内或公司安排的技术培训任务。5.能担任详细设计工作。能担任详细设计工作。 4. 项目主管岗位能力规定项目主管岗位能力规定录录用用员员工工条条件件年龄范围:年龄范围:2828岁以上岁以上学历要求:本科以上或专科并有学历要求:本科以上或专科并有 计算机相关技术证书计算机相关技术证书 专业要求:专业要求:计算机及相关专业计算机及相关专业工作经历要求:工作经历要求:1.1.从事日本软件编程的工作经历超过三年从事日本软件编程的工作经历超过三年 2.2.有项目主管、组长经历两年以上有项目主管、组长经历两年以上 3.3.通过公司内部试用期通过公司内部试用期日语水平:日语水平: 1.1.相当一级相当一级 2.2.二级以上证书二级以上证书技术水平:技术水平:1.1.熟悉各类数据库熟悉各类数据库 2.2.熟悉各种计算机开发语言熟悉各种计算机开发语言 3.3.熟悉特定的开发工具熟悉特定的开发工具能力要求:能力要求:1.1.具备较强的学习能力,具有进取心具备较强的学习能力,具有进取心 2.2.工作积极主动,有责任心,有良好的品质意识工作积极主动,有责任心,有良好的品质意识 3.3.具有上下沟通的能力具有上下沟通的能力 4.4.具有项目组与项目组之间的合作意识和整体意识。具有项目组与项目组之间的合作意识和整体意识。岗岗位位工工作作描描述述1.1.项目开始前的准备,培训计划制定、环境构成、体制及人员安排项目开始前的准备,培训计划制定、环境构成、体制及人员安排2.2.项目开发标准的实施项目开发标准的实施3.3.整个项目过程的控制,进度管理整个项目过程的控制,进度管理4.4.项目项目QAQA管理,负责项目总体测试工作管理,负责项目总体测试工作5.5.项目后期的文档整理,维护对应计划及安排,项目总结,项目成员能力评价项目后期的文档整理,维护对应计划及安排,项目总结,项目成员能力评价6.6.保密计划和质量计划等(特殊要求的项目)的制定、实施保密计划和质量计划等(特殊要求的项目)的制定、实施7.7.组织解决技术方面重大问题和及时应对的处理。组织解决技术方面重大问题和及时应对的处理。5. 项目经理岗位能力规定项目经理岗位能力规定录录用用员员工工条条件件年龄范围:年龄范围: 28岁以上岁以上学历要求:本科以上或专科并有学历要求:本科以上或专科并有 计算机相关技术证书计算机相关技术证书 专业要求:专业要求:计算机及相关专业计算机及相关专业工作经历要求:工作经历要求:1.有项目经理经历两年以上有项目经理经历两年以上 2.同时有日本工作经验一年以上同时有日本工作经验一年以上 3.通过公司内部试用期通过公司内部试用期日语水平:日语水平:1.日语一级日语一级 技术水平:技术水平:1.熟悉各类数据库熟悉各类数据库 2.熟悉各种计算机开发语言熟悉各种计算机开发语言 3.熟悉特定的开发工具熟悉特定的开发工具 能力要求:能力要求:1.具备较强的学习能力,具有进取心具备较强的学习能力,具有进取心 2.工作积极主动,有责任心,有良好的品质意识工作积极主动,有责任心,有良好的品质意识 3.具有上下沟通的能力具有上下沟通的能力 4.具有项目组与项目组之间的合作意识和整体意识具有项目组与项目组之间的合作意识和整体意识 5.能灵活安排好项目与项目之间的衔接及人员调度能灵活安排好项目与项目之间的衔接及人员调度 岗岗位位工工作作描描述述1.项目开始前的准备,培训计划制定、环境构成、体制及人员安排项目开始前的准备,培训计划制定、环境构成、体制及人员安排2.项目开发标准的实施项目开发标准的实施3.整个项目过程的控制,进度管理整个项目过程的控制,进度管理4.维护对应计划几安排,项目总结,项目成员能力评价维护对应计划几安排,项目总结,项目成员能力评价5. 保密计划和质量计划等(特殊要求的项目)的制定、实施保密计划和质量计划等(特殊要求的项目)的制定、实施6.组织解决技术方面重大问题和及时应对的处理组织解决技术方面重大问题和及时应对的处理7.能合理安排项目与项目之间的进度能合理安排项目与项目之间的进度 小结1、理解:程序、软件、软件工程的概念,软件生存期各阶段的特点和内容,软件危机产生的原因。2、应用:软件生存周期模型,快速原型法,螺旋模型,构件组装模型。3、了解:软件发展的4个阶段及特点,软件危机的产生及其表现形式。4、关注:软件工程的开发方法。作业1. 说明“软件生命周期”的概念2. 软件生命期为什么要划分成阶段?怎样划分?各阶段有何特点?谢谢使用谢谢使用本课件本课件! !
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号