一、概述
软件的定义
软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。
软件的分类
- 按功能分:系统软件、支撑软件、应用软件
- 按规模分:大型、中型、小型
- 按工作方式分:实时/分时、交互/批处理
- 按服务对象分:定制软件、产品软件
- 按销售方式分:定单软件、非定单软件
软件危机的定义
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。
软件危机包含的问题
- 如何开发软件,以满足对软件日益增长的需求;
- 如何维护数量不断膨胀的已有软件。
软件危机的典型表现
- 对软件开发的进度和成本无法估计
- 用户对已经开发完成的软件的满意度非常低
- 软件质量无法保证
- 软件开发后的维护工作很难进行
- 软件通常没有合适的文档资料
- 软件成本在系统总成本中所占的比例越来越高
- 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
软件危机产生的原因
- 一方面与软件本身的特点有关。
- 另一方面也和软件开发与维护的方法不正确有关。
软件危机的解决途径
为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
软件工程的意义
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件工程的7条基本原则
- 用分阶段的生命周期计划严格管理。
- 坚持进行阶段评审。
- 实行严格的产品控制。
- 采用现代的程序设计技术。
- 结果应能清楚地审查。
- 开发小组的人员应该少而精。
- 承认不断改进软件工程实践的必要性。
软件生命的3个周期
- 软件定义
- 软件开发
- 运行维护(软件维护)
软件生命的8个阶段
- 问题定义
- 可行性研究
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
软件过程模型的种类
- 瀑布模型
- 原型(迭代)模型
- 喷泉模型
- 增量模型
- 螺旋模型
- 构件组装模型
瀑布模型
瀑布模型的优点
- 从上一项活动中接受该项活动的工作成果(工作产品),作为输入。
- 强调开发的阶段性;
- 强调早期计划及需求调查;
- 强调产品测试。
瀑布模型的缺点
- 从认识论角度看,人的认识是一个多次反复循环的过程,不可能一次完成。但瀑布模型中划分的几个阶段,没有反映出这种认识过程的反复性。特别是瀑布模型过于依赖早期进行的唯一一次需求调查,不能适应需求的变化;
- 软件开发是一个知识密集型的开发活动,需要相互合作完成,但瀑布模型没有体现这一点。特别是由于瀑布模型是单一流程,开发中的经验教训不能反馈应用于本产品的过程。
原型模型
项目的定义
项目是一个特殊的、将被完成的有限任务,它是在一定时间内,满足一系列特定目标的多项相关工作的总称。
项目管理的定义
项目管理就是以项目为对象的系统管理方法,通过一个临时性的、专门的柔性组织,运用相关的知识、技术和手段,对项目进行高效率的计划、组织、指导和控制,以实现项目全过程的动态管理和项目目标实现过程的综合协调与优化。
项目管理的四层含义
- 项目管理的对象——项目
- 项目管理的组织特点——临时性、富有柔性
- 项目管理的手段——计划、组织、指导和控制
- 项目管理的目标——实现项目全过程的动态管理及项目目标实现过程的综合协调与优化
二、可行性研究
问题定义阶段的工作目标
- 理解根本问题——问题背后的问题
- 确定涉众和用户
- 定义解决方案系统的边界
- 确定问题解决方案的约束条件
- 在根本问题的定义与理解上与用户达成共识
可行性研究的定义
所谓可行性研究,就是按照各种有效的方法和工作程序,对拟建系统项目在技术上的先进性、适用性,经济上的合理性、盈利性,以及项目的实施的可能性等方面进行深入的系统分析。
可行性研究的目的
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决,是否有必要去解决。
判断需求是否合理
可行性研究的内容
- 技术上的可行性
- 经济上的可行性
- 操作可行性
- 时间可行性
- 组织和管理上可行性
- 社会、政策允许的可行性
技术上的可行性
使用现有的技术能实现这个系统吗?即分析现有的技术条件实现系统的可能性。包括我们已经掌握或目前市场上可以获得的的计算机硬件、网络、平台软件和开发工具技术条件。
经济上的可行性
- 这个系统的经济效益能超过它的开发成本吗?
- 经济上的可行性包括两个方面:一是初步估算开发系统所需的投资,目前资金有无落实;二是估计系统开发成本与能带来的效益(包括直接效益、间接效益)。
操作可行性
- 系统的操作方式在这个用户组织内行得通吗?
可行性研究的结论
- 项目可以立即开始进行
- 需要增加资源才能开始,例如增加投资或人力。
- 需要推迟到某些条件具备后才能开始,例如组织机构的调整。
- 需要对系统目标作某些修改才能开始。
- 不能或没有必要进行,例如经济上不合理,投资相差太大。