软件危机和软件工程
软件危机:
指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
软件工程:
基于软件危机对计算机发展的阻碍,1968年,在联邦德国召开的国际会议上,北大西洋公约组织的计算机科学家讨论软件危机问题。提出了软件工程这个名词,从此软件生产进入工程化时代。
软件工程包括:
- 软件开发:软件开发方法学、软件工具和软件工程环境;
- 项目管理:软件质量、项目估算、进度控制、人员组织、配置管理、项目计划。
- 引起软件危机的主要问题是软件质量问题
- 软件工程主要解决的就是软件质量问题
- 软件测试是软件质量管理体系中一个非常重要的手段
软件生命周期
软件生命周期:
任何一款软件产品都具有自己有生命周期,生命周期描述了软件从出生到消亡的整个流程。
软件生命周期包括:
- 需求分析——《需求规格说明书》
- 概要设计——《概要设计说明书》
- 详细设计——《详细设计说明书》
- 编码——产品DEMO
- 测试——《测试总结报告》
- 验收——最终产品
软件开发模型
软件开发模型是各大、中、小企业开发软件产品最常使用的开发方法的流程模型。
常见的软件开发模型有:
- 瀑布模型优点:
- 是最早提出的软件开发模型;为项目提供了按阶段划分的检查点;当前一阶段完成后,只需要去关注后续阶段。
- 强调时间顺序的严格执行,上一阶段未完成,则下一阶段不开始,各个阶段的划分完全固定,阶段间产生的大量文档,极大的增加了工作量;
- 将测试放到了编码后,没有体现出测试贯穿软件生命周期的原则;贯穿软件生命周期的测试可以避免需求的问题一直延续到代码完成才暴露或者被发现
- 用户只能等到最后才能见到开发成果;
- 不适应用户需求的变化。
- 快速原型模型优点:
- 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险;适合预先不能确切定义需求的软件系统的开发。
- 选用的开发技术和工具不一定符合主流;
- 快速建立的系统结构加上连续修改会导致产品质量降低;
- 使用模型的前提是有一个产品原型,因此在一定程度上限制了开发人员的创新。
- 增量模型优点:
- 能在较短的时间内向用户提交可完成部分工作的产品;可以及时了解项目进展;开发周期内错误不影响整个系统,降低了开发风险;开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当优先级发生变化时可以对实现顺序进行调整。
- 需要软件具备开放式的体系结构;
- 需求的变化很容易退化为边做边改模型,从而使软件过程的控制失去整体性;
- 未很好处理增量包之间存在的相交情况,则必须做全盘系统分析。
- 迭代模型优点:
- 降低了在一个增量上的开支风险;降低了产品无法按照既定进度进入市场的风险;加快了整个开发工作的进度;迭代过程这种模式适应需求的变化会更容易些。
- 在项目早期开发可能有所变化 ,需有一个高素质的项目管理者和一个高技术水平的开发团队。
- 螺旋模型优点:
- 引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失;适合大型昂贵的系统级的软件应用;
- 因为螺旋模型基于风险分析进行,如果无法进行准确踏实的风险分析,开发成本将会非常大。
- 敏捷模型优点:
- 频繁交货与客户面对面的交流。高效的设计并满足业务需求。随时可以接受更改。它减少了总的开发时间。
- 由于缺少正式文件, 因此会造成混乱, 并且各个团队成员随时可能会误解贯穿各个阶段做出的重要决定。
- 由于缺乏适当的文档, 一旦项目完成并且开发人员被分配到另一个项目, 完成的项目的维护就会变得很困难。