第一章软件工程概述.ppt
第一章软件工程概述,HeBei Normal University of Science&Technology,参考文献,1.Software Engineering(Eighth edition)作者 Sommerville2.软件工程实践者的研究方法作者 Roger S.Pressman3.人月神话 作者 FREDERICK P.BROOKS,JR.,HeBei Normal University of Science&Technology,本课程由教学和实验两部分组成。理论:周四1-2节A320;实验:周五1-2节(单周)E604;答疑:周四3-4节,6楼备课间。考试:项目Final Project 30 作业assignments 20 测验Quizzes 20 考试Final Exam 30,HeBei Normal University of Science&Technology,软件工程概述,软件的概念、特性和分类软件危机与软件工程系统工程的目标软件生命周期软件生命周期模型软件工程知识体系及知识域,HeBei Normal University of Science&Technology,1.1软件概述,软件的概述及特点软件的分类,HeBei Normal University of Science&Technology,软件的概述及特点,计算机软件与计算机系统操作有关的程序、规程、规则及任何与之有关的文档和数据。软件 程序及有关数据机器可执行;文档(与软件开发、运行、维护、使用、培训有关)不可执行。程序(program)用程序设计语言描述的,适合 于计算机处理的语句序列。,HeBei Normal University of Science&Technology,软件的概述及特点,软件是逻辑产品,硬件是物理产品。特点:(1)软件开发更依赖于开发人员的业务素质、智力、人员的组织、合作和管理。软件开发、设计几 乎都是从头开始,成本和进度很难估计。(2)软件存在潜伏错误,硬件错误一般能排除。(3)软件开发成功后,只需对原版进行复制。(4)软件在使用过程中维护复杂。(5)软件不会磨损和老化。,HeBei Normal University of Science&Technology,软件的概述及特点,文档(document)一种数据媒体和其上所记录的数据。文档记录软件开发活动和阶段成果,具有永久性,可供 人或机器阅读。文档可用于 专业人员和用户之间的通信和交流;软件开发过程的管理;运行阶段的维护。,HeBei Normal University of Science&Technology,软件的概述及特点,图 11 硬件失效曲线图,HeBei Normal University of Science&Technology,软件的概述及特点,图 12 软件失效曲线图,HeBei Normal University of Science&Technology,软件的分类,图 13 软件的分类,HeBei Normal University of Science&Technology,1.2软件危机,软件危机的表现与原因软件危机的启示,HeBei Normal University of Science&Technology,软件危机的表现与原因,软件危机暴发于上个世纪六十年代末。主要表现为:软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。软件开发周期长、成本高、质量差、维护困难。,软件危机,HeBei Normal University of Science&Technology,软件危机的表现与原因,具体来说,软件危机主要有以下一些典型表现:对软件开发成本和进度的估计常常很不准确。用户对“已完成的”软件系统不满意的现象经常发生。软件产品的质量往往靠不住。软件常常是不可维护的。软件通常没有适当的文档资料。软件成本在计算机系统总成本中所占的比例逐年上升。软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。,HeBei Normal University of Science&Technology,除了软件本身的特点,软件危机发生的主要原因有:缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。缺少有效的软件评测手段,提交用户的软件质量不能完全保证。,软件危机的表现与原因,HeBei Normal University of Science&Technology,软件危机的启示,彻底消除“软件就是程序”的错误观念。充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。推广和使用在实践中总结出来的开发软件的成功技术、方法和工具。按工程化的原则和方法组织软件开发工作。,如何摆脱软件危机?,HeBei Normal University of Science&Technology,1.3软件工程,软件工程概念软件工程发展软件工程目标和原则软件工程知识体,Company Logo,软件工程概念,为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计算机科学会议上,Fritz Bauer首次提出“软件工程”的概念,试图将工程化方法应用于软件开发。在NATO会议上,Fritz Bauer对软件工程的定义是:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”,HeBei Normal University of Science&Technology,软件工程概念,1993年IEEE(Institute of Electrical&Electronic Engineers,电气与电子工程师协会)给出的定义:“软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究中提到的途径。”,HeBei Normal University of Science&Technology,软件工程概念,图 14 软件工程层次图,Company Logo,软件工程概念,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。,HeBei Normal University of Science&Technology,软件工程目标和原则,软件工程要达到的基本目标包括:达到要求的软件功能;取得较好的软件性能;开发出高质量的软件;付出较低的开发成本;需要较低的维护费用;能按时完成开发工作,及时交付使用。,HeBei Normal University of Science&Technology,软件工程目标和原则,(1)按软件生存周期分阶段制订计划并认真实施(2)坚持进行阶段评审(3)坚持严格的产品控制(4)使用现代软件开发技术(5)明确责任(6)用人少而精(7)不断改进开发过程,Company Logo,软件工程目标和原则,为了达到上述目标,软件工程设计、工程支持以及工程管理在软件开发过程中必须遵循一些基本原则。著名软件工程专家B.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,提出了软件工程的七条基本原则:用分阶段的生存周期计划进行严格的管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 软件工程结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性 B.Boehm指出,遵循前六条基本原则,能够实现软件的工程化生产;按照第七条原则,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。,Company Logo,一些不正确的观念,观点之一 我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。观点之二 如果我们已经落后于计划,可以增加更多的程序员来赶上进度。观点之三 有了对目标的一般描述就足以开始写程序了,我们以后可以再补充细节。观点之四 一旦我们写出了程序并使其正常运行,我们的工作就结束了。人们有时认为,只有差的软件产品才需要维护。,HeBei Normal University of Science&Technology,1.4软件过程,软件生命周期软件过程概念软件生命周期模型,Company Logo,软件生存周期,软件从定义开始,经过开发、使用和维护,直到最终退役的全过程称为软件生存周期。可将软件生存周期划分为3个过程共9个阶段。3个过程是:软件定义过程、软件开发过程、软件使用与维护过程。9个阶段有:可行性研究、需求分析、概要设 计、详细设计、实现、组装测试、验收测试、使用与维护、退役。,图1-3-1 软件生存周期阶段的划分,HeBei Normal University of Science&Technology,软件生存周期,各个阶段所要完成的基本任务问题定义与可行性研究 本阶段要回答的关键问题是“到底要解决什么问题?在成本和时间的限制条件下能否解决问题?是否值得做?”(2)需求分析 本阶段要回答的关键问题是“目标系统应当做什么?”(3)软件设计 设计是软件工程的技术核心。本阶段要回答的关键问题是“如何实现目标系统?”,HeBei Normal University of Science&Technology,软件生存周期,各个阶段所要完成的基本任务(4)程序编码和单元测试 本阶段要解决的问题是“正确地实现已做的设计”,即“如何编写正确的、可维护的程序代码?”(5)集成和系统测试 测试是控制软件质量的重要手段,本阶段的主要任务是做集成测试和系统测试。(6)软件运行和维护 已交付的软件投入正式使用,便进入运行阶段。这一阶段可能持续若干年。软件在运行中可能由于多方面的原因,需要对它进行修改。,HeBei Normal University of Science&Technology,软件过程又称为软件生存周期过程,是软件生存周期内为达到一定目标而必须实施的一系列相关过程的集合。它是围绕软件的活动序列,财务、市场等活动不属于软件过程。在传统的软件工程中,软件产品的生存周期一般可以划分为6个阶段,分别是:可行性研究需求分析 软件设计编码 软件测试 软件维护,软件过程概念,图 15 传统软件生存周期的各个阶段,HeBei Normal University of Science&Technology,软件过程标准,图 16 ISO12207软件生存周期过程标准框架,HeBei Normal University of Science&Technology,软件生存周期模型,ISO12207标准将软件生存周期模型定义为:一个包括软件产品开发、运行和维护中有关过程、活动和任务的框架,其中这些过程、活动和任务覆盖了从该系统的需求定义到系统的使用终止。把这个概念应用到开发过程中,可以发现所有软件开发生存周期模型的内在基本特征:描述了开发的主要阶段定义了每一个阶段要完成的主要过程和活动规范了每一个阶段的输入和输出(提交物)提供了一个框架,可以把必要的活动映射到该框架中,HeBei Normal University of Science&Technology,软件生命周期模型,常见的软件生命周期模型包括:瀑布模型原型模型增量模型喷泉模型螺旋模型统一过程模型敏捷过程模型微软工程模型,HeBei Normal University of Science&Technology,瀑布模型,在20世纪80年代之前,瀑布模型一直是唯一被广泛采用的生命周期模型。传统的瀑布模型如图所示。,图 17 瀑布模型,HeBei Normal University of Science&Technology,实际的瀑布模型实际的瀑布模型是带“反馈环”的,如图所示。图中实线箭头表示开发过程,虚线箭头表示维护过程。,HeBei Normal University of Science&Technology,瀑布模型的优点可强迫开发人员采用规范化的方法。严格地规定了每个阶段必须提交的文档。要求每个阶段交出的所有产品都必须是经过验证的。,HeBei Normal University of Science&Technology,瀑布模型的缺点由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况。瀑布模型只适用于项目开始时需求已确定的情况。,HeBei Normal University of Science&Technology,瀑布模型,瀑布模型的优点是过程模型简单,执行容易;缺点是无法适应变更。瀑布模型适应于具有以下特征的软件开发项目:在软件开发的过程中,需求不发生或发生很少变化,并且开发人员可以一次性获取到全部需求。否则,由于瀑布模型较差的可回溯性,在后续阶段中需求经常性的变更需要付出高昂的代价。软件开发人员具有丰富的经验,对软件应用领域很熟悉。软件项目的风险较低。瀑布模型不具有完善的风险控制机制。,HeBei Normal University of Science&Technology,原型模型,原型模型主要用于挖掘需求,或是进行某种技术或开发方法的可行性研究,是一种开发人员为了快速而准确地获取需求经常采用的方法。在初步获取需求后,开发人员会快速地开发一个原型系统。通过对原型系统进行模拟操作,开发人员可以更直观、更全面和更准确地了解用户对待开发系统的各项要求,同时还能挖掘到隐藏的需求。如果开发人员对将采用的开发技术把握不大,也可以采用原型模型进行技术上的尝试,以降低后续开发的风险。原型系统通常针对软件开发系统的子功能模块,所以功能相对不完善。此外,由于原型系统功能的局部性以及存在阶段的局部性,在软件开发的实践中,原型模型通常结合其他的软件开发模型共同使用,发挥作用。,HeBei Normal University of Science&Technology,原型模型,图 18 原型模型,HeBei Normal University of Science&Technology,增量模型,图 19 增量模型,增量模型假设需求可以分段,成为一系列增量产品,每一增量可以分别地开发。如图1-9所示。,HeBei Normal University of Science&Technology,增量模型,增量模型作为瀑布模型的一个变体,具有瀑布模型的所有优点,此外,它还有以下优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大;由于很快发布了第一个版本,因此可以减少用户需求的变更;允许增量投资,即在项目开始时,可以仅对一个或两个增量投资。,Company Logo,增量模型,增量模型的不足为:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定;如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发生的成本、进度和配置的复杂性,可能会超出组织的能力。,HeBei Normal University of Science&Technology,增量模型,增量模型适用于以下特点的软件项目。软件产品可以分批次地进行交付。待开发的软件系统能够被模块化。软件开发人员对应用领域不熟悉,难以一次性地进行系统开发。项目管理人员对全局把握的水平较高。,HeBei Normal University of Science&Technology,喷泉模型,图 110 演化模型,喷泉模型是典型的面向对象生命周期模型。“喷泉”一词体现了迭代和无间隙特性。图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在重叠。它是以面向对象的软件开发方法为基础,以用户需求为动力,以对象来驱动的模型。,维 护,测 试,实 现,设 计,分 析,演 化,HeBei Normal University of Science&Technology,螺旋模型,螺旋模型通常用来指导大型软件项目的开发。它把开发过程分为制定计划、风险分析、实施开发和用户评估四类活动。风险分析被扩展到了各个阶段中,因此采用螺旋模型可以降低项目开发的风险。,生命周期计划需求计划,风险分析,原型1,原型2,原型3,可操作的原型,建模,模拟,评价,操作概念,软件需求,需求确认,开发计划,组装测试计划,风险分析,风险分析,风险分析,软件产品设计,设计验证与确认,详细设计,编码,单元测试,组装测试,验收测试,实现,成本,顺时针为进展方向,计划:明确目标、约束条件选择方案,风险分析构造原型,工程实现,用户评价;阶段评审,图1-4-3 螺旋模型,验收测试计划,需求精化计划,需求评价,评审,决策,实现计划,HeBei Normal University of Science&Technology,螺旋模型,螺旋模型综合了传统的生存期模型的优点,同时扩展了增量模型管理任务的范围:风险分析,用来弥补其不足。螺旋模型的另外一个特征是,只有一个迭代过程真正开发可交付的软件。螺旋模型也存在其缺点:一个周期执行时间太长;要有方法和自动化工具支持,否则无法实施。螺旋模型适应于风险较大的大型软件项目的开发。,HeBei Normal University of Science&Technology,统一过程模型,统一过程模型(Rational Unified Process)是种软件工程过程,它提供了如何在开发组织中严格分配任务和职责的方法;统一过程模型是一个过程产品,有自己的过程框架,捕获了现代软件开发中的最佳实践。统一过程模型具有三大特点:用例驱动,以架构为中心,迭代和增量开发。,HeBei Normal University of Science&Technology,统一过程模型,图 112 统一过程模型,HeBei Normal University of Science&Technology,统一过程模型,统一过程的工作流 在统一过程中,有6个核心工作流。业务建模工作流。用商业用例为商业过程建立文档。需求工作流。目标是描述系统应该做什么,确保开发人员构建正确的系统。为此,需明确系统的功能需求和非功能需求(约束)。分析和设计工作流。其目标是说明如何做。结果是分析模型和设计模型。,Company Logo,统一过程模型,实现工作流。用分层的方式组织代码的结构,用构件的形式来实现类,对构件进行单元测试,将构件集成到可执行的系统中。测试工作流。验证对象之间的交互、是否所有的构件都集成了、是否正确实现了所有需求、查错并改正。部署工作流。制作软件的外部版本、软件打包、分发、为用户提供帮助和支持。,Company Logo,统一过程模型,统一过程的阶段 统一过程有4个阶段,分别是初始阶段、细化阶段、构造阶段和移交阶段。初始阶段。初始阶段主要关注项目计划和风险评估,其目的是确定是否值得开发目标信息系统。细化阶段。细化阶段关心定义系统的总体框架,其目标是:细化初始需求(用况)、细化体系结构、监控风险并细化它们的优先级、细化业务案例以及制订项目管理计划。,Company Logo,统一过程模型,统一过程的阶段 构造阶段。构造阶段是建立系统,构造信息系统的第1个具有操作质量的版本,以能够交付给客户进行测试的版本结束,有时称为测试版本。移交阶段。移交阶段包含测试时期,以发布完整的系统而终止,其目标是确保信息系统真正满足客户的需求。,HeBei Normal University of Science&Technology,敏捷模型,“敏捷联盟”为了帮助希望使用敏捷方法来进行软件开发的人们定义了12条原则:(1)我们首先要做的是通过尽早和持续交付有价值的软件来让客户满意。(2)需求变更可以发生在整个软件的开发过程中,即使在开发后期,我们也欢迎客户对于需求的变更。敏捷过程利用变更为客户创造竞争优势。(3)经常交付可工作的软件。交付的时间间隔越短越好,最好23周一次。(4)在整个的软件开发周期中,业务人员和开发人员应该天天在一起工作。(5)围绕受激励的个人构建项目,给他们提供所需的环境和支持,并且信任他们能够完成工作。(6)在团队的内部,最有效果和效率的信息传递方法是面对面交谈。(7)可工作的软件是进度的首要度量标准。(8)敏捷过程提倡可持续的开发速度。责任人、开发人员和用户应该能够保持一种长期稳定的开发速度。(9)不断地关注优秀的技能和好的设计会增强敏捷能力。(10)尽量使工作简单化。(11)好的架构、需求和设计来源于自组织团队。(12)每隔一定时间,团队应该反省如何才能有效地工作,并相应调整自己的行为。,HeBei Normal University of Science&Technology,敏捷模型,敏捷方法是一种轻量级的软件工程方法,相对于传统的软件工程方法,它更强调软件开发过程中各种变化的必然性,通过团队成员之间充分的交流与沟通以及合理的机制来有效地响应变化。敏捷开发启动于“敏捷软件开发宣言”。在2001年2月,17位软件开发者在Utah召开了长达两天的会议,制订并签署了“敏捷软件开发宣言”,该宣言声明如下:我们正在通过亲身实践以及帮助他人实践的方式来揭示更好的软件开发之路,通过这项工作,我们认为:个体和交互胜过过程和工具;可工作软件胜过宽泛的文档;客户合作胜过合同谈判;响应变化胜过遵循计划。,HeBei Normal University of Science&Technology,敏捷模型,敏捷模型避免了传统的重量级软件开发过程复杂、文档繁琐和对变化的适应性低等各种弊端,它强调软件开发过程中团队成员之间的交流、过程的简洁性、用户反馈、对所作决定的信心以及人性化的特征。敏捷过程模型中比较有代表性的是XP模型(eXtreme Programming)。它由一系列与开发相关的规则、规范和惯例组成。其规则和文档较少,流程灵活,易于小型开发团队使用。XP认为软件开发有效的活动是:需求、设计、编码和测试,并且在一个极限的环境下使它们发挥到极致,做到最好。XP偏重于软件过程的描述,表现为激进的迭代,组织模型和建模方法比较薄弱。生存周期模型的选择要结合具体的项目特色,并在项目实施过程中予以改进。,HeBei Normal University of Science&Technology,1.5软件开发方法,软件开发方法是一种使用定义好的技术集及符号表示组织软件生产的过程,它的目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件。因此,针对不同的软件开发项目和对应的软件过程,应该选择合适的软件开发方法。常见的软件开发方法包括:结构化方法面向数据结构方法面向对象方法形式化方法 此外,软件开发方法还有问题分析法、可视化开发方法等。本书接下来的章节中将会对结构化方法和面向对象方法进行更见详细和深入的介绍。,HeBei Normal University of Science&Technology,1.6软件工程工具,软件工程的工具对软件工程中的过程和方法提供自动的或半自动的支持。可以帮助软件开发人员方便、简捷、高效地进行软件的分析、设计、开发、测试、维护和管理等工作。有效地利用工具软件可以提高软件开发的质量,减少成本,缩短工期,方便软件项目的管理。,HeBei Normal University of Science&Technology,软件工程工具,软件工程工具通常有三种分类标准:按照功能划分:功能是对软件进行分类的最常用的标准,按照功能划分,软件工程工具可分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。按照支持的过程划分:根据支持的过程,软件工程工具可分为设计工具、编程工具、维护工具等。按照支持的范围划分:根据支持的范围,软件工程工具可以分为窄支持、较宽支持和一般支持工具。窄支持工具支持软件工程过程中的特定任务,一般将其称之为工具;较宽支持支持特定的过程阶段,一般由多个工具集合而成,称之为工作台;一般支持支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。,HeBei Normal University of Science&Technology,软件工程工具,具体的说,在实际软件工程项目执行过程中,经常会使用到的软件工程工具包括:分析设计工具程序开发工具 测试工具 配置管理工具 项目管理工具,HeBei Normal University of Science&Technology,分析设计工具,(1)Microsoft Visio(2)Rational Rose(3)Together(4)PowerDesigner(5)CASE Studio,HeBei Normal University of Science&Technology,程序开发工具,(1)Microsoft Visual Studio(2)Eclipse(3)NetBeans(4)Delphi(5)Dev C+,HeBei Normal University of Science&Technology,测试工具,(1)Load Runner(2)Win Rnnner(3)Segue,HeBei Normal University of Science&Technology,配置管理工具,(1)Microsoft Visual SourcesafeMicrosoft Visual SourceSafe是微软公司出品的版本控制系统,简称VSS。软件支持Windows系统所支持的所有文件格式,通常与微软公司的Visual Studio产品同时发布,并且高度集成。包括服务器和通过网络可以连接服务器的客户端。VSS提供了基本的认证安全和版本控制机制,提供历史版本对比,适合于个人程序开发的版本管理。(2)ClearCaseClearCase是Rational公司开发的配置管理工具,可以与Windows资源管理器集成使用,并且还可以与很多开发工具集成在一起使用。ClearCase主要应用于复杂的产品发放、分布式团队合作、并行的开发和维护任务,包括支持当今流行软件开发环境Client/Server网络结构。它包含了一套完整的软件配置管理工具而且结构透明、界面可亲。,HeBei Normal University of Science&Technology,项目管理工具,(1)Microsoft Project(2)CA-SuperProject(3)Time Line,HeBei Normal University of Science&Technology,软件工程知识体系及知识域,软件工程知识体软件工程已从计算机科学与技术中脱离出来,逐渐形成了一门独立的学科。对其知识体系的研究从20世纪90年代初就开始了。标志是美国Embry-Riddle航空大学计算与数学系Thomas B.Hilburn教授的“软件工程知识体系指南”(Guide to Software Engineering Body of Knowledge,SWEBOK)研究项目。,Company Logo,软件工程知识体系及知识域,软件工程知识体系指南的内容 SWEBOK指南将软件工程知识体系划分为10个知识域(knowledge areas,KA),分为两类过程。一类是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类是支持和组织过程,包括软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法和软件质量。每个知识域还可进一步分解为若干论题。,Company Logo,软件工程知识体系指南的内容,Company Logo,【第一章 软件工程概述】,Thank You!,