1、软件工程 Software Engineering,课程介绍及要求,用工程化的方法来开发软件,Copyright Xinjun Mao,课程介绍和要求,教学目标,为什么要学习这门课程 有助于正确理解和认识“软件”的概念及其特点 理解软件开发面临的问题和挑战 掌握软件工程的原则、方法和思想来系统地开发软件,尤其是复杂、庞大的软件的开发 了解和接触软件开发所需的各种技术手段 理解、掌握和运用,Copyright Xinjun Mao,课程介绍和要求,理解,什么是软件工程 为什么需要软件工程(产生背景) 软件工程需要解决那些问题 软件工程涉及那些方面内容,Copyright Xinjun Mao,课
2、程介绍和要求,掌握,软件工程 概念 技术 过程 手段 工具,Copyright Xinjun Mao,课程介绍和要求,运用,运用工程化思想进行软件开发 需求分析 软件设计 程序设计 软件维护,Copyright Xinjun Mao,课程介绍和要求,内容组织(见教学日历),先导要求,程序设计语言 最好有一定的软件开发经验,学习要求,听 理解知识点和思想 无需死记硬背 做 实践 体会软件工程的原则、方法和技术,在实践中提高 培养抽象思维能力 培养独立解决问题的能力 培养合作精神 想 阅读相关资料,Copyright Xinjun Mao,课程介绍和要求,9,课程实习要求(1/2),内容 选择一个
3、项目开发课题,用软件工程的思想知道其开发过程。完成需求分析,详细设计,测试,项目汇报。 分组 以小组为单位,68人一组为宜,Copyright Xinjun Mao,课程介绍和要求,课程实习要求(2/2),提交内容 电子文档与打印文档 评价方法 按阶段递交和打分 文档: 完整性、合理性、规范性 注意: 严格按照要求执行,Copyright Xinjun Mao,课程介绍和要求,参考文献,软件工程导论(第五版),张海藩,清华大学出版社 软件工程实践导论-有关方法、设计、实现、管理之三十六计,金尊和,清华大学出版社,2005. 软件开发的科学与艺术,微软亚洲研究院,电子工业出版社,2002 年 软
4、件工程实践者的研究方法,R S. Pressman, 机械工业出版社 现代软件工程, 周之英编著, 科学出版社,第1章 软件工程概述,软件工程产生的背景(软件危机) 软件工程定义 软件工程方法学 软件过程模型 小结,1.1 软件工程产生的背景,软 件a. 软件的定义软件( Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program) ,数据(Data)及其相关文档( Document)的完整集合。Software = Program + Data + Document程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,
5、维护和使用有关的图文材料,Copyright Xinjun Mao,14,非常复杂,逻辑复杂 远远高于硬件的逻辑复杂度 开发复杂 成本难以估算 进度难以控制 人员素质要求 质量得不到保证 96年Ariane火箭发射失败,浮点数转换时发生错误,1.1 软件工程产生的背景b、软件的特征,成本高(1/2),1.1 软件工程产生的背景b、软件的特征,Copyright Xinjun Mao,课程介绍和要求,成本高(2/2),Copyright Xinjun Mao,课程介绍和要求,风险大,1995年美国Standish咨询集团的统计分析(至90年代初的软件项目执行情况) 成功:16.2% 失败:31
6、受到挑战:53.8% 近几年来的统计数据 成功:26 失败:28 受到挑战:46%,1.1 软件工程产生的背景b、软件的特征,维护困难,维护形式多样化 改正性:修改故障 完善性:增加功能 适应性:移植 维护成本越来越高 55%到70 维护带来的问题,1.1 软件工程产生的背景b、软件的特征,1.1 软件工程产生的背景,c. 软件的发展,早期 面向批处理 有限的分布 自定义软件,第二阶段 多用户 实时 数据库 软件产品,第三阶段 分布式系统 嵌入“智能” 低成本硬件 消费者的影响,第四阶段 强大的桌面系统 面向对象技术 专家系统 人工神经网络 并行计算 网路计算机,1950,1960,1970,
7、1980,1990,2000,1968年10月,北大西洋公约组织(NATO)的科学家在德国召开的学术会议上正式提出了软件危机问题。,1.1 软件工程产生的背景,2) 、软件危机a、软件危机的表现(1/3),成本高 IBM 360 OS, 5000多人年,耗时4年(19631966),花费2亿多美元 美国空军:1955年软件占总费用(计算机系统)的18%,70年60%,85年达到85 美国全球军事指挥控制系统,硬件1亿美元,软件高达7.2亿美元 计算机软件和硬件费用比,软件质量得不到保证 软件应用面的扩大:科学计算、军事、航空航天、工业控制、企业管理、办公、家庭 软件越来越多的应用于安全攸关(s
8、afety critical)的系统,对软件质量提出更高的要求 80年代欧洲亚丽安娜火箭的发射失败,原因是软件错误 美国阿托拉斯火箭的发射失败,原因是软件故障 英国1986年开发的办公室信息系统Folios经4年,因性能达不到要求,1989年取消 日本第5代机因为软件问题在投入50亿美元后于1993年下马 由于软件质量问题导致失败的软件项目非常多,a、软件危机的表现(2/3),a、软件危机的表现(3/3),进度难以控制 项目延期比比皆是 由于进度问题而取消的软件项目较常见 只有一小部分的项目能够按期完成 维护非常困难 软件维护的多样性 软件维护的复杂性 软件维护的副作用,b、产生软件危机的原因
9、,与软件本身的特点有关 (难于维护, 逻辑复杂) 与软件开发与维护的方法不正确有关: 软件程序 急于求成=拔苗助长 各自为阵无方法/学,开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样 正如建设狗窝和高楼大厦 大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动,C、软件工程(学)因危机而产生,d、软件工程(学):克服软件危机的努力,(1)从管理的角度软件开发过程的研究、文档的标准化以及人们的交流方式等 (2)软件开发方法的研究结构化软件开发方法, 面向对象的开发,提出有效的方法和工具支持软件开
10、发 1968年提出软件工程概念和思想 20世纪70年代的结构化软件开发方法 20世纪80年代的面向对象的软件开发方法 新的技术: 软件重用、快速原型、需求工程 典型技术: COM, Java, C+, J2EE, .Net, . 支撑工具和环境:Jbuilder, Visual Studio, WebLogic, ,1、解决危机的技术途径,20世纪80年代末,美国DoD和工业界开始认识到管理的重要性 美国DoD的一项研究表明,70%的项目由于管理不善导致难以控制进步、成本和质量; 进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部 如果软件开发组织不能对软件项目进行有效
11、管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品,2、解决危机的管理途径,1.2 软件工程定义(1),The establishment and use of sound engineering principles (methods) in order to obtain economically software that is reliable and works on real machines. (1968- Fritz Bauer),软件工程就是建立和使用一套合理的工程原理,从而经济地获得可靠的、可以在实际机器上高效运行的软件。,1.2 软件工程
12、定义(2),Software engineering. (1) The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software. (2) The study of approaches as in (1). (IEEE(The Institute for Electrical and Electroni
13、c engineers) Std 610-1990.),软件工程是:(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;(2)研究(1)中提到的途径。,1.2 软件工程定义(3),Engineering is the systematic application of scientific knowledge in creating and building cost-effective solutions to practical problems in the service of mankind. Software engineering is t
14、hat form of engineering that applies the principles of computer science and mathematics to achieving cost-effective solutions to software problems.,SEI software engineering definition from 1990 SEI Report on Undergraduate Software Engineering Education (CMU/SEI-90-TR-003):,1.2 软件工程定义,总之:软件工程是应用计算机科学
15、、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。,软件工程的特性,1. 软件工程关注于大型程序的构造 2. 软件工程的中心课题是控制复杂性 3. 软件经常变化 4. 开发软件的效率非常重要 5. 和谐地合作是开发软件的关键 6. 软件必须有效地支持它的用户 7. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人,1.2 软件工程定义,软件工程的基本原理,用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组的人员应该少而精 承认不断改进软件工程实践的必要性,软件工程包
16、括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。软件工程方法学包含3个要素:方法、工具和过程。,1.3 软件工程方法学,1.3 软件工程方法学,软件工程: 一种层次化技术,软件工程三个要素:工具、方法、过程,基础层,综合方法及工具,定义方法使用的顺序,所需要的管理,为软件开发提供“如何做”的技术,为软件开发提供自动或半自动的软件支撑环境,建立计算机辅助软件工程(CASE)的软件开发支撑系统,1.3 软件工程方法
17、学,ALM(Application Lifecycle Management),MSF(Microsoft Solution Framework ),软件工程层次的扩展,1.4 软件生命周期模型,问题定义软件定义 可行性研究需求分析总体设计详细设计 软件生命周期 软件开发 编码单元测试综合测试运行维护 持久满足用户需求,1.4 软件过程模型,软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,工作任务,里程碑、交付物,SQA点,A process defines Who is doing What, When, and How, in order to
18、reach a certain goal.,公共过程框架,辅助活动,框架活动,任务集合,软件过程,1.4 软件过程模型,软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架(忽略不必要的细节)用一种模型表示出来,称为软件过程模型(或软件开发模型或软件生命周期模型)。也就是说, 软件过程模型是软件开发全部过程、活动和任务的结构框架。,1.4 软件过程模型,(1)瀑布模型(Waterfall Model )传统瀑布模型,1.4 软件过程模型,传统瀑布模型的特点提供
19、了软件过程模型的基本框架(模板)。强调了每一阶段活动的严格顺序。质量保证观点:以经过评审确认了的阶段工作产品(文档)驱动下一阶段的工作,便于管理。是一种整体开发模型,程序的物理实现集中在开发阶段的后期,用户在最后才能看到自己的产品。传统瀑布模型存在什么问题?,1.4 软件过程模型,实际的瀑布模型,1.4 软件过程模型,瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。“瀑布模型是由文档驱动的”这个事实也是它的一个主要缺点。实际项目很少按照该模型给出的顺序进行;用户常常难以清楚地给出所有需求;用户必须有耐心,等到系统开发完成
20、。,瀑布模型的优缺点,1.4 软件过程模型,(2)原型模型快速原型模型(Rapid Prototype Model),在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。,建造/修改原型,听取用户意见,用户测试运行原型,原型实现范型,1.4 软件过程模型,快速原型,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,变化的需求,验证,维护过程,开发过程,1.4 软件过程
21、模型,原型模型存在的问题 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。 开发过程不便于管理。有效的使用原型模式建造原型仅是为了定义需求,之后就被抛弃(或被部分抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。,1.4 软件过程模型,(3)增量模型 (Incremental Model),是一种渐进地开发逐步完善的软件版本的模型。,需求分析,验证,规格说明,验证,设计,验证,维护,针对每个构件完成详细设计、编码和集成,经测试后交付给用户,1.4 软件过程模型,分析,分析,分
22、析,分析,设计,设计,设计,设计,编码,编码,编码,编码,测试,测试,测试,测试,增量1,增量2,增量3,增量4,交付,交付,交付,交付, 反复的应用瀑布模型的基本成分和原型模型的迭代特征,每一个线型过程产生一个“增量”的发布或提交,该增量均是一个可运行的产品。 早期的版本实现用户的基本需求,并提供给用户评估的平台。,增量模型,1.4 软件过程模型,在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。 整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。 逐步增加产品功能可以使用户有较充裕的时间学习
23、和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。 采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。,增量模型的优点,1.4 软件过程模型,增量模型的困难,在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。 开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。 多个构件并行开发,具有无法集成的风险。,1.4 软件过程模型,(4)螺旋模型 (Spiral
24、 Model),软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。螺旋模型的基本思想是降低风险。,1.4 软件过程模型,快速原型,验证,规格说明,验证,设计,验证,编码,测试,综合测试,维护,变化的需求,验证,风险分析,风险分析,风险分析,风险分析,风险分析,风险分析,可看作在每个阶段之前都增加了风险分析过程的
25、快速原型模型。,简化的螺旋模型,1.4 软件过程模型,完整的螺旋模型,螺旋模型,风险 分析,工程 实施,用户通信,用户 评估,产品维护项目,产品增强项目,新产品开发项目,概念开发项目,计划,建造及发布,1.4 软件过程模型,螺旋模型的优点 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标 减少了过多测试或测试不足 维护和开发之间并没有本质区别 螺旋模型的特点 风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大 主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险 随着迭代次数的增加,
26、工作量加大,软件开发成本增加,1.4 软件过程模型,(5)面向对象模型,喷泉模型(Fountain Model),分析,设计,实现,测试,集成,演化,特点:主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征,1.4 软件过程模型,可重用部件组装模型 (构件集成模型) (Component Integration Model),构件(components)也称为组件,是一段实现一系列有确定接口的程序体,具有自己的功能和逻辑,能同其他构件集成起来协调工作。该模型支持软件重用(Reusability) ,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系
27、结构标准的构件,可以用来搭建分布式的、跨越不同操作平台(集成化软件开发环境(ISEE))的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。因此,在此基础上专家们又提出了“基于构件的软件工程”(CBSE)。构件集成模型如下图所示:,1.4 软件过程模型,构件集成模型软件体系结构被建立后,必须用构件去充实,这些构件可从复用库中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。,1.4 软件过程模型,Sommerville提出基于组件开发有两种思路: 完成高层设计,对设计中的组件给出描述,以便找出可复用的组件,这些组件可在体系结构层次上加入或更详细的设计
28、层次上加入。 先根据需求搜寻可复用组件,再将设计建立在获得的组件基础上。 这两种思路可结合起来。,设计系统体系结构,描述组件,搜寻可复用组件,集成系统,先完成架构设计的复用,系统需求描述,搜寻可复用组件,对需求作某些修改,体系结构设计,集成系统,复用驱动设计,1.4 软件过程模型,构件技术主要有三种流行标准:OMG的CORBA: 对象管理组织发布的公用对象请求代理体系结构(Common Object Request Broker Architecture)。通过一个对象请求代理(ORB)提供一系列服务,使得一个构件和其他构件通信,而不管它们在系统中的位置,实现了远程对象通过接口进行通信的机制。
29、为了解决CORBA对象引用不透明、缺少多重接口、系统过于复杂等问题,专家们又开发了新一代面向对象中间件平台 ICE ( Internet Communications Engine互联网通信引擎)。使构建分布式应用系统更容易、性能和伸缩性更好。,1.4 软件过程模型,微软的COM / DCOM:微软开发了构件对象模型(Component Object Model),它提供了运行于windows之上的单个应用系统使用不同厂商生产的构件的规约。基于分布式环境下的COM称为DCOM (Distribute COM)。 SUN的 EJB ( Enterprise JavaBean ):随着Java在企
30、业级应用的地位日趋重要,Sun提出了一个统一的企业级Java平台J2EE(Java 2 Enterprise Edition)。在J2EE中,EJB负责最核心的业务处理。它为服务器端的应用程序提供了一种与厂商无关的Java接口,让任何符合EJB规范的构件都可以运行在每一台这样的服务器上。,构件技术主要有三种流行标准:,1.4 软件过程模型,(6)统一软件开发过程是由Rational公司的Booch、Jacobson、 Rumbaugh提出的软件过程模型,也称RUP(Rational Unified Process)。RUP重复一系列周期,每个周期由一个交付给用户的产品结束。每个周期划分为初始、
31、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。模型见下图:,图1.10 RUP软件开发生命周期,1.4 软件过程模型RUP,初始阶段:进行问题定义,确定目标,评估其可行性,降低关键风险。细化阶段:制定项目计划、配置各类资源、建立系统架构(包括各类视图)。构造阶段:开发整个产品,并确保产品可移交给用户。移交阶段:产品发布、安装、用户培训。在每个阶段的每次迭代的最后,用例模型、分析模型、设计模型、实现模型都会增量,每个阶段结束的里程碑处,管理层做出是否继续、进度、预算、是否给下一阶段提供资助等决定。不同阶段工作流的侧重点不同,前两阶段大部分工作集中
32、在需求、分析和架构设计上;在构造阶段,重点转移到详细设计、实现和测试上。,7、敏捷(灵活)过程与极限编程,极限编程是敏捷过程中最有名的一个, 适于小型项目. 极限编程(XP,eXtreme Programming)对于传统的软件工程中看来是“极端的”实践.,图1.11 XP项目的整体开发过程,图1.12 XP迭代开发过程,XP values Communication Simplicity Feedback Courage Respect,1.4.8微软过程,图1.13微软软件生命周期阶段划分和主要里程碑,图1.14微软过程的生命周期模型,软件 =程序+数据+文档 软件危机: 原因,现象,办法
33、 (软件工程学) 软件工程(学):开发、运行和维护软件的系统方法 软件工程3个要素:方法、工具和过程。 软件生命周期:定义,开发,运行维护 软件过程:瀑布模型+RUP,1.5 小结,软件工程相关网站,软件工程专家网:http:/ 中国UML:http:/ 软件工程研究中心:http:/ UML软件工程组织:http:/ 测试时代:http:/ 测试管理中心:http:/ 开放软件测试研究:http:/ 硅谷动力:http:/ www.software-engineer.org:http:/www.software-engineer.org/ :http:/ xunit:http:/ 中国程序员:http:/ 中国系统分析员:http:/ 中国知网:http:/ 计算机世界:http:/ 中国电子报:http:/ 计算机应用文摘:http:/