软件从产生、发展到成熟、直至衰亡为止。组成:软件定义、开发、维护
用户从最开始提出让你给他生产一个软件,到你生产完交给用户使用,到用户使用了漫长的时期,到最后决定抛弃这个软件。整个这个过程就叫【软件生存周期】
《计算机软件开发规范》-GB
- 可行性研究与计划,研究一下开发这个软件是否可行?粗略的计划
- 需求分析,开发这个软件是干什么的?☆需求规格说明书☆
- 总体设计,怎样实现目标系统?根据需求设计方案,设计软件架构。总体设计说明书
- 详细设计,该怎样具体实现系统,设计每个模块的算法和数据结构
- 实现(编码与单元测试):选择语言、工具翻译详细设计结果、测试模块
- 集成测试,将通过单元测试模块组装起来进行测试,使软件达到预定要求
- 确认测试,由用户按(需求说明书)规定进行测试
- 使用和维护,通过必要维护活动使系统持久满足用户需求
瀑布模型
特点:
1. 阶段具有顺序型和依赖性。
前一阶段结束 后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
2. 推迟实现观点。
瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现。保证前期工作扎实。磨刀不误砍柴工
3. 质量保证观点
瀑布模型每阶段坚持两个重要做法:
①每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。
②每阶段结束前对文档评审。这个阶段的问题这个阶段解决!
传统瀑布模型(过于理想化),但人在工作过程中不可能不犯错误,所以实际的瀑布模型带反馈环。
优点
提高软件质量,降低维护成本,缓解软件危机。
缺点
缺乏灵活性,无法解决需求不明确问题。用户不经过实践提出完整准确需求不切实际。
快速原型模型
快速建立反应用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品。
通过建立一个软件原型,然后让用户评价,然后获得更多的需求,然后开发出软件产品。用尽量少的时间建立出一个原型系统(快速原型)。
优点
- 确定需求上 优于瀑布模型(通过原型与用户交互);
- 提供学习手段,通过开发原型和演示原型 对开发者和使用者了解系统都有积极作用;
- 有的软件原型可以成为最终产品的一部分。
缺点
快速简历的系统结构+连续修改可能导致产品质量低下,原型系统的内部结构可能不好。
适用:需求不确定的软件
增量模型
渐增模型,开发软件时将(软件产品)作 一系列增量构件 设计、编码、集成和测试。
区别于 瀑布模型 和 快速原型模型:
瀑布/快速原型 是一次把满足所有需求产品提交给用户;
增量模型 是分批向用户提交产品。
优点
- 较短时间 向用户 提交可完成 有用工作产品;
- 用户有充裕时间学习适应产品;
- 软件结构必须开放,方便向现有产品加入新构件。
缺点
- 做到第三个优点比较困难。
这个增量模型在 实现构件前 完成总体的需求分析、规格说明和概要设计,相对来说风险较小。
风险更大增量模型:确定用户需求后,各构建集并行构建。
螺旋模型
加入了 风险分析,常用于指导大型软件项目。
软件风险:超期、超预算、行业竞争 等。
沿螺旋 自内向外 每旋转一圈开发出 更完善新版本。
优点
- 大型软件开发项目有 较好 的 风险控制
缺点
- 需要风险评估的经验;
- 契约开发通常需要实现指定过程模型和发布产品;
- 普及不如前述模型。
喷泉模型
面向对象 生命周期模型,体现 迭代 和 无缝 特性。
迭代
求精,系统某部分常被重复工作多次,相关功能能在每次迭代中逐渐加入演进系统
无缝
分析、设计、编码各阶段间不存在明显边界
优点
无缝,可同步开发,提高开发效率,节省开发时间,适应面向对象软件。
缺点
可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。
数据流图(DFD图)
可行性研究阶段。是一种图形化技术,描绘 信息流和数据 从输入移动 到 输出 的过程中所经受的变换。没有任何的物理部件,只是描绘 数据在软件中的流动和被处理的逻辑过程。
用途:
①交流信息的工具。分析员把他对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认。
②作为分析和设计的工具。相比于系统流程图,能 着重描绘系统所完成的功能而不是系统的物理实现方案。
层次图
需求分析阶段。用树形结构的一系列多层次的矩形框描绘数据的层次结构。
顶层:代表完整的数据结构;
各层矩形框:这个数据的子集;
最底层的矩形框:组成这个数据的实际数据元素(不能再分割的元素)。
系统分析员从顶层信息的分类开始,沿图中每条路径反复细化,直到确定了数据结构的全部细节为止。
IPO图
输入、处理、输出 图的简称,能方便的描绘输入数据、对数据的处理 和 输出数据之间的关系。
左边的框:有关的输入数据;中间的框:主要的处理;右边的框:产生的输出数据。
在需求分析阶段 可以使用IPO图简略地描述系统的主要算法(即数据流图的各个处理的基本算法)。
许多附加纤细暂时还不具备,但是在软件设计阶段可以进一步补充修正这些图,作为设计阶段的文档。
软件测试
定义:为了 发现程序中的错误 而执行程序的过程。
黑盒测试
(功能测试),把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是 在程序接口进行 的测试,
它只检查① 程序功能 是否能按照 规格说明书的规定 正常使用,
②程序是否能适当地 接收输入数据并产生正确的输出信息,
③程序运行过程中能否 保持外部信息(例如数据库或文件)的完整性。
白盒测试
(结构测试),把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。
这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行桐庐是否都能按预定要求正确工作。
- 模块、模块之间耦合度的问题
- 模块是什么意思?区分模块的要素是什么?
- B/S、C/S的区别
- 做一个项目怎么开始划分?