版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/1/311软件工程软件工程2023/1/312软件工程介绍
软件工程(SoftwareEngineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
软件工程师是对应用软件创造软件的人们的统称,软件工程师按照所处的领域不同可以分为系统分析员,软件设计师,系统架构师,程序员,测试员等等。人们也常常用程序员来泛指各种软件工程师。2023/1/313软件工程(SoftWareEngineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。2023/1/314一、软件工程概述
软件工程是一类工程。工程是将理论和知识应用于实践的科学。就软件工程而言,它借鉴了传统工程的原则和方法,以求高效地开发高质量软件。其中应用了计算机科学、数学和管理科学。计算机科学和数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量和成本的管理。
软件工程这一概念,主要是针对20世纪60年代“软件危机”而提出的。它首次出现在1968年NATO(北大西洋公约组织)会议上。自这一概念提出以来,围绕软件项目,开展了有关开发模型、方法以及支持工具的研究。其主要成果有:提出了瀑布模型,开发了一些结构化程序设计语言(例如PASCAL语言,Ada语言)、结构化方法等。并且围绕项目管理提出了费用估算、文档复审等方法和工具。综观60年代末至80年代初,其主要特征是,前期着重研究系统实现技术,后期开始强调开发管理和软件质量。
70年代初,自“软件工厂”这一概念提出以来,主要围绕软件过程以及软件复用,开展了有关软件生产技术和软件生产管理的研究与实践。其主要成果有:提出了应用广泛的面向对象语言以及相关的面向对象方法,大力开展了计算机辅助软件工程的研究与实践。尤其是近几年来,针对软件复用及软件生产,软件构件技术以及软件质量控制技术、质量保证技术得到了广泛的应用。目前各个软件企业都十分重视资质认证,并想通过这些工作进行企业管理和技术的提升。软件工程所涉及的要素可概括如下:2023/1/315
根据这一框架,可以看出:软件工程涉及了软件工程的目标、软件工程原则和软件工程活动。
目标:我的眼里只有“产品”
软件工程的主要目标是:生产具有正确性、可用性以及开销合宜的产品。正确性意指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜性是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多问题有待解决,它们形成了对过程、过程模型及工程方法选取的约束。
软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件体系结构,包括子系统、模块以及相关层次的说明、每一模块接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。支持活动包括修改和完善。伴随以上活动,还有管理过程、支持过程、培训过程等。2023/1/316框架:四项基本原则是基石
软件工程围绕工程设计、工程支持以及工程管理,提出了以下四项基本原则:
第一,选取适宜开发范型。该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其他因素之间是相互制约、相互影响的,经常需要权衡。因此,必须认识需求定义的易变性,采用适宜的开发范型予以控制,以保证软件产品满足用户的要求。
第二,采用合适的设计方法。在软件设计中,通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。
第三,提供高质量的工程支持。“工欲善其事,必先利其器”。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。
第四,重视开发过程的管理。软件工程的管理,直接影响可用资源的有效利用,生产满足目标的软件产品,提高软件组织的生产能力等问题。因此,仅当软件过程得以有效管理时,才能实现有效的软件工程。
这一软件工程框架告诉我们,软件工程的目标是可用性、正确性和合算性;实施一个软件工程要选取适宜的开发范型,要采用合适的设计方法,要提供高质量的工程支撑,要实行开发过程的有效管理;软件工程活动主要包括需求、设计、实现、确认和支持等活动,每一活动可根据特定的软件工程,采用合适的开发范型、设计方法、支持过程以及过程管理。根据软件工程这一框架,软件工程学科的研究内容主要包括:软件开发范型、软件开发方法、软件过程、软件工具、软件开发环境、计算机辅助软件工程(CASE)及软件经济学等。2023/1/317二、软件工程的七条基本原理
自从1968年提出“软件工程”这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国著名的软件工程专家Boehm综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。
Boehm认为,着七条原理是确保软件产品质量和开发效率的原理的最小集合。
它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。下面简要介绍软件工程的七条原理:1用分阶段的生命周期计划严格管理
这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。Boehm认为,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。2023/1/3182坚持进行阶段评审
统计结果显示:大部分错误是在编码之前造成的,大约占63%;<2>错误发现的越晚,改正它要付出的代价就越大,要差2到3个数量级。因此,软件的质量保证工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。3实行严格的产品控制
开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求。也就是要采用变动控制,又叫基准配置管理。当需求变动时,其它各个阶段的文档或代码随之相应变动,以保证软件的一致性。4采纳现代程序设计技术
从六、七时年代的结构化软件开发技术,到最近的面向对象技术,从第一、第二代语言,到第四代语言,人们已经充分认识到:方法大似气力。采用先进的技术即可以提高软件开发的效率,又可以减少软件维护的成本。5结果应能清楚地审查
软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。
2023/1/3196开发小组的人员应少而精
开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。
这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多;当开发小组为N人时,可能的通讯信道为N(N-1)/2,可见随着人数N的增大,通讯开销将急剧增大。7承认不断改进软件工程实践的必要性
遵从上述六条基本原理,就能够较好地实现软件的工程化生产。但是,它们只是对现有的经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。
面向方面的编程(AspectOrientedProgramming,简称AOP)被认为是近年来软件工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程(GenericProgramming)和模板。2023/1/3110三、怎样培养软件工程的思维与方法
作为软件开发人员的一个通病是在项目初期的时候,就喜欢谈论实现的细节,并且乐此不疲。我们更喜欢讨论如何用灵活而简短的代码来实现一个特定的功能,而忽略了对整个系统架构的考虑。所以作为一个开发人员,尤其是一个有经验的开发人员,应该把自己从代码中解脱出来,更多的时候在我们的脑子里甚至暂时要放弃去考虑如何实现的问题,而从项目或产品的总体去考虑一个软件产品。以下是我个人的一些经验:
1.考虑整个项目或者产品的市场前景。作为一个真正的系统分析人员,不仅要从技术的角度来考虑问题,而且还要从市场的角度去考虑问题。也就是说我们同时需要考虑我们产品的用户群是谁,当我们产品投放到市场上的时候,是否具有生命力。比如即使我们采用最好的技术实现了一个单进程的操作系统,其市场前景也一定是不容乐观的。
2.从用户的角度来考虑问题。比如一些操作对于开发人员来讲是非常显而易见的问题。但是对于一般的用户来说可能就非常难于掌握,也就是说,有时候,我们不得不在灵活性和易用性方面进行折中。另外,在功能实现上,我们也需要进行综合考虑,尽管一些功能十分强大,但是如果用户几乎不怎么使用它的话,就不一定在产品的第一版的时候就推出。从用户的角度考虑,也就是说用户认可的才是好的,并不是开发人员觉的好才好。
3.从技术的角度考虑问题。虽然技术绝对不是唯一重要的,但是技术一定是非常重要的,是成功的必要环节。在产品设计的时候,必须考虑采用先进的技术和先进的体系结构。比如,如果可以采用多线程进行程序中各个部分并行处理的话,就最好采用多线程处理。在Windows下开发的时候,能够把功能封装成一个单独的COM构件就不作成一个简单的DLL或者是以源代码存在的函数库或者是对象。比如能够在B/S结构下运行并且不影响系统功能的话就不一定要在C/S下实现。2023/1/31114.合理进行模块的分割。从多层模型角度来讲,一般系统可以分成用户层、业务层和数据库层三部分。当然每以部分都还可以进行细分。所以在系统实现设计的时候,尽量进行各个部分的分割并建立各个部分之间进行交互的标准。并且在实际开发的时候,确实有需要的话再进行重新调整。这样就可以保证各个部分齐头并进,开发人员也可以各施其职。
5.人员的组织和调度。这里很重要的一点是到考虑人员的特长,有的人喜欢做界面,有的人喜欢做核心。如果有可能要根据人员的具体的情况进行具体的配置。同时要保证每一个开发人员在开发的时候首先完成需要和其他人员进行交互的部分,并且对自己的项目进度以及其他开发人员的进度有一个清晰的了解,保证不同部分的开发人员能够经常进行交流。
6.开发过程中文档的编写。在开发过程中会碰到各种各样的问题和困难,当然还有各种各样的创意和新的思路。应该把这些东西都记录下来并进行及时整理,对于困难和问题,如果不能短时间解决的,可以考虑采用其他的技术替代,并在事后做专门的研究。对于各种创意,可以根据进度计划安排考虑是在本版本中实现还是在下一版本中实现。
7.充分考虑实施时可能遇到的问题。开发是一回事情,用户真正能够使用好它又是另外一回事情。比如在MIS系统开发中,最简单的一个问题就是用户如果数据输入错误的时候,如何进行操作。在以流程方式工作的时候,如何让用户理解自己在流程中的位置和作用,如何让用户真正利用计算机进行协作也是成败的关键。以上是我个人的一点体会,实际上,作为一个软件开发人员,我也喜欢看到问题就坐在计算机前面直接编码,但是我确实认为软件工程对于我们系统开发的指导作用是巨大的。作为软件工程的拥戴者,下面我简单结合自己的开发经历介绍基于软件工程的开发方法、编程规范和工具使用等方面的问题。2023/1/3112四、软件开发的发展变化
国外很多项目的开发都是基于一些图形化的东西来做的,他们的目的是尽量少写代码甚至不写代码。代码能够通过图形化的方式自动生成,这样的一个好处就是如果用户的需求变化或者业务逻辑发生变化,我们需要做的就是对图形表示的调整,然后重新自动生成代码,这也就是国外开发很注重对项目的概念和逻辑分析的原因。他们的重点是把业务规则和需求用图形化的方式表现出来,然后通过CASE工具自动生成代码。所以当国人还在不停的开发一个又一个的MIS工具的时候,国外已经把很多精力放到了CASE工具的制作上。我们很多公司人员忙着写具体业务过程的相关代码,而国外很多都把精力放到对不同应用,不同行业的模型的建立和共性的提取上。所以,他们做出来的东西就相对具有很强的灵活性和扩展性,而我们是用户的需求稍微有一点变化,就要忙着改代码,甚至改体系结构。另外,因为他们注重模型的建立,所以在建立其他应用的时候,能够借鉴原先的模型,在高层次上做调整和优化,同时能够有效的提取原有系统中可以被使用的部分。所以我们应该从以代码为核心的软件开发模式转化到以模型为中心的、基于CASE的开发上来。2023/1/3113关于协作与个人英雄主义社会进步的一个很明显的现象就是社会分工越来越细,软件的开发也不例外。为什么在软件开发的今天已经不能出现象裘伯君这样的软件英雄的原因也在这里,单凭个人之力,我们也许穷尽有生之年也开发不出象Windows这样的操作系统。
因为,当前软件行业的壁垒无非就是两个,一个就是以技术创新取胜,你模仿的了其中的界面,但是你没有办法实现其中的核心功能。结果是你只能购买其技术核心,而你作一些边角工作。不举别的例子,比如VB这样的开发工具,其核心部分是它和第三方提供的COM控件或者是DLL函数库,你所做的就是一个整合的工作。第二个就是以细致取胜,也就是说功能很多而且做的很精致,即使技术本身不是很复杂,你真要想做出一个这样的东西来没有一两年的工夫是不可能的。而真等你做出来了,它的新版本也早已经推出。真正能够在市面上叫得想、经得起考验得产品都是具有这两方面的特点。这两方面的特点决定了你一个人绝对是不可能胜任的,也许你可以独立的完成技术创新,但是你绝对不可能一个人实现所有这些纷繁复杂的功能。所以,这个时代需要创新的英雄,也更需要人与人之间的协作。
当今的软件发展已经不是一个人可以包打天下的年代。软件开发的管理、系统体系结构的设计、模块之间的衔接、核心算法的实现、灵活界面的制定、软件再开发接口的实现都需要专门的人来做。而把这些有效的集成显然就需要有效的利用软件工程的思想和方法。所以,真正的软件英雄绝对不再是写着别人看不懂代码的程序员,而是整个体系结构的分析、设计、标准制定、协调人员。2023/1/3114五、我们是否需要软件工程
有一点大家可以达成共识的就是,如果一个象Windows这样的操作系统,不进行全面的规划,不采用软件工程的思想和方法,是绝对搞不出来的。
Windows的成功不在于它在进程管理和调度,文件系统、内存管理、界面设计等方面有多少成功的创新,它的成功最大的一点就是把所有的技术能够合理的整合起来,并集中到一个Window操作系统特有的框架结构中去。更为重要的是,Windows的每一项技术创新都能够有效的整合到Windows框架中去,比如COM、XML等技术,通过ActiveX、DCOM等技术使Windows从桌面操作系统发展成为一个基于网络的操作系统。
OLE2技术把整个Office中相关的软件进行了有效的整合,显然,这里我们可以把Office的设计和WPS的设计进行比较,客观的讲,WPS对中国用户来说实在也是一个很好的产品。但是从整个系统设计概念上来讲,Office显然要比WPS高一个层次,它能够把WORD,EXCEL,POWERPOINT,ACCESS有效的整合在一起,使我们所有办公相关的文档、图表、数据库、演示变成了一个一体化的东西。而且通过宏调用,用户可以自己定制用户界面并编制适当的模板,单是这个二次开发功能就不是WPS现在所能及项背的,当然限于当前用户的水平还很少有人使用二次开发的功能。2023/1/3115
从微软产品系列可以看到软件工程的作用,微软的所有产品都有一个整体的框架结构,比如Office软件,通过OLE技术进行有效的通讯和联系。比如Visual系列开发工具,提供了相似的开发界面使用户学会一种开发工具以后能够很容易的学习其他的开发工具。比如SQLSERVER和ACCESS,尽管它们适用的范围不同,但是它们表现给用户的界面,特别是在查询和分析上表现了高度的一致性。更值得一提的是,因为设计结构的合理性,因为在开发前期作了很多分析和调研,考虑了扩展性和伸缩性,微软的系列产品能够很快的利用新的技术并采用统一的结构形式表现出来。比如当网络成为计算机发展的主流的时候,几乎微软所有的工具都能够快速的支持基于网络的开发和应用。相比之下,我们国内很多公司的产品很少具有连续性,往往是新的一个产品完全重起炉灶,和老的产品没有半点关系。这就是我们在设计产品的时候,没有很好的进行抽象和概念、逻辑设计,造成的结果是从旧的产品中提取不出一些有用的、共性的东西为后来的产品所使用。当然,很多开发人员从心里也承认一个大的系统确实需要软件工程的依托,但是一个小的工程项目是否就可以仓促上马呢?答案是否定的。所谓麻雀碎小,五脏俱全。无论是大项目、还是小项目。它们作为一个项目,都需要有一个需求分析、系统结构建立、设计、编码、测试等阶段。这是任何一个项目都不可缺少的。2023/1/3116
往往可以看到很多大公司的IT部门的人员都在不停的作各种各样的报表,当各个部门提出一种新类型的报表的时候,就从数据库中提取相应的数据并画出业务人员所需要的样式结构,很少是提供了一个通用的模板,当然提供高层API接口进行这种操作的就更少了。这样不可避免的使开发人员陷入一些琐碎的报表编制工作。而造成这个局面的很重要的一个原因就是没有在系统开发的前期进行很好的调研、需求分析和系统体系结构的设计。这里就一些小型软件项目来谈一些开发的总结和体会,一般来说,小型软件项目功能比较单一,而且模块与模块之间的衔接不是很多,同时对开发周期要求比较短。小项目虽然看起来比较简单,所以很多开发人员容易犯一些错误,记得我们在开发一个基于Internet的有偿服务系统的时候,有三个开发人员:一个负责前端界面的编写,一个负责数据通讯协议和实现(基于TCP基础上的应用协议),一个负责对数据库数据的查询、整理和提取。我们在开发的时候没有认真地进行项目实际前途和工作量的估计。没有认真地估计项目难度,比如对于通讯中多用户并发访问时的多线程问题和缓存处理问题,用户批量请求处理的实现复杂度问题等等。三个人之间的接口也是在开发中休息的时候,口头定义一下。结果发现有不严密的地方(比如在通讯服务器端是用VC编写的,开发人员是通过stream来传送数据的,客户端是用Delphi编写,在接收数据的时候发现数据不准确,后来研究发现VC利用CSocket在传送数据流的时候对数据进行了自己定义的格式化,结果服务器端数据发送模块只好重写),而且其中关于一个接口双方的理解不同,然后又返工重新修改。最后到系统基本完成的时候没有一份较正式的文档。然后因为有人毕业离开这个项目,然后他编写的模块需要升级,新的接收的人不得不花很多时间去阅读他的源代码。2023/1/3117
所以在开发小项目的时候也必须要建立合理的模式:而所谓合理的模式就是软件工程告诉我们的在开发一个项目的时候所需要的五步曲:获取需求、需求分析、设计、编码、测试。
1.理解用户真正的需求。在进入正式开发之前,必须先从用户处获取准确的需求。在这上面花费相当时间是很必要的。我们软件项目可以大致分为专用软件和通用软件两大类。对于专用软件,一般用户对于软件要完成哪些功能已经有了一个比较清楚的轮廓,而且往往在开发合同中已经大致地规定了。但是,开发合同上规定的只是一个大概的框架,在进入开发之前必须与用户进行比较具体的交流和讨论,了解清楚用户心目中的产品究竟是什么样子,这里最好就采用原型化的方法作出一个简单的框架给用户看。对于通用软件,在开发之前必须做一定的市场调查工作,一方面是从经济效益考虑,调查产品的潜在市场有多大,一方面是从技术的角度,了解清楚潜在用户对软件的各种技术上的要求,另一方面是确定我们软件的定位,即我们软件具体是为哪一些用户群体服务的。然后对该群体用户现有硬件配置,软件配置,网络使用情况,数据库使用情况,计算机熟悉程度做一定的调研,根据调查的统计结果决定即将开发的软件的一些技术指标。
2023/1/31182.需求分析。需求分析需要做的事情有:高层构思、确立系统目标、划分业务领域、现行业务分析、建立业务模型(EnterpriseModel)、信息需求分析、用户视图规范化、数据元素标准化与一致性控制。在了解用户的需求之后,将需求用一种模型来表示,就是需求分析,一般我们可以面向对象的方法,通过分析用户需求,用类、类之间的各种关系来表示整个系统。为了讨论软件运行的流程,可以采用UML的UseCase图。在系统分析的时候需要明确应用域(applicationdomain)的范围,然后明确我们系统需要做什么。同时我们需要决定用什么方法来完成需求的获取,这在很大程度上影响了需求分析的做法。例如可以采用UseCase来表示用户需求,那么从各种序列图中选出相互交互的各个实体,就是一个个类。另外分析需要与设计过程相衔接。分析过程的内容是用对象和对象之间的关系来表示整个系统和系统的流程的,并不设计具体实现,如采用什么编程语言,在什么操作系统平台上运行等等。这些具体实现是在设计阶段来完成的。面向对象方法的优点是分析、设计、编码过程表示法统一,能比较好的衔接。现在很多CASE工具并不区分分析和设计的阶段。但是,这并不意味着开发就可以对分析和设计不加区分,如何用好辅助设计(case)工具还是开发人员的事情。2023/1/31193.设计过程。设计阶段的工作包括对分析模型进行必要的修改,同时可能需要对某些类结构做一些修改,确定用户表示层(也就是通俗所说的界面定义)、用户服务层、业务逻辑层、数据库服务层和具体数据库所需要做的工作。同时需要确定使用的体系结构(比如B/S还是C/S)和开发工具(如VB,VC,VI,C++Builder,DELPHI,PowerBuiler等等)
4.编码。进入编码工作之后,依然可能会发现前面分析或设计阶段的某些错误,这时应返回到前面的阶段进行必要的修改。同时在编码前规定编码的风格并在开发过程中保持一致的风格。
5.测试。测试是系统投入使用前最关键的一个步骤。即使是小项目也应该严格地进行测试。就实际上就是一个把错误留给自己还是留给客户的问题。2023/1/3120最后,我们知道软件项目主要是由开发人员完成的,所以对人员的合理安排和配置也很重要,一般在开发过程中,需要有一位项目负责人,负责分析、设计和协调的工作。另外需要几个程序员完成不同层的代码(比如用户服务层、业务逻辑层、数据库服务层等等)。同时需要有一个文档整理人员随时整理系统开发过程中相关的文档。如果条件可能的话,要配置一个测试工程师,专门进行代码的测试工作,当然如果条件不允许的话,也可以由开发人员交叉测试。这里需要注意的是,对于项目负责人而言,协调几个人的工作比自己完成一段编码更重要。由于协调上出了漏洞,可能导致很大的问题,所以项目负责人必须随时监控各开发人员的工作,包括内容是否与要求发生偏差,进度是否滞后等等。同时必须给每个开发人员明确的任务书。具体开发时每个开发人员必须非常明确自己的任务,这些任务应该采用明确的文档来表示。每个开发人员需要清楚自己所做的工作在整个系统中处于什么地位,这样就有可能会发现设计模型中的漏洞,避免了各人的代码编写完毕之后又要修改的后果。2023/1/3121六、软件工程的发展方向
“敏捷开发”(AgileDevelopment)被认为是软件工程的一个重要的发展。它强调软件开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。
敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”(ExtremeProgramming,简称为XP)。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子比如CMM/PSP/TSP。2023/1/3122软件工程概述1第一章2023/1/3123第一章软件工程概述11.1软件工程的产生和发展1.2软件与软件生存期1.3
软件生存期模型1.5软件开发工具1.4软件开发方法2023/1/31241.1软件工程的产生和发展目录11.1.2软件危机1.1.3软件工程的定义1.1.1软件工程的发展过程1.1.4软件工程研究的内容1.1软件工程的产生和发展2023/1/31251.2软件与软件生存期目录11.2.1软件的概念和特点1.2.2软件工程过程1.2.3软件生存期1.2软件与软件生存期2023/1/31261.3软件生存期模型目录11.3.3增量模型1.3.1瀑布模型1.3.2循环模型1.3.4螺旋模型1.3.5喷泉模型1.3.6智能模型1.3软件生存期模型2023/1/31271.4软件开发方法目录11.4.2面向数据结构的开发方法1.4.1结构化开发方法1.4.3原型化开发方法1.4.4面向对象的开发方法1.4软件开发方法2023/1/31281.5软件开发工具目录11.5.2软件工程环境1.5.1计算机辅助软件工程1.5软件开发工具2023/1/31291.1软件工程的产生和发展1.1软件工程的产生和发展软件工程(SoftwareEngineering)是在克服20世纪60年代末所出现的“软件危机”的过程中逐渐形成与发展的。在不到40年的时间里,在软件工程的理论和实践两方面都取得了长足的进步。由于软件工程是一门指导计算机软件系统开发和维护的工程学科,是一门新兴的边缘学科,涉及到计算机科学、工程科学、管理科学、数学等多学科,研究的范围广,主要研究如何应用软件开发的科学理论和工程技术来指导大型软件系统的开发。例如现代操作系统的开发,如果不采用软件工程的方法是不可能的。在我国加入WTO后,大力推广、应用软件工程的开发技术及管理技术,提高软件工程的应用水平,对促进我国软件产业与国际接轨,推动我国软件产业的迅速发展起着十分重要的关键作用。2023/1/31301.1.1软件工程的发展过程1.1.1软件工程的产生和发展自从第一台计算机诞生以来,就开始了软件的生产,到目前为止,软件发展经历了三个阶段:
1.程序设计时代(1946-1956年)采用“个体生产方式”,即软件开发完全依赖于程序员个人的能力水平。
2.程序系统时代(1956-1968年)由于软件应用范围及规模的不断扩大,个体生产已经不能够满足软件生产的需要,一个软件需要由几个人协同完成,采用“生产作坊方式”。该阶段的后期,随着软件需求量、规模及复杂度的增大,生产作坊的方式已经不能够适应软件生产的需要,出现所谓“软件危机”。
3.软件工程时代(1968年至今)这阶段的主要任务是为了克服软件危机,适应软件发展的需要,而采用“工程化的生产”方式。软件工程的产生和发展是与软件的发展紧密相关的。2023/1/31311.1.2软件危机
“软件危机”(Softwarecrisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。例如:
IBM公司的OS/360,共约100万条指令,花费了5000个人年;经费达数亿美元,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“…像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。…”1963年,美国飞往火星的火箭因为一个软件错误而爆炸。
1967年8月23日,原苏联”结盟一号”载人宇宙飞船也因软件错误烧毁。
“软件危机”主要表现在两个方面:
(1)软件产品质量低劣,甚至开发过程就夭折。
(2)软件生产率低,不能满足需要。1.1.2软件危机2023/1/31321.1.3软件工程的定义1.1.3软件工程的定义
自从1968年提出软件工程这个术语,对于软件工程就有了各种各样的定义,但是它们的基本思想都是强调在软件开发过程中应用工程化原则的重要性。
Boehm定义:“运用现代科学技术知识时间并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。”。IEEE(国际电气与电子工程师协会)的定义是:软件工程是开发、运行、维护和修复软件的系统方法。——1988年IEEE又将定义更改为:对软件开发、运作、维护的系统化的、有规范的、可定量的方法之应用,即是对软件的工程化应用。——1990年软件工程三要素:方法、工具和过程软件工程方法:研究软件开发“如何做”的技术。软件工具:研究支撑软件开发方法的工具、软件工具的集成环境—计算机辅助软件工程CASE。软件工程过程:将软件工程方法与软件工具相结合实现合理、及时地进行软件开发的目的。2023/1/31331.1.4软件工程研究的内容
1.研究内容软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广。归结起来软件工程研究的主要内容有以下几方面:}软件开发软件开发方法、技术软件开发工具及环境软件管理技术软件规范(国际规范)}软件管理(1)软件开发技术(软件结构、开发方法、工具与软件工程环境、软件工程标准化)
(2)软件工程管理(质量管理,软件工程经济学:成本估算,计划安排)软件工程研究的目标是“以较少的投资获取较高质量的软件”。1.1.4软件工程研究的内容本课程主要讨论:2023/1/3134软件工程项目具有多目标特性,其基本目标如图所示:低开发成本易于维护高可靠性高性能按时交付互斥互补可见,软件工程所追求的目标是:
多、快、好、省1.1.4软件工程研究的内容2.软件工程的基本目标
软件工程的产生源于克服软件危机,其最终目标是要实现软件生产的自动化,也只有那样,才有可能真正彻底克服软件危机。由于软件开发的特殊性;软件开发过程是高密集性的脑力劳动,使开发过程的复杂性难以控制。2023/1/31351.2软件与软件生存期1.2软件与软件生存期为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在1968年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。为了进一步学习有关软件工程的方法、技术,先介绍软件、软件生存期及软件工程过程这几个重要的概念。2023/1/31361.2.1软件的概念和特点1.2.1软件的概念和特点一、软件要纠正软件就是程序,开发软件就是编写程序的错误观念。
软件是“程序以及开发使用维护程序所需的所有文档”,由应用程序、系统程序、面向用户的文档及面向开发者的文档4部分构成。二、软件的特点
1.软件是一种逻辑实体,不是具体的物理实体。
2.软件产品的生产主要是研制。
3.软件具有“复杂性”,其开发和运行常受到计算机系统的限制。
4.软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式。
5.软件不存在磨损和老化问题,但存在退化问题。2023/1/3137硬件失效率曲线,是一U型曲线(即浴盆曲线)。软件失效率曲线,它没有U型曲线的右半翼。因为软件不存在磨损和老化问题,然而存在退化问题。失效率时间
硬件失效率曲线失效率时间实际曲线理想曲线
软件失效率曲线1.2.1软件的概念和特点软、硬件失效情况的对比2023/1/31382.按照软件规模划分类别参加人数研制期限产品规模(源代码行数)微型11–4周500小型11–6月1000–2000中型2-51–2年5–50000大型5-202–3年50–500000甚大型100-10004–5年1000000极大型2000-50005–10年1000000–100000001.2.1软件的概念和特点软件分类三、软件的分类1.按照软件功能划分系统软件
—
如操作系统、设备驱动程序等。支撑软件(实用软件)—
协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。应用软件
—
如工程与科学计算软件、CAD/CAM软件、CAI软件、信息管理系统等。2023/1/31393.按照软件工作方式划分实时处理软件 交互式软件 批处理软件4.按照软件服务对象的范围划分项目软件—
由客户委托开发的软件。产品软件—
由软件开发机构开发,提供给市场的。此外,还可以按照软件使用的频度及按照软件失效的影响进行划分。
1.2.1软件的概念和特点分类续2023/1/3140软件工程过程(Softwareengineeringprocess):是指在软件工具的支持下,所进行的一系列软件工程活动。
通常包括以下四类基本过程:1.软件规格说明:规定软件的功能及其运行环境。2.软件开发:产生满足规格说明的软件。3.软件确认:确认软件能够完成客户提出的要求。4.软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。
软件工程过程的特性:
1.可理解性 2.可见性(过程的进展和结果可见)
3.可靠性 4.可支持性(易于使用CASE工具支持)
5.可维护性 6.可接受性(为软件工程师接受)
7.开发效率 8.健壮性(抵御外部意外错误的能力)1.2.2软件工程过程1.2.2软件工程过程2023/1/3141软件生命周期(SDLD)是指从软件开始开发到报废的全过程,亦称软件生存期(lifecycle)。一般用经典的瀑布模型来描述。GB8567中规定,软件生命周期分为7个阶段:1.可行性研究和项目开发计划2.
需求分析3.概要设计4.
详细设计5.编码6.
测试7.维护
在大部分文献中将生存周期划分为5个阶段,即需求定义、设计、编码、测试及维护。其中需求定义阶段包括可行性研究和项目开发计划、需求分析,设计阶段包括概要设计和详细设计。 为了描述软件生存期的活动,提出了多种生存期模型,例如:
瀑布模型、循环模型、演化模型、螺旋模型等。1.2.3软件生存期1.2.3软件生存期2023/1/31421.3软件生存期模型
软件生存周期模型是描述软件开发过程中各种活动如何执行的模型。目前有若干软件生存期模型,各种模型有其不同的特点,并适用于不同的开发方法。1.3软件生存期模型瀑布模型(waterfallmodel)循环模型(loopmodel)增量模型(incrementalmodel)螺旋模型(spiralmodel)喷泉模型(fountainmodel)智能模型(intelligentmodel)2023/1/31431.3.1瀑布模型
瀑布模型是将软件生存周期各活动规定为依线性顺序联接的若干阶段的模型。瀑布模型的表示如图所示。该模型说明整个软件开发过程是按图中的各个阶段进行的,每个阶段的任务完成之后,产生右边相应的文档。1.3软件生存期模型问题定义编程需求分析设计可行性研究运行与维护测试开发时期运行时期计划时期(目标与范围说明书)(可行性论证报告)(维护报告)(测试报告)(程序)(设计文档)(需求说明书)
瀑布模型2023/1/31441.3.2循环模型
为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段,采用循环模型描述。1.3.2循环模型需求分析设计编码测试运行评价计划
循环模型2023/1/3145
增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。1.3.3增量模型定义概要需求把需求分配给增量设计系统结构开发系统增量验证增量组装增量验证系统系统不完全最终系统
增量模型1.3.3增量模型2023/1/3146
螺旋模型对于大型软件,只开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,并加入了风险分析。1.3.4螺旋模型
螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤:第一,确定目标、方案和限制条件;第二,评估方案、标识风险和解决风险;第三,开发确认产品;第四,计划下一周期工作。
螺旋模型2023/1/3147需求分析设计编码测试运行评价计划问题定义编程需求分析设计可行性研究运行与维护测试开发时期运行时期计划时期(目标与范围说明书)(可行性论证报告)(维护报告)(测试报告)(程序)(设计文档)(需求说明书)瀑布模型循环模型螺旋模型几种模型原型化模型快速分析或修改评价构造运行生存期模型2023/1/31481.3.5喷泉模型分析系统设计软件设计实现喷泉模型
该模型是由B.H.Sollers和J.M.Edwards于1990年提出的一种新的开发模型。主要用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。
其特点如下:
1.开发过程有分析、系统设计、软件设计和实现4个阶段。2.各阶段相互重叠,它反映了软件过程并行性的特点。3.以分析为基础,资源消耗成塔型。4.反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。5.强调增量开发,整个过程是一个迭代的逐步提炼的过程。
1.3.5喷泉模型2023/1/31491.3.6智能模型
智能模型(intelligentmodel)也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。其主要特点是必须建立知识库,并将模型本身、软件工程知识、特定领域知识放入知识库。具体描述可以使用形式功能规约,也可以使用知识处理语言描述等。其模型如图1.9所示。1.3.6智能模型获取需求需求分析具体描述优化程序调整验证维护知识库专家系统程序智能模型2023/1/31501.4软件开发方法1.4软件开发方法软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。为了克服软件危机,从20世纪60年代末开始,一直在进行软件方法的研究与实践,提出了多种软件开发方法和技术,对软件产业的发展起着不可估量的作用。软件开发方法可分为两大类:面向过程的开发方法面向对象的开发方法本课程具体讨论以下三种方法:结构化开发方法原型化开发方法面向对象的开发方法2023/1/3151结构化开发方法(StructuredDevelopingMethod)
是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速、自然和方便。结构化方法总的指导思想自顶向下、逐步求精。它的基本原则是功能的分解与抽象。一、结构化开发方法的组成
20世纪70年代初结构化程序设计方法(StructuredProgram,SP)
20世纪70年代中结构化设计方法(StructuredDesign,SD)
20世纪70年代末结构化分析方法(StructuredAnalysis,SA)
SA,SD,SP法相互衔接,形成了一整套开发方法。若将SA,SD法结合起来,又称为结构化分析与设计技术(SADT技术)。1.4.1结构化开发方法1.4.1结构化开发方法2023/1/3152
化方法的工作模型—
瀑布模型(WaterfallModel)但从20世纪80年代开始,逐渐发现其不足,软件开发过程是个充满回朔的过程。而瀑布模型将其分割为独立的几个阶段,不能从本质上反映软件开发过程本身的规律。此外,过分强调复审,并不能完全避免较为频繁的变动。尽管如此,瀑布模型仍然是开发软件产品的一个行之有效的工程模型。二、结构化方法的工作模型1.4.1结构化开发方法问题定义编程需求分析设计可行性研究运行与维护测试开发时期运行时期计划时期(目标与范围说明书)(可行性论证报告)(维护报告)(测试报告)(程序)(设计文档)(需求说明书)瀑布模型2023/1/31531.4.2面向数据结构的开发方法1.4.2面向数据结构的开发方法
结构化开发方法是面向数据流、数据封闭性的开发方法,JACKSON
系统开发方法则是面向数据结构的开发方法。其基本思想是先建立输入输出的数据结构,再将其转换为软件结构。1.JACKSON方法的构成
JACKSON方法由JSP(JacksonstructuredProgramming)和JSD(JacksonSystemDevelopment)方法构成。
⑴JSP法主要体现程序结构的设计,不严格区分软件概要设计和详细设计。⑵
JSD法是对JSP法的扩充,针对JSP法的缺陷而提出的解决方案。其主要特点是:用“分而治之”的策略控制系统的复杂性,解决I/O结构的冲突问题。2023/1/31541.4.2面向数据结构的开发方法2.JACKSON方法的设计过程
⑴建立数据结构
JACKSON方法中数据结构通常表示为树型结构,有顺序、选择和循环三种基本结构。如图1.10(a)所示,按照三种基本结构建立的文件数据结构。
⑵以数据结构为基础,建立相应的程序结构图如图1.10(b),也称为JACKSON图。当没有结构冲突时,转换过程是简单的。一般情况,数据结构与模块结构是相对应的,因此不难从数据结构导出程序结构。数据结构转换为程序结构文件记录*项1项2项3(a)处理文件处理记录*处理项1处理项2处理项3(b)2023/1/3155一、原型化方法(PrototypingMethod)
原型是软件开发过程中软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会,原型化方法又称速成原型法(RapidPrototyping)。强调的是软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。将维护和修改阶段的工作尽早进行,使用户验收提前,从而使软件产品更加适用。1.4.3原型化开发方法1.4.3原型化开发方法2023/1/3156原型化方法按运用原型的目的和方式的不同,分为两类:1)快速建立需求规格原型(RSP
法)
RSP(RapidSpecificationPrototyping)法所建立的原型反映了系统的某些特征,让用户学习,有利于获得更加精确的需求说明书,待需求说明书一旦确定原型被废弃,后阶段的工作仍按照瀑布模型开发。2)快速建立渐进原型(RCP
法)
RCP(RapidCyclicPrototyping)法采用循环渐进的开发方式,对系统模型作连续精化,将系统需要具备的性质逐步添加上去,直至所有性质全部满足,此时的原型模型也就是最终的产品。速成原型法适合于开发“探索型”,“实验型”与“进化型”一类的软件系统。分类1.4.3原型化开发方法2023/1/3157速成原型的工作模型是一个循环的模型。快速原型法按以下步骤循环执行:
1.快速分析快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能)。
2.构造原型在快速分析的基础上,根据基本规格说明,忽略细节,只考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型、功能原型和性能原型。
3.运行和评价原型用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性。
4.修改与改进对原型进行修改、增删。原型的工作模型工作模型1.4.3原型化开发方法评价
构造快速分析或修改运行2023/1/3158构造原型运行/评价原型原型完成否要细部说明否严格说明细部效果满意否整理原型提供文档修正改进原型YYNN快速分析,确定初步规格说明YN1.4.3原型化开发方法
细化的快速原型模型图2细化的快速原型模型2023/1/3159
OOSD(Object-OrientedSoftwareDevelopment)法是20世纪80年代推出的一种全新的软件开发方法。非常实用而强有力,被誉为20世纪90年代软件的核心技术之一。1.4.4面向对象的开发方法1.4.4面向对象的开发方法
其基本思想是:对问题领域进行自然分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。2023/1/31601.4.4面向对象的开发方法一、面向对象开发方法的组成
OOSD由三部分组成:
OOA(Object-Orie
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国通信基站设备供应商行业市场现状供需分析及投资评估规划分析研究报告
- 2026皮革制品加工产业行业市场现状供需分析及投资评估规划分析研究报告
- 2026年初中化学期末测试培训试卷
- 2026软件等相信云计算行业市场供需分析投资评估规划研究报告
- 2026中国元宇宙概念落地场景与虚拟现实硬件发展关联性报告
- 2026中国涡流泵行业风险预警与应对策略研究报告
- 2026汽车发动机电控系统升级方案及节能减排成效评估报告
- 2026中国细胞治疗CDMO行业监管政策与产能扩张战略报告
- 2026中国塑料薄膜行业市场供需分析及投资评估与发展规划报告
- 2026中国循环经济行业市场发展分析及发展战略与投资前景预测研究报告
- 南通市海门区2025年网格员考试题库及答案
- (零模)南京市2026届高三年级学情调研生物试卷(含标准答案)
- 超导材料行业深度:制备工业、市场规模、产业链及相关公司深度梳理
- 卡西欧手表STL-S100H(3425)中文繁体说明书
- 人教版八年级上册Units1-3单元测试英语试题(含解析)
- 公路工程集料试验规程JTG-3432-2024(仪器变化)
- 反恐验厂管理手册程序文件制度文件表单一整套
- 安全绳挂钩报警系统研制
- 展览业展台搭建与布置操作规范
- SL-T+291-2020水利水电工程钻探规程
- JTG B02-2013 公路工程抗震规范
评论
0/150
提交评论