第一章 概 述
主要内容:
软件?软件的特点?软件的分类?计算机软件的发展
软件危机?表现?原因?克服的方法? 软件工程?七条基本原理? 软件过程?软件的生命周期? 软件过程模型? 软件开发方法 软件工具与软件开发环境要求 :
(1)识记:软件、软件的特点?软件工程? (2)领会:软件危机的出现,表现?原因?克服的方法,软件生命周期各阶段任务,软件工程方法学及常见软件过程模型。1.1 软件
定义: 软件 == 程序 + 数据 + 文档
1.数据:程序加工处理的对象。包括数据的表示、组织与存储。 数据 == 初始化数据 + 测试数据 2.文档(document) :开发、使用和维护程序所需的图文资料 。 文档 == 开发文档 + 管理文档。 3.程序(program) :能完成预定功能和性能的指令集合。 4.软件和程序的区别 程序只是完整软件产品的一部分。 编写程序只是软件开发过程数据中的一个阶段,一般来说,其工作量仅仅是软件开发全部工作量的10%-20%软件的特点
抽象性:逻辑实体。可记录。但看不到(Intangible),开发过程可视化程度低,开发结果难以直观表示。 可复制性:与开发成本相比,复制成本很低 无折旧 受硬件制约 未完全摆脱手工工艺 开发费用高软件分类
1、按适用范围分: 定制软件(Custom Software)项目软件 通用软件(Generic Software)产品软件。 2、按软件功能分: 系统软件;应用软件;支撑软件 3、按软件体系结构分 桌面软件;布式软件; 并行软件 4、按规模分: (1) 小型软件(1--5人年);(2) 中型软件(5--50人年) (3) 大型软件(50人年以上)。 5、按工作方式分: (1)实时软件;(2) 分时软件;(3) 交互式软件; (4) 批处理软件;(5) 嵌入式软件(Embedded Software)。计算机软件发展的三个时期
1. 早期时代(60年代中期之前)程序设计阶段 硬件通用,软件专用;程序规模小,编写者和使用者为同一人(同组人)。 2. 第二代(60年代中期-70年代中期)程序系统阶段 出现“软件作坊”、产品软件;“个体化”开发方法。 3. 第三代(70年代中期之后)软件工程阶段 软件开发成为一门新兴的工程学科——软件工程。1.2 软件危机
一、软件危机的产生
20世纪60年代中期以后,一些开发大型软件系统的要求提了出来。
然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。 遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。二、软件危机的定义
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 主要是两个问题: 1. 如何开发软件,怎样满足对软件的日益增长的需求。 2. 如何维护数量不断膨胀的已有软件三、软件危机的主要表现
1. 对软件开发成本和进度的估计不准确,甚至开发过程就夭折 2. 不满足需求,用户不满意的现象经常发生 3. 软件质量不高、可靠性差 4.缺乏适当的文档资料,软件常常不可维护、错误难以改正。 5. 软件成本占系统总成本的比例逐年上升 6. 软件开发速度跟不上计算机发展速度,软件生产率低,不能满足需要。四、产生软件危机的原因
与软件本身的特点有关,软件是逻辑产品,开发进度、成本难以估计 缺乏或不完整、不一致的文档给维护带来困难 用户对软件需求的描述往往不够精确,有遗漏,有二义 软件开发人员对需求的理解与用户的本来愿望有差异,在软件开发过程中,或多或少地采用了错误的方法和技术。对用户需求没有完整准确的认识,就匆忙着手编写程序。 大型软件项目需多人协同完成,缺乏管理经验 缺乏有力的方法学和工具的支持 软件项目的特殊性和人类智力的局限性五、解决软件危机的途径
1. 技术措施 消除错误的概念和做法 使用更好的软件开发方法和开发工具 2. 组织管理措施 软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。1.3 软件工程
一、什么是软件工程
软件工程(Software Engineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。 软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。二、软件工程的目标
软件工程的目标是在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。
四、软件工程研究的范畴
软件管理技术:包括计划、组织、控制、领导和激励等。
软件工程三要素: 方法、工具和过程
五、软件工程的本质特性
关注大型程序的构造
中心课题是控制软件固有的复杂性 应对需求变更 提高软件开发和维护的效率 提倡有纪律的过程 最终目的是使客户满意 难点是对问题域的认识和描述1.4 软件过程与软件生存期
一、软件生存周期
软件的生存周期(Software Life Cycle):软件产品或软件系统从设计、投入使用到被淘汰的全过程。
软件生存周期一般分为:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码和单元测试、综合测试)、软件维护等三个时期。
二、软件过程(Software process)软件过程:是软件生存周期中的一系列相关的过程。过程是活动的集合,活动是任务的集合。它规定了完成各项任务的步骤。
软件过程有三层含义: 个体含义,即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等; 整体含义,即指软件产品或系统在所有上述含义下的软件过程的总体; 工程含义,即指解决软件过程的工程,它应用软件工程的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件生产率,降低成本。能力成熟度模型CMM
CMM(Capability Maturity Model)即能力成熟度模型,用于评价软件机构的软件过程能力成熟度的模型。
CMM提供了一个成熟度等级框架: 1级-初始级、 2级-可重复级、 3级-已定义级、 4级-已管理级和5级-优化级。 CMMI能力成熟度模型集成模型为每个学科的组合都提供两种表示法: 阶段式模型和连续式模型 1.5软件开发模型 (Software Development Model)软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型或软件生存周期模型。
典型的软件过程模型有: 瀑布模型(waterfall model) 演化模型(evolutionary model) 增量模型(incremental model) 原型模型(prototyping model) 螺旋模型(spiral model) 喷泉模型(water fountain model) 基于构件的开发模型(component-based development model) 形式方法模型(formal methods model)1.5 软件开发方法
软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。
软件开发方法可分为两大类:
面向过程的开发方法 结构化开发方法 面向数据结构的开发方法 原型化开发方法 面向对象的开发方法