1.理解概念
TDD:TDD全称Test-Driven Development,中文是测试驱动开发,是一种在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码的技术。
重构:重构就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。(百度百科)我自己的理解就是通过代码的优化,让一个程序能够在实现相同功能的前提下效率更高、更简洁、或者可重用性更好。
基准测试:基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。(百度百科)
在go语言里也可以编写基准测试,规则如下:
1.基准测试的代码文件必须以 _test.go 结尾
2.基准测试的函数必须以 Benchmark 开头,必须是可以导出的
3.基准测试的函数必须接受一个指向 Benchmark 类型的指针作为唯一参数
4.基准测试函数不能有返回值
5.b.ResetTimer 是重置计时器,这样可以避免 for 循环之前的初始化代码干扰
6.最后的 for 循环很重要,被测试的代码要放到 for 循环里
7. b.N 是基准测试框架提供的,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能
来源:https://www.cnblogs.com/leeyongbard/p/10388549.html
2.TDD例子
(1)先写测试
(2)尝试运行
(3)用最少的代码来让失败的测试先跑起来
(4)把代码补充完整,使得它能够通过测试
(5)重构
重构+=运算符并使用。
(6)基准测试
增加BenchmarkRepeat
结果:
3.TDD快排实践报告
(1)先写测试
package quicksort
import "testing"
func TestQuickSort(t *testing.T) {
arr := []int{23, 45, 11, 57, 39, 51, 97, 66, 8, 89}
result := quicksort(arr, 0, 9)
expect := []int{8, 11, 23, 39, 45, 51, 57, 66, 89, 97}
for i := 0; i < 10; i++ {
if result[i] != expect[i] {
t.Errorf("example [23, 45, 11, 57, 39, 51, 97, 66]; expected %v; but got %v\n", expect, result)
break
}
}
}
(2)尝试运行
(3)用最少的代码来让失败的测试先跑起来
package quicksort
func quicksort(arr []int, low, high int) []int {
return arr
}
(4)把代码补充完整,使得它能够通过测试
package quicksort
func quicksort(arr []int, low, high int) []int {
var ret []int = []int{8, 11, 23, 39, 45, 51, 57, 66, 89, 97}
return ret
}
(5)重构
快速排序是通过找到一个“中点”,将数组排成所有大于“中点”的在一边,小于“中点”的在另一边,然后分别对两边再次进行快速排序的递归算法,实现如下:
package quicksort
func partition(array []int, i int, j int) int {
pivot := array[i]
for i < j {
for j > i && array[j] > pivot {
j--
}
if j > i {
array[i] = array[j]
i++
}
for i < j && array[i] < pivot {
i++
}
if i < j {
array[j] = array[i]
j--
}
}
array[i] = pivot
return i
}
func quicksort(arr []int, low, high int) []int {
var mid int
if low < high {
mid = partition(arr, low, high)
quicksort(arr, low, mid-1)
quicksort(arr, mid+1, high)
}
return arr
}
结果:
(6)基准测试
func BenchmarkRepeat(b *testing.B) {
arr := []int{23, 45, 11, 57, 39, 51, 97, 66, 8, 89}
for i := 0; i < b.N; i++ {
quicksort(arr, 0, 9)
}
}
结果如下:
4.实验总结
通过这次实验,初步理解了TDD的思想,完成了简单的基准测试。