




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,第一章软件工程概述,软件工程,SoftwareEngineering,汤景凡计算机学院软件工程研究所E-mail:tangjfQQ:7338172PH1.什么是软件,软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。,什么是软件?(站在软件工程的角度看)软件就是:一个或多个计算机程序,其执行时能提供所期望的功能和性能一个或多个数据结构,这些结构使得程序能够完全操纵信息一个或多个文档,这些文档描述了程序分析、设计、实现和维护的细节,软件的认识过程,从这里,我们开始感到,软件这个我们追逐的对象,已经逐渐地不再成为软件经理的唯一目标,我们开始更多地关注产生这个目标的过程。走完这个思路过程,花费了软件人30年以上的时间。,50年代:软件=程序60年代:软件=程序+文档(分析、设计、测试、维护,但不包括管理文档)70年代:软件=程序+文档+数据(初始化数据、测试数据、研发数据、运行数据、维护数据、工程数据、项目管理数据等)1984年美国开始认识到软件管理是一个过程管理,1991年出现CMM1.0,1996年出现了UML。“软件工作产品”开发过程中产生的各种软件“软件产品”最后交付的软件,软件的特征,软件是一种逻辑实体,而不是具体的物理实体。抽象性:可记录,但看不到软件的生产与硬件不同。无明显的制造过软件是开发出来的,不是制造出来的在软件的运行和使用期间,没有硬件那样的机械磨损、老化、折旧等问题。软件可能被“废弃”,但不会“用坏”软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。软件的开发至今尚未完全摆脱手工艺的开发方式。软件是复杂的。(软件复杂性来源于它所反映的实际问题的复杂性。)软件成本相当昂贵。软件大部分是定制的,而不是装配的可复制性:与开发成本相比,复制成本很低,存在软件产品的保护问题相当多的软件工作涉及到社会问题。,软件的分类,按功能分:系统软件、支撑软件、应用软件按规模分:大型、中型、小型按工作方式分:实时/分时、交互/批处理按服务对象分:定制软件、产品软件按销售方式分:定单软件、非定单软件,软件的质量,高质量就是毫无纰漏?高质量就是提供众多的功能?高质量就是简洁而优雅的代码?高质量就是低开发成本?高质量就是高开发速度?高质量就是高用户友好性?,什么是高质量的软件产品?,软件质量的定义,所谓质量,就是指没有任何错误?其实,“质量”一词并不具有绝对意义上的“最好”的一般含义。质量是指“最适合于一定顾客的要求”。,对某一个人而言更高的质量,也许对另一个人而言却意味着更低的质量。质量的相对性,软件质量的特性,功能性可靠性安全性稳定性可维护性可扩展性可移植性。,软件质量问题的来源,50发生在需求分析阶段30发生在设计阶段20发生在编码阶段,2.软件危机,软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。,概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。,软件危机的典型表现,软件危机表现在软件的可靠性没有保障、维护费用不断上升、进度无法预测、成本增长无法控制、程序员无限度增加等,形成软件开发局面失控的状态。,具体地说,软件危机主要有以下一些典型表现:对软件开发的进度和成本无法估计用户对已经开发完成的软件的满意度非常低软件质量无法保证软件开发后的维护工作很难进行软件通常没有合适的文档资料软件成本在系统总成本中所占的比例越来越高软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。,软件危机的典型案例,软件危机的例子很多,经常被拿出来作为典型的有:1962年美国水手号因导航软件一个语句的语义错误,导致偏离航线,任务失败。阿波罗8号因计算机软件错误,造成存储器信息丢失。阿波罗14号在飞行的10天中,出现了18个软件错误。美国IBM公司的OS/360系统,花了几千人很多年的努力而失败。,软件开发历史的发展特性,与人类社会其他产品发展的历史比较,可以看出,软件开发的历史具有一些独特的发展特性:与建筑技术、制造技术、计算机硬件技术不同,软件生产具有非常特殊的个体化、个性化和生产过程的不可复制性。软件开发的工具、技术手段获得了很大的进步,但开发方法、管理方法和水平并没有获得自动和同步的进步。,在那个年代,软件开发团队通常被视为“软件作坊”,主要表现在:个人对所负责的“局部”负责、在这个局部是完全个性化和自由的,系统就是由几个这样的“局部”构成的叠加(例如:通过菜单的形式)构成的。没有任何设计文档和可用于维护的资料,即生产过程是没有记录的。没有评审和独立的系统测试,即结果不依靠第三方确认和验证。进度、成本、质量是不可预测的。,软件危机产生的原因,在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关。另一方面也和软件开发与维护的方法不正确有关。,软件危机的解决途径,为了消除软件危机:首先应该对软件有一个正确的认识。应该彻底消除在计算机系统早期发展阶段形成的“软件就是程序”的错误观念。一个软件必须由一个完整的配置组成。更重要的是,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的有效的原理、概念、技术和方法,特别要吸取几十年来人类从事计算机硬件研究和开发的经验教训。应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。应该开发和使用更好的软件工具。,3.软件工程,60年代软件生产的特征是:软件作坊个体化生产。为了跟上硬件的发展速度、解决进度问题和成本可控制、质量可保证、系统可维护、过程可管理等的问题,产生了把软件开发,作为一个工程来管理的思想,即软件工程的概念。,软件工程的提出:为摆脱软件危机,北约(NATO)的科学委员会于1968年在联邦德国召开德有关研讨会上,首次提出了软件工程(SoftwareEngineering)的概念,其主要想法,是把人类长期从事的其他领域的各种工程所积累的经验和行之有效的原理、概念、技术和方法,包括对硬件研发积累的经验,导入到软件开发中。到70年代末,已经取得了大量的研究成果,形成了基本的方法,这一代的软件工程,称为“传统软件工程”。,什么是软件工程,概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,IEEE关于软件工程的定义,IEEE计算机学会将“软件工程”定义为:应用系统化的、学科化的、定量的方法,来开发、运行和维护软件,即,将工程应用到软件。对中各种方法的研究。(参见:IEEEStandardGlossaryofSoftwareEngineeringTerminology.IEEE,Piscataway,NJstd610.12-1990,1990),把这个定义分解开来理解,就是:应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则和方法,来创建软件,从而达到提高质量、降低成本的目的。其中,采用的方法包括:计算机科学和数学用于构造模型、分析算法;工程科学用于制定规范、明确风险、评估成本和确定权衡;管理科学用于进度、资源、质量、成本的管理。,软件工程的基本原理,1968年正式提出“软件工程”这一术语之后,软件工程的专家和学者围绕计算机科学、工程和管理三个方面,做了很多研究,建立了早期关于软件工程管理的一些基本准则,从中可以看出早期软件工程的一些思路与出发点。其中最著名的是著名软件工程专家B.W.Boehm在1983年的一篇论文中,提出的软件工程7条基本原理,反映了作为软件工程应该关注和考虑的若干本质问题:用分阶段的生命周期计划严格管理。坚持进行阶段评审。实行严格的产品控制。采用现代的程序设计技术。结果应能清楚地审查。开发小组的人员应该少而精。承认不断改进软件工程实践的必要性。,软件工程的发展历程,1968年正式提出“软件工程”这一术语之后,软件工程经历了以下几个发展阶段:到70年代末,按照软件工程的思路,已经取得了大量的研究成果,形成了基本的方法,这一代的软件工程,称为“传统软件工程”。传统软件工程最主要的成果,就是所谓的软件生命周期的“瀑布模型”和相应生命周期的工作规范。从软件工程的生命周期划分及任务定义中,我们可以明显地看到上述软件工程基本原则的实际应用。80年代以后,面向对象的方法和技术受到广泛的重视,软件工程的重点,转向OO。以Smalltalk-80语言的出现,标志着面向对象的程序设计与分析,进入实用化阶段,演化成一套完整的软件开发方法和系统设计体系。一般把面向对象的设计,称为软件工程的第二代,也称为面向对象的软件工程。80年代中期,人们在研究和实践中发现,为了提高软件生产率,并使软件质量得到保证,其关键在于软件开发和维护中的管理和支持能力,这其中的关键,是所谓“软件过程”。从1984年开始,掀起了“软件过程运动”,91年出现CMM,是软件过程的典型代表。以后,逐渐形成了“软件过程工程”,这可以称为软件工程的第三代。进入90年代以后,软件工程的一个重要进展,就是基于构件的开发。尽可能地利用可复用的构件,组装成新的系统,提高了软件的生产率、减少了故障和成本。基于构件的系统,更适应了Internet技术和分布式系统开发的需要。因此,有人把基于构件的软件开发,称为第四代软件工程。,传统软件工程的生命周期划分,传统软件工程把软件的生命周期定义为6个阶段:问题定义与可行性研究:指系统分析员通过对系统实际用户、使用管理部门、相关部门及人员进行的实际调查,搞清楚“问题”的背景、目的是什么?然后,据此提出关于“问题”的性质、工程目标、规模、相关联系等项目的基本情况,进行可行性分析,编制开发计划。需求分析:是通过问题识别、分析与综合、制订规格说明和评审等阶段,达到以下一些需求分析阶段的目标,它们都是对“用户需求”进行更专业化的“描述”与“转换”。需求分析的任务和目标包括:(1)确定对系统的综合要求;(2)分析系统的数据要求;(3)抽象出并确立目标系统的逻辑模型;(4)编写需求规格说明书。软件设计:软件设计包括概要设计和详细设计二个阶段:在概要设计(总体设计)阶段,开发人员要回答需求分析中获得的系统目标如何去实现的问题,其目标是:(1)概要设计要体现对需求的完整实现;(2)概要设计要保证与需求的一致性;(3)概要设计能够达到向需求的反向可追踪;(4)概要设计关注系统结构设计的逻辑性、合理性和可扩展性;传统软件工程提出了很多设计方法,最主要的面向结构的概要设计方法,包括:结构分析(SA)和结构设计(SD)等。在详细设计阶段,是对概要设计进行细化,回答如何具体实现系统目标的问题。详细设计是面向具体程序编码,重点是编码规范。传统软件工程开发了HIPO(层次图加输入/输出处理)、PDL(过程设计语言)等详细设计工具。编码:这个阶段的主要任务,是写出符合规范的代码,并完成相应的调试。测试:测试包括:单元测试、集成测试、系统测试和验收测试等。运行与维护:运行是把开发完成的系统,交付并达到正式使用的过程,维护包括:改正性维护、适应性维护、完善性维护和预防性维护等。,现代软件工程,软件在发展,软件工程也在发展中,现代软件工程是在传统软件工程基础上发展起来的,既是传统软件工程概念和技术的自然演化,又具有区别于传统软件工程的独有的基本特征。现代软件工程已经比较明确自己的学习对象和目标,这就是:软件的工厂化生产。,对象工程,以面向对象的设计方法,实现对软件实体的抽象和应用。,基于构件的系统结构,实现最大限度的重用。,借鉴和发展了传统的软件工程方法,发展有关软件系统构造、分析的方法。,技术方法,构件工程,利用工程方法,制定软件开发的规范、评估成本、确定权衡等管理技术。,工程管理,软件过程是需求控制、进度、质量、成本等的管理过程。,过程工程,软件工程新的关注点,现代软件工程更好地体现了“软件工程是计算机科学、工程与管理学科的结合”这一软件工程的定义和根本宗旨,因此,计算机科学、工程学和管理科学成为现代软件工程的主要知识来源和应用领域。为了说明这三在者的关系,我们把软件工程看成是如下的一个“魔方”:,传统的侧面:包括需求分析、系统设计、实现与维护等软件开发的基本过程,我们称为“传统软件工程的基本过程”。工程和管理的侧面:软件开发作为一个“工程”,必须满足可用性、正确性和经济性等基本工程要求,这是软件工程作为“工程”的方面。在这样的组合下,软件工程可以被概括成4个过程,即:过程与模型方法与技术工具和环境标准和规范,现代软件工程的软件生存周期,中国国家标准(GB/T8566-2001)将软件工程的生命周期划分成7个过程,基本上覆盖了开发、支持、工程及管理4个过程。,现代软件工程的软件生存周期,国标(GB/T8566-2001)软件工程生命周期7个过程的含义如下:,获取过程:需方按合同获取一个系统、软件产品和服务的活动,活动从定义软件产品或服务的获取需求开始,然后是准备并公布标书、选择供方和管理获取过程,直到系统的验收。供应过程:供方向需方提供合同中的系统、软件产品和服务的活动,该过程的开始方法有二种:一是准备一份建议书以应答需方的标书(定制系统);二是展示一个含有需方要求功能的软件系统(产品或服务);与需方签订合同或协议,供应过程规定了为管理和保证项目质量所需的步骤和资源,其中包括:制订项目计划和实施计划,直到向需方交付系统、产品或服务。管理过程:按照管理的观点,一个机构(供方、需方、开发者、操作者和维护者)管理着各自的过程。管理过程定义了生存周期过程中的各项管理活动,包括:项目的开始和范围定义项目管理计划以及实施和控制产品的评审和评价以及项目的完成。在工程的观点下,开发者、操作者、维护者分别通过开发、操作、维护过程生产软件产品或提供服务开发过程:开发过程是开发者为了定义和开发软件产品或服务所需要的活动,包括:需求分析、设计、编码、集成、测试、软件安装和验收等活动。操作过程:此过程定义操作者为了在规定的运行环境中为其用户运行一个计算机系统所需要的活动。维护过程:此过程定义维护者为了管理软件的更新、使其保持良好运行所需要的活动,包括系统的移植和退役。支持过程:支持过程对项目生存周期过程给予支持,有助于项目的成功并提高项目的质量。各过程可以根据实际需要,进行裁剪或增加。以上的几个过程,并不是就只在某一环节起作用,过了这个环节,该过程就结束了,它们是贯穿始终、协同工作的。,4.软件工程知识体系SWEBOK,2004年6月,美国IEEE-CS和ACM编制的软件工程知识体系指南2004(SWEBOK2004)正式发布,为软件工程知识体系本身以及相关知识之间确立了明确的边界,是我们认识软件工程学科知识体系的很好参考。整个知识体系分为11个知识领域(KnowledgeArea,KA)前五个知识领域是按软件开发的生命期阶段(按所谓瀑布模型)排列的软件需求(又称软件分析)软件设计软件构造(即编码、实现)软件测试软件维护后六个知识领域则是软件开发中的支撑性或者辅助性的方面,一般覆盖软件开发的多个阶段甚至所有阶段,包括:软件配置管理(SCM)、软件项目管理、软件工程过程、软件工程工具与方法、软件质量、相关学科知识领域每个知识领域之下又分为多个子领域,子领域又由多个主题构成。,现代软件工程知识体系SWEBOK,现代软件工程知识体系SWEBOK,软件神话之管理神话,神话:我们已经有了一本写满软件开发标准和规程的宝典。它无所不包,囊括了我们可能问到的任何问题。事实:这本宝典也许的确已经存在,但它是否在实际中采用了?我们的软件人员是否了解到它的存在呢?它是否反映了软件工程的现状?是否全面?是否可以适应不同的应用环境?它是否在缩短交付时间的同时还关注保证产品的质量?在很多情况下,问题的答案是否定的。,神话:如果我们未能按时完成计划,我们可以通过增加程序员人数而赶上进度(人月神话)。事实:软件开发并不是像机器制造那样的机械过程。Brooks曾说过:“在软件工程中,为赶进度而增加人手,只能使进度更加延误”。,神话:如果我将一个软件外包给另一家公司,则我可以完全放手不管。事实:如果一个组织对软件项目的内部组织和控制毫无了解,那无一例外地将在外包项目中遇到困难。,软件神话之用户神话,神话:有了对项目目标的大概了解,便足以开始编写程序,我们可以在之后的项目开发过程中逐步了解细节。事实:虽然通常很难得到综合全面且固定不变的需求描述,但是对项目目标模糊不清的描述将为项目实施带来灾难。清晰的需求描述(经常是逐步变得清晰)要求顾客和开发人员之间不断保持有效的沟通。,神话:虽然项目需求不断变更,但是因为软件是弹性的,因此可以很容易地适应变更。事实:软件需求的确在随时变更,但随变更引入的时机不同,变更所造成的影响也不同。,变更的代价,软件神话之从业者神话,神话:当我们完成程序并
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电路和电流课件
- 大学高校保安服务投标方案
- 电脑课件VIP服务
- 数据管理平台技术服务方案
- 技改、修理类工程监理合同
- ps考试题目模拟试题及答案
- nike兼职考试及答案
- 电缆工程专业科普知识培训课件
- 江西省抚州市南城县2022-2023学年九年级上学期期中化学试题(含答案)
- 电玩城专业知识培训内容课件
- 2025年广安市中考化学试卷真题(含标准答案及解析)
- 甘肃省陇南市成县县属国有企业招聘笔试题库2025
- 甲醇改装培训课件
- dcs权限管理制度
- 2025年陕西山西青海宁夏高考历史试卷真题答案详解(课件)
- 口腔设备学发展史
- 2025年广西专业技术人员继续教育公需科目(二)答案
- 浙江一般公需课从大模型到智能超算的思考题库及答案
- 供电公司质量月活动方案
- 外墙防水渗漏红外检测技术
- 监控系统维护方案
评论
0/150
提交评论