软件工程与项目管理.ppt_第1页
软件工程与项目管理.ppt_第2页
软件工程与项目管理.ppt_第3页
软件工程与项目管理.ppt_第4页
软件工程与项目管理.ppt_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

软件工程导论,(Introduction to Software Engineering ),本讲目标:,软件工程是计算机专业一门重要的专业课。 目的在于培养学生用工程化的原理及方法开发软件系统,把专业知识同实际项目结合起来,为将来从事计算机软件的开发及应用维护工作打下坚实的基础。 对于培养学生的软件素质,提高学生的软件开发能力与软件项目管理能力具有重要的意义。,成绩评定:,总目录:,第1章 软件工程学概述 第2章 可行性研究 第3章 需求分析 第4章 形式化说明技术 第5章 总体设计 第6章 详细设计 第7章 实现 第8章 维护,第9章 面向对象方法学引论 第10章 面向对象分析 附录A C+类库管理系统的分析与设计 附录B 一个汉字行编辑程序的设计,第1章 软件工程学概述,软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,1.1 软件危机,计算机系统:是指适当的组织在一起的一系列系统元素的集合,这些系统元素互相配合、相互协作,通过对信息的处理而完成预先定义的目标。,对软件的认识: 1950:程序 1960:程序+文档(不包括管理文档) 1970:程序+文档+数据 1984:软件管理是过程管理,CMM1.0能力成熟度模型 1996:UML统一建模语言,计算机系统4个不同的发展阶段:,计算机软件发展的4个阶段,1.1.1 软件危机的介绍,软件危机(软件萧条、软件困扰):是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有软件都不同程度地存在这些问题。 软件危机包含下述两方面的问题: 如何开发软件,满足对软件日益增长的需求; 如何维护数量不断膨胀的已有软件。,软件危机的典型表现: (1)对软件开发成本和进度的估计常常很不准确; (2)用户对“已完成的”软件系统不满意的现象经常发生; (3)软件产品的质量往往靠不住; (4)软件常常是不可维护的; (5)软件通常没有适当的文档资料; (6)软件成本在计算机系统总成本中所占的比例逐年上升; (7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势 。,1.1.2 产生软件危机的原因,(1)与软件本身的特点有关 软件是逻辑部件。 软件不会被“用坏”,如果发现了错误,很可能是开发时期引入。 软件规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。,(2)与软件开发与维护的方法不正确有关 忽视软件需求分析的重要性。对用户要求没有完整准确的认识就匆忙着手编写程序。越早开始写程序,完成它所需要用的时间往往越长。 认为软件开发就是写程序并设法使之运行。程序只是完整的软件产品的一个组成部分。一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档和数据等成分。在软件开发的不同阶段进行修改需要付出的代价是很不相同的,见图1.1。,图1.1 引入同一变动付出的代价随时间变化的趋势,轻视软件维护。维护是极端艰巨复杂的工作,需要花费很大代价。软件维护的费用占软件总费用的55%70%。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。,1.1.3 消除软件危机的途径,对计算机软件有正确的认识。 认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。 应该推广使用在实践中总结出来的开发软件的成功技术和方法,并继续研究探索。 应该开发和使用更好的软件工具。 总之,为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。,1.2 软件工程,1.2.1 软件工程的介绍 软件工程:是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,软件工程的代表性定义: Fritz Bauer:软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。 IEEE:软件工程是(1)将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中;(2)(1)中所述方法的研究。 计算机科学技术百科全书:软件工程是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法制作软件的工程。,软件工程的划代(无公认的定义): 1970年末之前,传统软件工程,瀑布模型。 1980年后,面向对象软件工程,面向对象语言以Smalltalk-80的出现为标志。 1984年后,软件过程工程,掀起软件过程运动,1991年出现的CMM是典型代表。 1990年后,构件工程,基于构件的软件开发方法,可重用的构件组装成新系统。,软件工程的本质特性: 软件工程关注于大型程序的构造 软件工程的中心课题是控制复杂性 软件经常变化 开发软件的效率非常重要 和谐地合作是开发软件的关键 软件必须有效地支持它的用户 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,1.2.2 软件工程的基本原理,用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性,1.2.3 软件工程方法学,软件工程包括技术和管理两方面的内容。 管理:通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。 技术(软件工程方法学):通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。,软件工程方法学3要素: 方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题; 工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境;如,CASE(Computer-Aided Software Engineering )工具 过程:需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,1. 传统方法学(生命周期方法学或结构化范型)强调自顶向下 采用结构化技术来完成软件; 划分为若干个阶段,然后顺序地完成每个阶段的任务;每个阶段的任务相对独立,而且比较简单,降低了整个软件开发工程的困难程度; 前一个阶段是后一个阶段的前提和基础,而后一阶段提出的解法更具体,细节更多; 每个阶段结束前必须从技术和管理两方面对这个阶段的开发成果进行严格的检查,通过之后这个阶段才算结束;保证质量,提高可维护性; 当软件规模庞大,或者的需求模糊或随时间而变化时,传统方法学往往不成功;维护起来仍然很困难。,2. 面向对象方法学强调主动地多次反复迭代 面向对象方法:把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。 面向对象方法学4个要点: 对象(object):融合了数据及在数据上的操作行为。 类(class):类是对具有相同数据和相同操作的一组相似对象的定义。 继承:按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。 消息:对象彼此间仅能通过发送消息互相联系。,面向对象方法学的优点: 面向对象方法学的尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程。 面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程,保证了在各项开发活动之间的平滑过渡。 促进了软件重用。最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,降低了复杂性,提高了可理解性,简化了开发和维护工作。,软件四化: 构架平台化 组建业务化 编码自动化 管理工厂化 以面向对象技术为手段,以可重用软件构件化和体系架构为基础,以工业化生产方式和管理支撑体系为核心的软件新变革。,1.3 软件生命周期,三个时期八个阶段:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。,1. 问题定义 任务:问题是什么 通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告。 经过讨论和必要的修改之后这份报告应该得到客户的确认。 结果: 关于系统规模和目标的报告书,2. 可行性研究 任务:有可行的解吗 系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程。 研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。 结果: 系统的高层逻辑模型(数据流图、成本效益分析) 可行性论证报告(立即进行/推迟进行/不能或不值得进行),3. 需求分析 任务:必须做什么 主要是确定目标系统必须具备哪些功能。 系统分析员必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。 结果: 系统的逻辑模型(数据流图、数据字典、简要的算法描述) 用规格说明书准确地记录对目标系统的需求,4. 总体设计 任务:如何解决已提出的问题 设计出实现目标系统的几种可能的方案(低、中、高成本)。 用适当的表达工具描述每种方案,分析优缺点,推荐一个最佳方案,制定出实现最佳方案的详细计划。设计程序的体系结构。 结果: 可能的解法(系统流程图、成本效益分析) 推荐的系统体系结构(层次图或结构图),5. 详细设计 任务:怎样具体实现该系统 详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。 结果: 每个模块的算法和数据结构(程序流程图、PAD图、N-S图等)。,6. 编码和单元测试 任务:得到正确的程序模块 选取一种适当的高级程序设计语言(必要时用汇编语言),把详细设计的结果翻译成用选定的语言书写的程序; 并且仔细测试编写出的每一个模块。 结果: 代码和测试报告,7. 综合测试 任务:得到符合要求的软件 通过集成测试、验收测试、现场测试、平行运行等方法对目标系统进一步测试检验。 通过对软件测试结果的分析可以预测软件的可靠性;反之,根据对软件可靠性的要求,也可以决定测试和调试过程什么时候可以结束。 结果: 测试计划、详细测试方案以及实际测试结果 完整一致的软件配置,8. 软件维护 任务:使系统持久地满足用户的需要 改正性维护,诊断和改正在使用过程中发现的软件错误; 适应性维护,修改软件以适应环境的变化; 完善性维护,根据用户的要求改进或扩充软件; 预防性维护,修改软件为将来的维护活动做准备。 每一项维护活动实质上是经历了一次压缩和简化了的软件定义和开发的全过程。 结果: 完整准确的维护记录,各类维护工作量所占比例,维护工作量在软件生命周期所占比例,1.4 软件过程,软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。 为获得高质量的软件产品,软件过程必须科学、有效。,传统的瀑布模型,实际的瀑布模型,1.4.1 瀑布模型,瀑布模型的特点: 1. 阶段间具有顺序性和依赖性 前一阶段的工作完成之后,才能开始后一阶段的工作; 前一阶段的输出文档就是后一阶段的输入文档。 2. 推迟实现的观点 对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。 3. 质量保证的观点 每个阶段都必须完成规定的文档,是“文档驱动”的模型; 每个阶段结束前都要对所完成的文档进行评审,尽早发现问题,改正错误。,瀑布模型的优点: 可强迫开发人员采用规范的方法; 严格地规定了每个阶段必须提交的文档; 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 瀑布模型的缺点: 只能通过文档了解产品,不经过实践的需求是不切实际的。 瀑布模型适用于: 需求是预知的; 软件实现方法是成熟的; 项目周期较短。,快速原型模型,1.4.2 快速原型模型,快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。,快速原型模型的特点: 快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。 快速原型的本质是“快速”。应该尽可能快地建造出原型系统,以加速软件开发过程,节约成本。,根据原型的不同作用,有三类原型模型: 探索型原型用于开发的需求分析阶段 实验型原型主要用于设计阶段 演化型原型用于及早向用户提交一个原型系统 快速原型模型的运用方式: 抛弃策略探索型和实验型采用此策略 附加策略演化型快速原型采用此策略,1.4.3 增量模型,增量模型把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。,增量模型,增量模型的优点: 人员分配灵活,刚开始不用投入大量人力资源。 当配备的人员不能在设定的期限内完成产品时,它提供了一种先推出核心产品的途径。 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。 增量模型的难点: 软件体系结构必须是开放的。 模型本身是自相矛盾的。整体独立构件。 不同的构件并行地构建有可能加快工程进度,但是冒无法集成到一起的风险。,增量模型适用于: 适用于需求经常改变的软件开发过程。 如果在项目既定的商业要求期限之前不可能找到足够的开发人员,在这种情况下,增量模型显得特别有用。,1.4.4 螺旋模型,螺旋模型的基本思想:使用原型及其他方法来尽量降低风险。把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。,简化的螺旋模型,完整的螺旋模型,螺旋模型的优点: 主要优势在于它是风险驱动的。 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标; 减少了过多测试或测试不足所带来的风险; 维护只是模型的另一个周期,维护和开发之间没有本质区别。,螺旋模型的缺点: 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成重大损失。 过多的迭代次数会增加开发成本,延迟提交时间。 螺旋模型适用于: 特别适用于庞大、复杂并具有高风险的系统。 适用于内部开发的大规模软件项目。,1.4.5 喷泉模型,喷泉模型:是典型的面向对象生命周期模型。 “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程(例如,快速原型模型或图中的中心垂线)作为总目标。,喷泉模型的优点: 该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。 多次反复地增加或明确目标系统,而不是本质性的改动,降低错误的可能性。 喷泉模型的缺点: 由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,不利于项目的管理。 要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。 喷泉模型适用于: 适用于面向对象的软件开发过程。,基于构件的开发模型: 支持软件复用。利用预先包装好的软件构件来构造应用系统。,形式化方法模型: 形式化方法是建立在严格数学基础上的一种软件开发方法。软件开发的全过程中,从需求分析、规约、设计、编程、系统集成、测试、文档生成、直至维护各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法。,1.4.6 Rational统一过程,Rational统一过程(Rational Unified Process, RUP)是由Rational软件公司推出的一种完整而完美的软件过程。 RUP是一种迭代的,以架构为中心的,用例驱动的软件开发方法。 RUP是一种具有明确定义和结构的软件工程过程。 RUP还是一个过程产品,提供了可定制的软件工程的过程框架。 RUP被广泛应用在不同工业领域中的不同企业中。,RUP总结了6条软件开发经验最佳实践: 迭代式开发 管理需求 使用基于构件的体系结构 可视化建模 验证软件质量 控制软件变更,UML的用例图,RUP软件开发生命周期(二维):,1.4.7 敏捷过程与极限编程,敏捷软件开发宣言(价值观声明): 个体和交互胜过过程和工具 可以工作的软件胜过面面俱到的文档 客户合作胜过合同谈判 响应变化胜过遵循计划 根据上述价值观声明提出的软件过程统称为敏捷过程。,极限编程(eXtreme Programming, XP): 敏捷过程中最富盛名的一个 广泛适用于需求模糊且经常改变的场合 使得敏捷过程能够较好地适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束,XP项目的整体开发过程,XP迭代开发过程,1.4.8 微软过程,微软过程准则 微软软件生命周期 (1)规划阶段 (2)设计阶段 (3)开发阶段 (4)稳定阶段 (5)发布阶段,微软过程模型 每一个生命周期发布一个递进的版本,各生命周期持续快速地迭代循环 优点: 综合了Rational统一过程和敏捷过程的优点 缺点:对方法、工具和产品等方面不够全面,课后习题及解答,1-5 根据历史数据可以做出如下的假设 : 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0.28(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=0.30.72Y-1974(美分/位) 如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.0480.72Y-1974(美元/字) 在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。 基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算:,课后习题及解答,(1) 在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少? (2) 假设在1985年一名程

温馨提示

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

评论

0/150

提交评论