第一章 概述
1.1计算机软件概述
1.1.2软件的特点
- 是一种逻辑实体,抽象性
- 不是传统意义的被制造
- 至今尚未完全摆脱手工艺的开发方式
- 不会磨损会退化
- 维护困难
- 本身是复杂的,实际问题的复杂和程序逻辑结构复杂
- 涉及到社会因素
- 60-80%的工作花费在第一次将软件交付给客户之
1.1.3 软件分类
按功能分类:应用软件,支撑软件(类库),系统软件(数据库管理系统,操作系统)
按大小分类
按工作方式:批处理,分时处理,实时处理(实时性指特定操作所消耗的时间与空间的上限是可预知的),交互式处理
按服务对象:项目(定制)软件,产品(通用)软件
1.2 软件发展
四阶段
1.3 软件危机与软件问题
开发软件遇到的问题:
- 不能满足客户要求
- 超出预算和时间安排
- 生产过程不像硬件那样规范,受人的因素和外界的影响很大,在软件生产的各个阶段都会引入不同程度的错误,造成不能预期完成任务,成本上升,甚至软件失败
软件危机的表现:
- 对开发成本和进度估计不正确
- 用户对已完成的软件不满意
- 质量靠不住
- 常常是不可维护的
- 没有适当的文档资料
- 软件成本所占比例逐年上升
- 开发生产率的提高速度远远跟不上计算机应用迅速普及深入的趋势
原因:
- 逻辑产品,开发进度和成本难以估计
- 不完整,不一致的文档给维护带来困难
- 用户对软件需求的描述不够精确
- 开发人员对需求的理解与用户愿望的差异
- 多人协同时,缺乏管理经验
- 开发人员不能有效,独立的处理大型软件的全部关系
- 缺乏有力的方法学和工具
- 软件的特殊性和人类智力的局限性
1.4 软件工程与开发准则
1.4.1 软件工程的概念
- 将系统化,严格约束的,可量化的方法应用于软件的开发,运行与维护,根本在于提高软件的质量与生产率,最终实现软件的工业化生产
- 软件工程是计算机软件开发的过程,方法和工具的学科
1.4.2 软件工程的内容
工具(为过程和方法提供自动或半自动的支持)
方法(软件开发过程采用的技术)
过程(软件人员进行的一系列的软件工程活动)
以上为软件工程三要素;
1.5 软件生命周期
指从软件目标的提出,定义,开发,维护,到最终被丢弃的过程;
1.6 软件开发模型
对软件过程的建模:任务及执行顺序,目标是保证质量和适应需求变化;
主要模型:瀑布模型,原型模型,增量模型,螺旋模型
1.6.1 瀑布模型
-
阶段间具有顺序性和依赖性
-
顺序性指必须在前一阶段的工作完成之后,才能进行下一阶段的工作
-
依赖性指只有前一阶段的输出正确,后一阶段的工作才有可能获得正确的结果
-
优点:1.线性是人们最容易掌握并熟练应用的思想
2.一个软件的整体可能是复杂的,而单个子程序总是简单的,可以用线性的方式实现。
-
推迟实现(缺点):编码完成后,用户才能看到产品
-
缺点:要求一开始清楚给出所有需求,以后也不能发生任何变化,这是不可能实现的,开始阶段上自然存在一些不确定性
边做边改模型:
问题:忽略需求环节,带来很大风险;缺少规划和设计环节,软件结构不断修改越来越糟,导致无法修改;
瀑布模型可能退化成边做边改模型,也是其缺点之一。
1.6.2 原型模型(只是壳子*,体现用户需求,简单界面设计)
项目开发中两个问题:1用户难以清楚的给出所有需求(不能标识详细的输入,处理,输出需求)
2 开发者不能确定以下问题:
编程语言的有效性;人机交互的形式;操作系统的适应性;
由以上问题给出原型模型:
- 收集用户需求:标识出已知需求,需要进一步澄清的区域
- 建立原型:能反映用户的主要需求,集中于用户可见的部分,输入,输出等
- 用户评估原型,进一步精华软件需求
- 逐步调整原型使其满足客户的要求
对比瀑布模型的优点:
- 原型为开发人员和用户提供了一种整理,分析和提炼软件需求的机制
- 用户不必等到项目开发周期的晚期才能得到程序的可运行版本
1.6.3 增量模型(融合瀑布模型和原型模型)
软件被作为一系列的增量构件来设计,实现,集成和测试
- 增量模型由一系列瀑布模型组成
- 原型模型时开发一个原型交给用户使用,然后根据用户的使用和评价,重新修改原型。增量模型也有类似的过程
- 原型模型迭代中产生的原型系统是为了明确产品需求,最终将被废弃
- 增量模型强调每一个增量均为发布的产品
- 需求的变化不可避免时,增量模型适应这种变化的能力大大优于瀑布模型和原型模型
- 软件过程的控制失去整体性时,容易退化成边做边改模型
1.6.4 螺旋模型(瀑布模型+原型模型)
强调了其他模型所忽视的风险分析,适合大型复杂系统
第二章 项目计划
2.1 问题定义
-
目的:明确用户要计算机解决的问题;
-
任务确定问题背景,待开发系统的目标和范围;
-
方式:1.口头形式了解用户要求
2.阅读用户提供的相关资料
3.现场观察亲自操作
-
成果:软件开发任务书
软件开发任务书的内容: