软件工程 主讲:饶国政 天 津 大 学
联系方式 天津大学25教学楼B-607 邮箱:rgz@tju.edu.cn 课件及相关资源: http://202.113.2.12/faculty/rgz/new/se/
绪论 计算机科学是什么? 1、是科学?是工程学科?还是一门技术?……. 2、学科的智力本质是什么? 3、它将持续兴旺下去还是衰落下去? 4、 计算机科学和工程的核心课程是否反映了这个领域? 5、 怎样把理论和实验集成在计算课程中? 6、 各核心课程培养计算方面的能力吗? 7、 ......
计算机科学的三个学科形态
争论的结论 计算处于应用数学、科学和工程三者的主要过程的交叉路口。 这三个过程在本学科是同等重要和基本的。 它是理论、抽象和设计三者唯一的交汇点。
程序设计的作用 (1) "计算科学 = 程序设计"是错误的。 (2) 计算领域的许多活动并不是程序设计,硬件设计、体系结构、操作系统结构、数据库应用等。 (3) 程序设计是本学科标准的实践活动的一部分,每一个计算工作者必须有程序设计的能力。但这并不意味着本学科就建筑在程序设计的基础上,也不意味着导引性课程必须是程序设计方面的课程。 (4) 程序设计语言是涉足本领域特色的工具。 建议:程序设计作为核心课程的一部分,并把程序设计语言作为涉足计算学科重要特色的有用媒介。
计算机科学简短定义 (1) 计算学科是对描述和变换信息的算法过程的系统研究, 包括它的理论、分析、设计、有效性、实现和应用。 (2) 全部计算科学的基本问题是"什么能(有效地)自动进行?"。
计算机科学划分的分支领域
计算科学的学科能力的培养 (1) 面向学科的思维能力 发现本领域新的特性的能力,这些特性导致新的活动方式和新的工具,以便这些特性能被其他人所利用。 (2) 使用工具的能力 使用本领域的工具有效地进行其他领域时间活动的能力。 建议: 把面向学科的思维能力作为计算专业课程设置的主要目的。 同时,计算专业工作者必须充分熟悉工具,以便与其他学科的人们有效地合作,进行那些学科的设计活动。
学科渊源 (1) 本学科和算法理论、数理逻辑和存储程序式电子计算机的发明一起,形成于40年代初。 (2) 计算的渊源可以深入扩展到数学和工程。数学把分析分到这一领域,而工程把设计分到这一领域。 (3) 本学科包括它自己的理论、实验方法和工程。这与许多其他的自然科学不同。许多其他的自然科学和运用其成果的工程学科是分开的(例如化学和化学工程原理)、计算机科学与工程却是不可分的,因为本学科的科学与工程形态从根本上是相互渗透的。
与数学的关系 计算作为数学的主要对象已有几千年了。 自然现象的许多模型被用来导出方程,它的解就导致那些自然现象的预言。例如轨道的弹道计算、天气预报和流体的流动等。解这些方程的许多方法已经给出。例如线性方程组的解法、微分方程的解法和求函数的积分。 几乎在这同时,机械系统设计中所需要的计算成为工程主要关注的对象。例如计算静态物体压力的算法、计算运动物体惯量的算法和测量比我们直觉要大得多或小得多的距离的方法。
发展方向 (1)新一代计算机体系结构。该方向包括神经元计算、计算机设计与制造、网络与通信技术、大容量存储设备的研究、容错模型内容等; (2)并行与分布式软件开发方法学研究。该方向包括数理逻辑、计算理论、形式语义学、高级语言与程序设计理论、系统软件设计、软件工程、容错理论等内容; (3)人工智能理论及其应用。该方向包括数理逻辑、高等逻辑、算法理论、知识工程、神经元计算、人工智能高能语言与人工智能程序设计等内容; (4)计算机应用的关键技术。主要将围绕计算可视化与虚拟现实,计算几何,科学计算这几个重点方向开展有工作,并带动数据库技术、计算机图形学、自然语言处理与机器翻译、模式识别与图解处理等方向发展。在这一综合方向上研究内容将几乎覆盖所有的计算科学应用技术方向内容。
软件方法学和工程-基本问题 本领域研究满足技术要求、安全、可靠、可信的程序和大型软件系统的设计。基本问题包括: 1.在程序和程序设计系统的开发背后的原理是什么? 2.怎样去证明程序或系统满足它的技术要求? 3.怎样去给定技术要求,使不遗漏重要的情况,而且可以分析它的安全性? 4.怎样使软件系统通过不同阶段不断改进? 5.怎样使软件设计得易理解和易修改?
软件方法学和工程 –理论 软件方法学和工具练域理论的主要部分是: (l) 程序验证和证明。 (2) 时态逻辑。 (3) 可靠性理论。 (4) 谓词演算、公理语义学、和认知心理学等支撑领域。
软件方法学和工程 -抽象 软件方法学和工具抽象的主要部分是: (1) 定义技术要求的方法。如调词变换器、程序设计演算、抽象数据类型和弗洛依德一霍尔(Floyd-Hoare) 公理化符号。 (2) 方法学,如逐步提炼、模块化设计、模块、分离编译、信息隐藏(information biding) 、数据流和抽象层次。 (3) 程序开发自动化的方法。例如,文本编辑程序,面向语法的编辑程序和屏幕编辑程序。 (4) 可信计算的方法学;例如,容错,安全性,可靠性,恢复,N版本程序设计,多方式冗余,和检查点插入。 (5) 软件工具和程序设计环境。 (6) 程序和系统的测度和评估。 (7) 软件系统到特定机器结构的匹配问题域。 (8) 软件研制的生命周期模型。
软件方法学和工程 –设计 软件方法学和工具领域设计和实验的主要内容是: (1) 技术要求描述语言(如PSL 2,IMA JO) 、构造管理系统(如在Ada APSE) 和修改控制系统(如 RCS,SCCS) 。 (2) 指向语法的编辑器、行编辑器、屏幕编辑器和字处理系统。 (3) 在软件开发实践中倡导和使用的特定方法,如HDM,及Dijkstra,Jackson,Mills或Yourdon等人倡导的方法。 (4) 测试的过程和实践(例如,遍历、手模拟、模块间接口的检查、测试集的程序通路列举和事件跟踪) ,质量保证和计划管理。 (5) 程序开发和查错,剖面分析,文本格式化和数据库操作的软件工具。 (6) 像国防部那样的安全计算系统的标准级和验证过程的技术要求。 (7) 用户接口的设计。 (8) 设计非常大的、可靠的、容错的和可信的系统的方法。
学习“软件工程”的目的和意义 学会如何在现代IT企业的环境中做一个成功者; 学会如何做世界级的、高质量的研究; 学会如何创建大规模的软件产品。 —— 微软全球资深副总裁 原微软亚洲研究院院长 首席科学家 张亚勤
一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 智能网络 (Intelligent Web) ·从静态网到动态网 ·从被动方式到主动方式 ·从呈现信息和浏览的窗口到智能生成的平台 ·从HTML到XML 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势
一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 相对目前“打包式”软件,为用户提供智能化的“服务式”软件。
一、全球软件产业的现状、趋势与挑战 对中国软件企业有什么启示和挑战? 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 The Challenges and Opportunities of the Global Software Industry. 一、全球软件产业的现状、趋势与挑战 软件产业的网络化趋势 软件产业的服务化趋势 软件产业的全球化趋势 ·强调开放性、交互性 ·支持主流的开放式标准 ·人才的全球化 对中国软件企业有什么启示和挑战?
二、现代软件开发对人才的要求 Talent Beyond Technology _What Kind of Talent We Need for Modern Software Development 扎实的基础 创新、独立的工作能力 主人翁精神和团队精神 勾通与协调能力 成就感强、有激情 自觉地干好工作 契而不舍,从错误中学习
三、信息化建设中对复合型软件人才的需求 我国复合型软件人才匮乏,培养适应迅速变化的市场需求的复合型软件人才已是迫在眉睫。 复合型软件人才—具备不同专业背景、有市场观念的开发管理、工程管理和软件经营等复合型软件人才;
四、软件开发中的错误观点 1.只要掌握了1-2门程序设计语言,进行软件开发就没有问题。 2.软件需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。 3. 只要有最好的开发工具、最好的计算机,一定能做出优秀的软件。 总之,错误认为:软件就是程序,开发软件就是编写程序。
本课程学习的主要内容 1. 传统的软件工程方法 2. 面向对象的建模技术—UML统一建模语言 3. 软件项目管理及CMMI 4. 软件复用及构件工程 本课程以传统的软件工程技术为基础,主要讨论如何应用软件工程的最新技术 — UML统一建模语言进行软件开发,提高软件开发的水平和技术。
教材及主要参考书 1.软件工程(第2版) 作者:齐治昌、宁洪 出版社:高等教育出版社 ISBN:9787040146288 面向21世纪课程教材、国家精品课程配套教材
教材及主要参考书 2.软件工程—方法与实践 作者:许家珆 主编 白忠建,彭德中,吴磊编写 出版社:电子工业出版社
教材及主要参考书 3.软件工程 Software Engineering, 6th Edition 作者:(英)Ian Sommerville 出版社:机械工业出版社(影印版) 本书是英国著名软件工程学家 Ian Sommerville 系统介绍软件工程理论的力作,以要求极高的一类系统为实例,精辟透彻地阐述了软件工程的内涵。
参考网站 http:// www.mrcase.net 软件工程网 www.sei.cmu.edu 卡内基梅大学软件工程研究所 http://www.cetus-links.org/ 对象技术和构件技术链接 www.rational.com Rational公司 http:// www.mrcase.net 软件工程网 www.sei.cmu.edu 卡内基梅大学软件工程研究所 http://www.cetus-links.org/ 对象技术和构件技术链接 www.rational.com Rational公司 http://www.omg.org OMG(Object Management Group)
1 第一章 软件与软件工程
1.1 软件 软件的概念; 软件的特点; 软件的分类; 软件的发展; 软件危机。
软件是逻辑产品,需要计算机硬件和系统软件的支撑; 软件是计算机控制系统的指挥中枢; 软件是信息转换器,它能对信息进行加工、处理或变换; 软件的概念 软件是计算机系统的重要组成部分; 软件是逻辑产品,需要计算机硬件和系统软件的支撑; 软件是计算机控制系统的指挥中枢; 软件是信息转换器,它能对信息进行加工、处理或变换; 软件是工具,在人们的生活、工作、休闲,在社会的经济、军事、政治、文化、科学技术、教育中发挥具大作用;
计算机世界的软件 软件是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。 软件 = 程序+数据+文档 程序 = 算法+数据结构
软件的特点 软件是被开发或设计的,而不是传统意义上被制造的 软件不会”磨损” 软件产业逐步走向基于构件的组装,但还是定制的
软件由程序、数据、文档 组成。 数据 用程序设计语言要求的数据结构表示 文档 规范 准确 清晰 简洁 无歧义 自然语言 结构化英语 图表 软件的描述 软件由程序、数据、文档 组成。 数据 用程序设计语言要求的数据结构表示 文档 规范 准确 清晰 简洁 无歧义 自然语言 结构化英语 图表
程序设计语言 面向机器 汇编语言、机器语言等 面向过程 Fortran, Pascal, C等 面向对象 C++, Java等 面向机器 汇编语言、机器语言等 面向过程 Fortran, Pascal, C等 面向对象 C++, Java等 面向问题 结构化查询语言SQL等
软件分类 系统软件 实时软件 商务软件 工程和科学计算软件 嵌入式软件 人工智能软件 个人计算机软件
软件的发展 软件发展的四个阶段 1950---1965 没有系统的软件开发方法和管理机制、自定义软件、批处理、有限分布。 1965---1975 产生人机交互的新概念、新技术软件产品、多用户、实时、数据库。 1973---1988 微处理器的出现并广泛应用 分布式系统、嵌入智能、低成本硬件、消费者的影响。 1986---2000 广域和局域网络迅速普及 强大的桌面系统、面向对象技术、专家系统、人工智能、神经网络、并行计算、网络计算机。
2软件发展存在的问题 软件开发能力不能满足人们的需要。 社会对软件的依赖程度加大,人们普遍关注软件的安全和可靠性 建造高可靠性、高质量软件的任务任重道远。 若干年前开发的应用软件经过几十次修改已无人认识它的内部结构,己经不可维护。 由于经济原因,嵌入式系统存在许多怪现象,企业不愿意投入资源再生产,而采取打补丁+时髦界面的方法。
软件危机 软件开发成本过高 软件质量得不到保证 软件开发效率低 难以控制开发进度,工作量估计困难 软件危机的表现 软件产业的发展长期滞后,与硬件发展不协调。 软件开发成本过高 软件质量得不到保证 软件开发效率低 难以控制开发进度,工作量估计困难 软件不能满足社会发展的需求,成为社会、经济发展的制约因素
2. 软件危机原因 软件的规模加大、复杂性提高、性能增强 软件是逻辑产品, 尚未完全认识其本质和特点 缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法 用户对软件需求的描述和软件开发人员对需求的理解往往存在差异,用户经常要求修改需求,开发人员很难适应 软件开发的技术人员和管理人员缺乏软件工程化的素质和要求,对工程化的开销认识不足
1.2 软件工程的产生和发展 软件工程(Software Engineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。 随着互联网平台和环境的迅速发展,对软件工程的发展产生了变革性的巨大影响,网格计算、普适计算、中间件、网构软件等一批新技术和理念,从网络资源共享与管理,人机交互及软件服务等各方面提出了软件技术的新课题。
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程 — 传统的软件工程 2.第二代软件工程 — 对象工程 3.第三代软件工程 — 过程工程 4.第四代软件工程 — 构件工程
软件工程的发展已经历了四个重要阶段: 1.第一代软件工程 — 传统的软件工程 2.第二代软件工程 — 对象工程 3.第三代软件工程 — 过程工程 4.第四代软件工程 — 构件工程 60年代末到70年代为了克服“软件危机” (Software crisis)提出“软件工程”的名词, 将软件开发纳入工程化的轨道,基本形成软件工程的概念、框架、技术和方法。称为传统的软件工程。
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程 80年代中到90年代,面向对象的方法与技术得到发展,研究的重点转移到面向对象的分析与设计,演化为一种完整的软件开发方法和系统的技术体系,称为对象工程。
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 80年代中开始,人们在软件开发的实践过程中认识到:提高软件生产率,保证软件质量的关键是“软件过程”,是软件开发和维护中的管理和支持能力,逐步形成软件过程工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程
软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 90起年代,基于构件(Component)的开发方法取得重要进展,软件系统的开发可通过使用现成的可复用构件组装完成,而无需从头开始构造,以此达到提高效率和质量,降低成本的目的。称为构件工程。 软件工程的发展已经历了四个重要阶段: 1、第一代软件工程 — 传统的软件工程 2、第二代软件工程 — 对象工程 3、第三代软件工程 — 过程工程 4、第四代软件工程 — 构件工程
} 软件开发技术 } 软件管理技术 软件开发方法、技术 软件开发工具及环境 软件管理技术 软件规范(国际规范) 软件工程是一门新兴的边缘学科,涉及的学科多,研究的范围广,研究的主要内容有以下几方面: 软件开发方法、技术 软件开发工具及环境 软件管理技术 软件规范(国际规范) } 软件开发技术 } 软件管理技术
1.3 软件工程过程与软件生存期 为了克服软件危机,人们从其他产业的工业化生产得到启示,于是在68年北大西洋公约的软件可靠性会议(NATO)上,首次提出了“软件工程”的概念。提出了在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿到软件开发和维护的全过程。
软件工程过程 (Software engineering process) 是指在软件工具的支持下,所进行的一系列软件开发和进化的活动。 通常包括以下四类基本过程: 1、软件规格说明:规定软件的功能及其运行环境。 2、软件开发:产生满足规格说明的软件。 3、软件确认:确认软件能够完成客户提出的要求。 4、软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。
软件工程过程 (Software engineering process) 规程与方法 过程 有技能经过培训的开发人员 工具和设备
软件工程三要素 软件工程 过程 方法 工具 软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。
软件生命周期(SDLD)—瀑布模型 问题定义 可行性研究 需求分析 软件设计 编 码 测 试 运行与维护 (目标与范围说明书) 计划时期 (可行性论证论告) 需求分析 (需求说明书) 开发 时期 软件设计 (设计文档) 编 码 (程序) 测 试 (测试报告) 运行 时期 运行与维护 (维护报告) 瀑布模型
1.4 软件开发模型 软件过程模型是对软件开发实际过程的抽象和简化。 软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型。 软件过程模型是对软件开发实际过程的抽象和简化。 目前典型的软件开发模型有: 瀑布模型、增量模型、螺旋模型、喷泉模型、变换模型和基于知识的模型等。 不同的开发方法有不同的软件过程模型。
软件过程模型是软件开发全过程、软件开发活动以及它们之间关系的结构框架 软件项目的管理提供里程碑和进度表 为软件开发提供原则和方法
五类软件开发过程模型 以软件需求完全确定为前提的瀑布模型 在软件开发初期只能提供基本需求所采用的渐进式开发模型如原型模型、螺旋模型、增量模型、并发开发模型 以形式化开发方法为基础的变换模型 基于构件的开发过程 敏捷开发过程---统一软件开发过程RUP
瀑布模型 问题定义 可行性研究 需求分析 软件设计 编码 测试 运行与维护 (目标与范围说明书) 计划时期 (可行性论证论告) 开发 时期 运行 计划时期 (目标与范围说明书) (可行性论证论告) (维护报告) (测试报告) (程序) (设计文档) (需求说明书) 瀑布模型
瀑布模型主要思想 软件开发过程与软件生命周期是一致的 相邻二阶段之间存在因果关系 需对阶段性产品进行评审
瀑布模型的优点 软件生命周期模型,使软件开发过程可以在分析、设计、编码、测试和维护的框架下进行; 软件开发过程具有系统性、可控性,克服了软件开发的随意性 。
瀑布模型的缺点 项目开始阶段用户很难精确的提出产品需求,由于技术进步,用户对系统深入的理解,修改需求十分普遍。 项目开发晚期才能得到程序的运行版本,这时修改软件需求和开发中的错误代价很大。 采用线性模型组织项目开发经常发生开发小组人员“堵塞状态”,特别是项目的开始和结束。
增量模型(incremental model) 增量模型是一种非整体开发的模型。是一种进化式的开发过程。 根据增量的方式和形式的不同,分为: 基于瀑布模型的渐增模型 基于原型的快速原型模型 该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目。 增量模型和瀑布模型之间的本质区别是什么?
增量模型特点 增量 小而可用的软件 特点 在前面增量的基础上开发后面的增量 每个增量的开发可用瀑布或快速原型模型 迭代的思路
循环模型 为了描述软件开发过程中可能的回溯,尤其是维护阶段往往要经历上述各个阶段。采用循环模型描述。 评价 运行 计划 需求分析 测试 设计 编码 循环模型
1.快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能) 速成原型的工作模型是一个循环的模型。 1.快速分析 快速确定软件系统的基本要求,确定原型所要体现的特征(界面,总体结构,功能,性能) 2.构造原型 考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。 3.运行和评价原型 4.修改与改进 运行 评价 构造 快速分析修改 原型的工作模型
智能模型(intelligent model) 也称为基于知识的软件开发模型,是知识工程与软件工程相结合的软件开发模型。 获取需求 需求分析 具体描述 优化 程序 调整 验证 维护 知识库 专家系统 智能模型
1.5 软件开发方法 软件开发方法可分为两大类: 面向过程的开发方法 面向对象的开发方法 1.5 软件开发方法 软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。 软件开发方法可分为两大类: 面向过程的开发方法 面向对象的开发方法
结构化方法及瀑布模型 结构化开发方法(Structured Developing Method) 是现有的软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然和方便。 结构化方法总的指导思想自顶向下、逐步求精。它的基本原则是功能的分解与抽象。 一、结构化开发方法的组成 结构化程序设计方法 SP法(Structured Program) 结构化设计方法 SD法(Structured Design) 结构化分析方法 SA法(Structured Analysis) SA,SD,SP 法相互衔接,形成了一整套开发方法。
原型化方法及其工作模型 什么是原型化方法(Prototyping Method) 原型——是软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。 原型化方法的基本思想是花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。 原型化方法又称速成原型法(Rapid Prototyping)。
原型化方法及其工作模型 RSP法(Rapid Specific Prototyping)快速建立需求规格原型。 2、追加(add on)型 1、废弃(throw away)型 RSP法(Rapid Specific Prototyping)快速建立需求规格原型。 2、追加(add on)型 RCP法(Rapid Cyclic Prototyping)快速建立渐进原型法。采用循环渐进的开发方式,对系统模型作连续精化。
快速分析,确定初步规格说明 构造原型 运行/评价原型 修 N 正 原型完成否 改 进 原 型 Y N 要细部说明否 Y 严格说明细部 N 图2 细化的快速原型模型 快速分析,确定初步规格说明 快速分析或修改 评价 构造 运 行 构造原型 运行/评价原型 修 正 改 进 原 型 N 原型完成否 Y N 要细部说明否 Y 严格说明细部 N 效果满意否 Y 整理原型提供文档 细化的快速原型模型
原型模型的优点 原型模型支持软件需求开发,帮助用户和开发人员理解需求,是软件需求工程的关键。 它产生的正式需求文挡,是软件开发的基础。 如果开发的原型是可运行的,它的若干高质量的程序片段和开发工具可用于工作程序的开发。 原型的开发和评审是系统分析员和用户/客户共同参予的迭代过程,每个迭代循环都是线性过程。
螺旋模型 对大型软件,需要多个原型描述系统的生存期,螺旋模型将瀑布模型与原型化模型结合起来,并加入了风险分析。 螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期可分为4个工作步骤: 第一,确定目标、方案和限制条件; 第二,评估方案、标识风险和解决风险; 第三,开发确认产品; 第四,计划下一周期工作。 螺旋模型
螺旋模型的使用 软件工程项目从螺旋中心开始启动,沿顺时针方向前进。 第一圈 产生产品规格说明; 第二圈 产生一个用于开发的原型; 第一圈 产生产品规格说明; 第二圈 产生一个用于开发的原型; 第三圈 产生软件产品的初始版本; 第四圈 产生软件产品比较完善的新版本 ……。
螺旋模型的优点 符合人们认识现实世界和软件开发的客覌规律; 支持软件整个生命周期; 保持瀑布模型的系统性、阶段性; 利用原型评估降低开发风险; 开发者和用户共同参与软件开发,尽早发现软件中的错误; 不断推出和完善软件版本,有助于需求变化,获取用户需求,加强对需求的理解。
软件危机 IBM公司的 OS/360,共约100万条指令,花费了5000个人年;经费达数亿美圆,而结果却令人沮丧,错误多达2000个以上,系统根本无法正常运行。 OS/360系统的负责人Brooks这样描述开发过程的困难和混乱:“…像巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能够逃脱淹没在泥潭中的命运。…” 1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序: DO 5 I=1,3 误写为:DO 5 I=1 . 3 1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,导至在进入大气层时因打不开降落伞而烧毁。
“软件危机”(Software crisis)的出现是由于软件的规模越来越大,复杂度不断增加,软件需求量增大。而软件开发过程是一种高密集度的脑力劳动,软件开发的模式及技术不能适应软件发展的需要。致使大量质量低劣的软件涌向市场,有的花费大量人力财力,而在开发过程中就夭折。