软件工程复习内容

明天要考了,现在才开始复习,只能照着童鞋的笔记和老师的课件把重点内容敲一遍了~

过程选择

瀑布模型

文档驱动的模型,不需要工作经验:可行性研究与计划-(可行性研究报告)>需求分析-(需求说明书)->设计-(设计文档)->编程-(程序)->测试-(测试报告)->运行与维护

  1. 阶段间具有顺序性与依赖性(前一阶段输出作为后一阶段的输入,前一阶段完成后一阶段才开始)
  2. 推迟实现的观点
  3. 质量保证的观点

优点:

  1. 可强迫开发人员采用规范的方法
  2. 严格规定了每个阶段必须提交的文档
  3. 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证

V模型

VV模型

H模型

增量模型

迭代与增量
优点:

  1. 能在较短时间内向用户提交可完成部分工作的产品
  2. 逐步增加产品功能可以使用户有较多爹时间学习与适应新产品,从而减少一个全新产品对客户带来的冲击

快速应用开发RAD模型

演化模型

针对于甲方不知道自己需求的情况,开发基本上是线性进行的

原型开发

分为抛弃型和继承型

螺旋模型


风险驱动的,开发时间长

  1. 对可选方案和约束条件的强调有利于软件的重用,也有助于把软件质量作为软件开发的一个重要标准。
  2. 减少了过多的测试或测试不足带来的风险。
  3. 维护知识模型的另一个周期,在维护和开发之间并没有本质区别。

协同开发模型

敏捷模型

agile看板
要求:

  1. 持续集成
  2. 自动化测试
  3. 随时测试
  4. 有章法
  5. 需要有一定的工作经验

统一过程模型

RUP

4+1视图:

  1. 逻辑视图:功能需求
  2. 开发视图:可扩展性,可重用性,可移植性,易理解性,易测试性
  3. 处理视图:缓冲区,独立线程,易用性,性能,可伸缩性,持续可用性,鲁棒性,安全性
  4. 物理视图:安装与部署需求
  5. 场景:

IDP

系统分析

为什么要进行软件开发?(业务需求是什么?)
选择:谁做?参考?人数?
投入产出风险

软件设计

架构设计需要思考:

  1. 要满足什么条件
  2. 要解决什么问题
  3. 如何才能满意
  4. 有现成的东西参考

系统架构模式

(最简单的是调用与返回(面向过程)

  1. 管道和过滤器风格:每个构建都有一组输入和输出,用于开源主题(管道动过滤器不动)
  2. 仓库风格和黑板风格:数据为中心
  3. 数据抽象与面向对象风格:对象(管理者,负责保持资源的完整性,具有封装,继承,多态特性)通过函数和过程的调用来实现交互
  4. C/S风格
  5. B/S风格
  6. 系统分层风格:每层为上层服务,并作为下层客户,内部层次相邻可见
  7. 基于事件的隐式调用风格:不直接调用一个过程,而是触发或广播一个或多个事件
  8. MVC风格:把涉及数据管理和显示的功能分散到不同对象上,降低对象之间的耦合,强制性的使应用程序的输入、处理、输出分开
  9. C2模型:构建和连接都有一个底部和顶部,顶部连底部,底部连顶部不能直接连接,一个连接件可与一个或多个构件|连接件连接。
  10. 产品体系结构:共性部分+个性部分

内聚与耦合

信息隐藏原理:设计一个模块,使得包含的数据与过程对于不需要这些信息的模块来说是不能访问的。
局部化:把一些彼此关系紧密的元素物理上放的彼此靠近,它有利于实现信息隐藏。

耦合

用于衡量不同模块间相互依赖的紧密程度

  1. 内容耦合:直接访问内部过程数据(非正常入口),多个入口,代码重合
  2. 公共耦合:共享公共数据
  3. 控制耦合:传入参数控制逻辑
  4. 复合耦合:传入整个结构体
  5. 数据耦合:只传入需要的数据

内聚

用于衡量模块内各元素彼此的紧密程度

  1. 偶然型:只求体积而聚
  2. 逻辑性:功能相关模块组合,有参数决定执行哪一部分
  3. 瞬时型:同一时间段执行
  4. 通信型:访问同一数据,通过参数选择不同的作用
  5. 顺序型:完成多项功能,各个功能都在同一数据结构上操作,每项功能有唯一的入口点。
  6. 功能型:只完成一项功能

数据映射方法

变换流

输入->变化->输出(IPO)
交换分析:把具有变换流特点的数据流图按预先确定的模式映射成软件结构,中心变换模型,变换分析:DFD图可以明显分为IPO三部分

事务流

以事务为中心,根据类型不同选择活动通路
事务分析:数据流程图可以看成是对一个数据经过某种加工后按加工的结果选择一个输出数据流继续执行的处理

软件测试

软件质量成本

交付前成本
交互后成本
鉴定成本
预防成本

软件评审

非正式评审
走查
审查
交互评审

好软件特征

满足用户需求

  1. 能正常使用全部所需要的功能,符合需求规格。
  2. 功能强大,而且界面美观、易用、好用。
  3. 内容健康,有益于生活和工作。
  4. 用户的数据安全、受保护和兼容。
  5. 及时得到新的产品或得到更完美的软件服务。
  6. 软件可靠性很高,使用软件服务没有时间障碍。

满足企业需求

  1. 软件可维护性、兼容性、可移植性和可扩展性等

缺陷

意义

缺陷越迟发现,影响范围,返工工作量,危害越大

测试方法

白盒

根据程序的内部结构特性,选择适当的覆盖标准,测试用例对主要路径尽可能多的测试

  1. 语句覆盖:每一条语句
  2. 判定覆盖:每一个判断
  3. 条件覆盖:每一个条件
  4. 判定条件覆盖:2、3同时满足
  5. 条件组合覆盖
  6. 路径覆盖:每一条可能的路径

循环

  • 简单循环:循环0,1,2,m,n-1,n+1 (n为循环次数,m<n)
  • 嵌套循环:最内层开始(简单循环),外层为最小值,由内向外,本层外最小值,内层典型值
  • 串接循环:独立循环用简单循环,依赖循环用嵌套
  • 非结构循环:Z路径下,循环0,,

测试步骤:
选择逻辑覆盖标准->列出所有情况->选择测试用例->验证

黑盒

只考虑程序的功能来设计测试用例进行测试

等价类划分
  1. 有效等价类
  2. 无效等价类

一个测试用例尽可能覆盖多个有效等价类,最多只能覆盖一个无效等价类

边值分析法

选择等价类的边缘值作为测试用例,让每个等价类的边界都得到测试,选择测试用例既考虑输入亦考虑输出。
边界选择原则:

  1. 找输入值范围的边界。
  2. 按照输入/输出值个数的边界。
  3. 输出值域的边界。
  4. 输入/输出有序集的边界。

策略

单元:白盒(90%以上)+黑盒
集成:白盒+黑盒(最好灰盒)
确认:瞒住业务要求(1次)
系统:功能是否正确,齐全,瞒住业务需求,安全与否,性能,稳定与否,健壮性,可恢复性,压力测试,负载测试

  1. 自顶向下:桩模块深度优先,逐一替换,心模块集成后原来的部分需要重新测试
  2. 自底向上:驱动模块深度优先,工作模块被加入簇
  3. 复合集成:1+2

参考

张学长的笔记
舒大仙的笔记
老师的课件
学堂在线:清华大学《软件工程》
中国大学MOOC:东北大学《软件工程》