第一章:软件工程学概述
软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机的表现形式:
? 对软件开发成本和进度的估计常常很不准确;
? 用户对“已完成的”软件系统不满意的现象经常发生; ? 软件产品的质量往往靠不住; ? 软件常常是不可维护的;
? 软件通常没有适当的文档资料;
? 软件成本在计算机系统总成本中所占的比例逐年上升;
? 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋
势。
软件危机的原因:
? 与软件本身的特点有关(难于维护,逻辑复杂) ? 与软件开发与维护的方法不正确有关
? 软件≠程序
? 急于求成=拔苗助长 ? 各自为阵无方法/学
消除软件危机的途径:
? 消除“软件就是程序”的错误观念
? 软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理
严密、各类人员协同配合、共同完成的工程项目 ? 成功的软件开发技术和方法 ? 软件工具和软件工程支撑环境
软件=程序+数据+文档
软件工程:是指导计算机软件开发和维护的一门工程学科。包含有技术和管理两方面的内容。
软件工程的本质特性:
? 软件工程关注于大型程序的构造 ? 软件工程的中心课题是控制复杂性 ? 软件经常变化
? 开发软件的效率非常重要 ? 和谐地合作是开发软件的关键 ? 软件必须有效地支持它的用户
? 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的
人创造产品
软件工程方法学三要素:工具,过程,方法。
? 软件方法:完成软件开发的各项任务的技术方法,回答“怎么做”的问
? ? ? ?
题;
软件工具:为运用方法而提供的自动的或半自动的软件支撑环境; 理论工具:逐步求精法、成本-效益分析法、软件度量
CASE(Computer-Aided Software Engineering)计算机辅助软件工程
软件过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
传统方法学——强调自顶向下:
? 传统方法学也称为生命周期方法学或结构化范型
? 它采用结构化技术(结构化分析、结构化设计和结构化实现) ? 结构化范型要么面向行为(即对数据的操作),要么面向数据
面向对象方法学——强调主动地多次反复迭代:把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
面向对象方法=对象+类+继承+用消息通信
面向对象方法学的优点:
? 面向对象方法学的尽量模拟人类习惯的思维方式,使开发软件的方法与
过程尽可能接近人类认识世界解决问题的方法与过程。
? 面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过
程,保证了在各项开发活动之间的平滑过渡。
? 促进了软件重用。降低了复杂性,提高了可理解性,简化了开发和维护
工作。
传统方法与面向对象方法比较:
? 信息隐藏(Information hiding) ? 有利用维护软件
? 使得软件开发变得容易 ? 职责驱动设计或按合同设计
软件生命周期:由软件定义、软件开发和运行维护(也称为软件维护)三个时期组成,每个时期又进一步划分成若干个阶段。
软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 软件过程模型:
? 瀑布模型
? 快速原型模型 ? 增量模型 ? 螺旋模型 ? 喷泉模型
? Rational统一过程 ? 敏捷过程与极限编程 ? 微软过程
瀑布模型的特点:
? 1. 阶段间具有顺序性和依赖性
前一阶段的工作完成之后,才能开始后一阶段的工作; 前一阶段的输出文档就是后一阶段的输入文档。 ? 2. 推迟实现的观点
对于规模较大的软件项目来说,往往编码开始得越早最终完成开发工作所需要的时间反而越长。 ? 3. 质量保证的观点
每个阶段都必须完成规定的文档,是“文档驱动”的模型;
每个阶段结束前都要对所完成的文档进行评审,尽早发现问题,改正错误。
瀑布模型的优点:
? 可强迫开发人员采用规范的方法;
? 严格地规定了每个阶段必须提交的文档;
? 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 瀑布模型的缺点:
? 只能通过文档了解产品,不经过实践的需求是不切实际的。 瀑布模型适用于:
? 需求是预知的;
? 软件实现方法是成熟的; ? 项目周期较短。
快速原型模型的特点:
? 快速原型模型不带反馈环,软件产品的开发基本上是线性顺序进行的。 ? 快速原型的本质是“快速”。应该尽可能快地建造出原型系统,以加速软
件开发过程,节约成本。
根据原型的不同作用,有三类原型模型:
? 探索型原型——用于开发的需求分析阶段 ? 实验型原型——主要用于设计阶段
? 演化型原型——用于及早向用户提交一个原型系统 比较:
? 瀑布模型试图一次就获得正确的产品 ? 快速原型频繁变化,然后废弃
增量模型:把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。
相关推荐: