测试驱动开发(TDD)
测试应用有很多方法,例如,黑盒测试、白盒测试、迭代测试等,然而,这些方法都是从宏观上描述测试的。为了在技术上保障测试的效果,Kent Beck(也是极限编程创始人)提出了在结果上进行限制的测试方法,也就是在编写程序之前,先确定程序中的变量、控件等元素允许的值。如果在编写程序时,变量、控件中的值与事先确定的值不相符,就说明程序的某处有bug,这种测试方法就是TDD(Test Driver Development,测试驱动开发)。TDD和Opengl ES一样,并不是具体的软件或程序库,只是一套测试框架(Junit),可用于对Android应用程序进行TDD测试。
测试驱动开发即TDD是敏捷软件开发方法的重要组成部分。TDD是从极限编程中发展而来,它既可以用在设计时也可以用在开发实践中。TDD把业务需求转化为可以运行的测试代码并具有如下的优点
1.TDD从一开始就保证了code的质量
2.大多数TDD开发人员编写出来的code都遵循SOLID原则
3.TDD确保了代码与业务需求之间的高度一致性
4.TDD鼓励创建更简单,针对性更强的库与API
5.TDD鼓励与企业沟通
6.TDD有助于从系统中清除那些没有用到的code
7.TDD提供内置的回归测试
8.TDD终止了递归错误的出现
9.如果开发程序时能够时刻记着可测试性,所得到的结果就是一种开放的,可扩展的,灵活的体系结构。
在软件项目管理中,软件开发实践一直在追求一种在业务需求,当前技术能力与能最大程度提高开发人员效率的方法之间的一种平衡,敏捷软件开发方法也不例外。在了解敏捷开发方法之前需要清楚敏捷宣言。
敏捷宣言
它描述了一组软件开发方法的关键价值,也是敏捷软件开发方法所遵守的原则。其具体内容如下:
个人与互动 | 大于 | 流程与工具 |
可用的软件 | 大于 | 文档 |
与客户的合作 | 大于 | 合约和商定 |
响应变化 | 大于 | 遵循计划 |
敏捷宣言所描述的软件开发方法具有更快速,更轻型的特点;它解决了传统瀑布软件开发方法和迭代,递增方法的一些缺陷。从敏捷宣言中可以看出敏捷方法应该具备如下特点:
1.敏捷方法是适应型的(Adaptive),而不是预测型(Predictive)的。敏捷方法拥抱变化,利用变化来发展,甚至改变自己,最后完善自己。也就是要用重构(Refactoring)。
2.敏捷方法一人为本而不是以过程为本,传统方法把开发者看作一个生产要素(分析员,测试员,程序员),拥有大量的中间产品(需求规约,设计模型等),而忽视了作为决定因素的人的特殊性。敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。
3.迭代增量式的开发过程,敏捷方法以原型开发思想为基础。迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
敏捷是一种指导软件开发的思想,它并没有指定具体的软件开发方式或流程,目前常用的具体敏捷软件开发方法或流程如下:
- scrum
- XP(极限编程)
- 功能驱动开发
- Clear case
- 自适应软件开发
虽然这些软件开发方法的实现方式完全不同,但是他们具有如下的共同特征:
- 都将团队内部的交流放在优先地位,即鼓励开发人员,业务用户和测试人员经常交流。
- 注重项目的透明性;开发团队不是生存在一个黑盒中,不能向团队的其他成员隐藏自己的行为,都是用非常公开的工具来保证团队成员能够获得足够的信息
- 团队成员都是相互负责的;团队不会因为某一个人而成功或失败;他们的成功与失败是按整个团队来衡量的
- 开发人员没有自己的codebase,整个团队拥有完整的codebase,每个人都对其质量负责
- 工作是在短暂的开发周期中完成的,理想情况下,每个周期结束时会发布。
- 应对变化的能力是这种方法的基础
- 一个系统的大致框架是提前定义的,但详细设计要等到实际安排功能开发计划时才会进行
软件测试干货
在软件项目管理中,软件开发实践一直在追求一种在业务需求,当前技术能力与能最大程度提高开发人员效率的方法之间的一种平衡,敏捷软件开发方法也不例外。在了解敏捷开发方法之前需要清楚敏捷宣言。
敏捷宣言
它描述了一组软件开发方法的关键价值,也是敏捷软件开发方法所遵守的原则。其具体内容如下:
个人与互动 | 大于 | 流程与工具 |
可用的软件 | 大于 | 文档 |
与客户的合作 | 大于 | 合约和商定 |
响应变化 | 大于 | 遵循计划 |
敏捷宣言所描述的软件开发方法具有更快速,更轻型的特点;它解决了传统瀑布软件开发方法和迭代,递增方法的一些缺陷。从敏捷宣言中可以看出敏捷方法应该具备如下特点:
1.敏捷方法是适应型的(Adaptive),而不是预测型(Predictive)的。敏捷方法拥抱变化,利用变化来发展,甚至改变自己,最后完善自己。也就是要用重构(Refactoring)。
2.敏捷方法一人为本而不是以过程为本,传统方法把开发者看作一个生产要素(分析员,测试员,程序员),拥有大量的中间产品(需求规约,设计模型等),而忽视了作为决定因素的人的特殊性。敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。
3.迭代增量式的开发过程,敏捷方法以原型开发思想为基础。迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。
敏捷是一种指导软件开发的思想,它并没有指定具体的软件开发方式或流程,目前常用的具体敏捷软件开发方法或流程如下:
- scrum
- XP(极限编程)
- 功能驱动开发
- Clear case
- 自适应软件开发
虽然这些软件开发方法的实现方式完全不同,但是他们具有如下的共同特征:
- 都将团队内部的交流放在优先地位,即鼓励开发人员,业务用户和测试人员经常交流。
- 注重项目的透明性;开发团队不是生存在一个黑盒中,不能向团队的其他成员隐藏自己的行为,都是用非常公开的工具来保证团队成员能够获得足够的信息
- 团队成员都是相互负责的;团队不会因为某一个人而成功或失败;他们的成功与失败是按整个团队来衡量的
- 开发人员没有自己的codebase,整个团队拥有完整的codebase,每个人都对其质量负责
- 工作是在短暂的开发周期中完成的,理想情况下,每个周期结束时会发布。
- 应对变化的能力是这种方法的基础
- 一个系统的大致框架是提前定义的,但详细设计要等到实际安排功能开发计划时才会进行