Java程序构造©Day3

March 12th, 2018
标签(空格分隔): Java程序构造



第七章

7.5 软件测试 测试优先的编程

  • 认可测试价值
  • 学会两种黑盒测试方法 等价划分边界值分析方法 为模块设计测试用例
  • 可用工具度量一组测试用例对代码的覆盖度

参考阅读:MIT6.03103 代码大全第22章 软件工程-实践者的研究方法第17-18章

1 软件测试

什么是测试

测试:发现程序中的错误 提高程序正确性的信心

程序正确确认的基本方法:

  • 形式化推理
  • 代码评审
  • 测试

测试是提高软件质量的重要手段

  • 确认是否可达到可用的级别
  • 关注系统某一侧面的质量特性

  • 是否满足需求

  • 是否正确响应所有需求
  • 性能是否可接受
  • 是否可用
  • 可否正确部署安装
  • 是否达到期望
测试分类
  • 单元测试
  • 集成测试
  • 系统测试
  • 回归测试
  • 验收测试
白盒测试 黑盒测试

白盒测试:对程序内部代码结构的测试 只关注代码内部的问题

黑盒测试:对程序外部表现出来的行为的测试 采用两个方法

  • 等价划分
    将程序可能的输入进行分类 划分为不同集合 包括不合法数据
  • 边界值分析方法
    在各个集合中尽量去取用边界极限的测试用例

Java程序构造©Day3

测试困难
  • 软件行为在离散输入空间中差异巨大
    • 大多数正确 少数错误
    • bug出现不遵循特定概率分布
  • 无统计规律可循

2 测试用例

这一部分和其他部分联系紧密 不再赘述

3 测试优先编程

在编码之前写出测试 测试接口功能 测试方法正确性

Specification文档 需求

按照规定的语法编写注释 生成文档
Java程序构造©Day3

4 单元测试

针对软件的最小单元模型开展测试 隔离各个模块 容易定位错误和调试

  • 模型接口
  • 本地数据结构
  • 所有的正常输出
  • 边界条件
  • 所有的错误处理

第三章 ADT OOP

3.1 数据类型和类型检查

  • 动态 静态类型检查
  • 可变 不可变类型检查
  • 可变数据的危险性
  • 不变数据的优越性
  • 用snapshot图理解数据类型

软件构造理论基础–ADT
软件构造技术基础–OOP

参考阅读:MIT6.031 01 02 09 CMU15-214 02 Java编程思想第1-6章 11章

1 数据类型

数据类型
基本数据类型 对象数据类型
int long byte short char
float double boolean
Classes interfaces
arrays enums annotations
只有值 无ID 有值 有ID
不可变 可变或不可变
在栈中分配空间 在堆中分配空间
无法统一表达 可以统一表达
代价低 代价高昂
封装

把基本数据类型封装为对象类型 通常是在定义集合类型时使用它们

2 静态类型 动态类型

静态类型

  • 类型检查通常发生在编译阶段
  • 数据类型在定义后就确定 通常无法更改

动态语言

  • 在运行阶段检查

3 类型检查

三种检查策略
  • 静态类型检查
  • 动态类型检查
  • 不检查

折中

静态>动态>无检

静态类型检查

在编译阶段进行检查 避免将错误带入运行阶段 可提高程序正确性 健壮性

  • 语法错误
  • 类型错误
  • 参数数目错误
  • 函数名 类名错误
  • 返回值类型错误
动态类型检查
  • 非法参数值
  • 非法返回值
  • 越界
  • 空指针

易变性 永恒性

改变一个变量 和 改变它的值有什么区别
  • 改变一个变量 该变量指向另一个值得存储空间
  • 改变一个值 将变量指向的空间的值换成另一个值
不变性

不变数据类型 一旦建立 不能更改

例如final标签 尽量使用final作为方法的输入和局部变量

注意:

  • final类无法派生子类
  • final无法改变值 引用
  • final无法被子类重写

不变对象 和 可变对象

可变类型
Java程序构造©Day3
不可变类型
Java程序构造©Day3

差异
Java程序构造©Day3

两种类型的效率上有差别

  • 不可变类型:频繁修改 需要垃圾回收
  • 可变类型:无需拷贝 效率高

但是不可变类型更加安全 其他质量指标表现更好

风险实例:

  • 1 改变源数据
    Java程序构造©Day3
  • 2 返回可变类型
    Java程序构造©Day3

稍后更新

相关文章:

  • 2021-07-10
  • 2021-10-16
  • 2021-12-31
  • 2021-11-30
  • 2021-10-01
  • 2022-12-23
  • 2022-12-23
  • 2021-07-07
猜你喜欢
  • 2021-12-26
  • 2021-12-29
  • 2021-12-01
  • 2022-12-23
  • 2021-10-14
  • 2021-08-25
相关资源
相似解决方案