一、软件危机
在计算软件的开发和维护过程中所遇到的一系列严重问题,这些问题不仅是不能正常运行的软件才具有的实际上,几乎所有软件都不同成都存在这些问题,软件危机包含一下两个方面问题:一是如何开发软件以满足软件日益增长需求,二是如何维护数量不断增长的已有软件
软件属于计算机系统中的逻辑部件,由于软件缺乏可见性,在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况比较难衡量,软件的质量也比较难评估因此管理和控制软件开发过程相当困难,软件在运行过程中不后悔因为使用时间过长而被“用坏”,如果运行中发现了错误,很可能是遇到了一个在软件开发时期引入的,而在测试阶段没能检测出来的错误,软件维护通常意味着改正或修改原来的设计这就在客观上使软件较难维护
软件危机有以下几种典型表现: 1、对软件开发成本和进度的估计不准确 2、用户对正在使用的已完成的软件系统不满意的现象时常发生 3、软件产品质量不佳 4、软件常常是不可维护的 5、软件通常没有相应的文档资料 6、软件成本在计算机系统总成本中所占的比例逐年上增 7、软件生产率提高的速度,远远跟不上计算机应用速度普及深入趋势
程序是软件产品的一个部分,一个软件产品必须由一个完整的配置组成,软件配置主要由程序、文档、数据等组成
消除软件危机的途径:软件是程序、数据及相关文档的完整集合,程序是能够完成预定功能和性能的可执行指令序列,文档是开发、使用和维护程序所需的图文资料,必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
二、软件工程基本理论、生命周期
1、用分阶段的生命周期计划严格管理 2、坚持进行阶段评审 3、实行严格的产品控制 4、采用现代程序设计技术 5、结果应能清楚的审查 6、开发小组的人员应该少而精 7、不断改进软件工程
软件工程传统方法学:传统方法学和面向对象方法学
软件生命周期中的阶段任务:问题定义、可行性研究、需求分析、总体设计、详细设计、编码、单元测试、综合测试、软件维护
把模型软件开发过程分解成这些阶段:制定开发阶段、需求分析和定义、系统设计、编码实现、测试验证;在软件开发实践中完全遵循这种过程取得成功的案列并不多,究其原因主要是用好这种模型有一个前提条件 就是需求必须明确不变,在实际应用中需求通常是模糊不清的可能发生变化这就出现了其他软件开发模型:演化模型、螺旋模型、增量模型
瀑布模型特点:阶段间具有顺序和依赖性、推迟实现的观点、质量保证的观点
快速原型模型优点:原型已经通过与用户交互而得到验证、开发人员通过简历原型系统已经学到了许多东西,因此在设计和编码阶段发生错误的可能性也比较小,减少了在后续阶段需要改正前面阶段所犯错误的可能性
RUP模型:是一个通用的过程框架,也是一个演化的开发过程,基于构件开发过程,开发过程中非常重视构件应用,是一个迭代的增量的开发过程,生命周期每一个阶段都包含了:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境邓核心工作流程
敏捷开发:开发团队是一个自我组织形的团队,可以很好的适应需求变化的软件设计与代码编写、团队组织,适用于轻量级开发
三、软件项目管理
项目管理是:为完成一个预定的目标,而对任务和资源进行计划、组织和管理的过程,通常需要满足时间、资源或成本方面的限制,利用系统的管理方法将职能人员(垂直体系)安排到特定的项目中(水平体系)去
约束项目四个阶段:识别需求、提出解决方案、执行项目、结束项目
特点:项目管理面向成果,项目管理基于团队工作,项目管理借助外部的资源提供一个跨职能部门的解决方案,项目管理是可变化的
项目管理三个基本要素:时间、费用、范围
前置任务的类型有五种:
1、完成——开始(FS):表示前置任务完成之后才开始当前任务
2、开始——开始(SS):表示前置任务一旦开始当前任务就开始
3、完成——完成(SF):表示前置任务与当前任务同时完成
4、开始——完成(SF):表示前置任务一旦开始当前任务就已经完成,默认此类型