软件危机和软件工程
软件危机:
落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题。
引起软件危机的主要问题设是软件质量问题
软件工程:
软件开发技术:开发方法、软件工具、软件工程环境
软件项目管理:软件质量、进度控制、人员组织、项目计划
软件工程主要解决软件质量问题;
软件测试是软件质量管理体系中一个非常重要的手段。
软件生命周期
生命周期模型:
问题定义
可行性分析
需求分析(需求规格说明书)
概要设计(架构文档)
详细设计(详细文档)
编码(源代码)
测试(测试报告)和维护。系统测试
软件开发模型
瀑布模型
最早提出的软件开发的过程模型。
1.计划阶段——《项目计划》——定义阶段
2.需求分析阶段——SRS(软件需求说明)《需求规格说明书》
3.设计——概要设计HLD、详细设计LLD
4.编码
5.测试**——开发阶段**
6.运行和维护**——维护阶段**
存在问题
强调时间顺序的严格执行。前阶段不完成,后阶段不开始,缺乏灵活性。
将测试放在了编码之后,没有体现测试贯穿生命周期的原则。可以避免需求类问题延续到代码完成才暴露或者被发现。
优点
提供了按阶段划分的检查点
前一阶段完成后、只需要去关注后续阶段
缺点
阶段之间产生大量文档,增加了工作量
线性开发,整个过程末期才能见到开发成果、增加了开发风险
不适用于用户需求的变化
螺旋模型
引入了其他模型不具备的风险分析。使软件在无法排除重大风险时有机会停止,减少损失。适用于大型昂贵的系统级的软件应用。
迭代模型
迭代表示在之前(稳定、可执行)版本的基础上再加强和迭代,技术更深入的开发。
开发迭代是一次完整的经过所有工作流程的过程
优点:
降低了在一个增量上的开支风险
降低了产品无法按照既定进度进入市场的风险
加快整个开发进度。深入和优化
使适应需求的变化会更容易些
敏捷模型-scrum(快速、灵活)
敏捷宣言可以指导迭代的以人为中心的软件开发方法。
需求——分解为story——开发——再划分——story完成——开发演示——回顾——交付潜在可交付产品
增量模型
把软件分割成独立的模块,分批次完成和交付。
缺点:打破原有软件结构和框架可能会带来一定的风险。
一般和迭代模型一起运用。软件增加新功能;优化了……功能;修复了某些bug.
快速原型模型
原型:可以模拟操作、简单运行
应用和工具:Axure制作原型。
早期确定用户需求,确认之后进行开发。