软件测试的艺术(读书笔记7)
下面继续本书第四部分的读书笔记部分
第四部分 开发中的调试和测试思想
第8章 调试;第9章 敏捷开发模式下的测试
第9章 敏捷开发模式下的测试
随着市场竞争的日趋激烈,今天的商业项目需要不断缩短发布时间,同时还要不断地为客户提供高质量的产品。而老一套的开发模式很难适应当今的竞争环境,所以有一些开发人员就开始讨论轻量化和快速的开发方法。这就是著名的《敏捷软件开发宣言》,这份宣言没有僵化的开发方法和复杂的技术结构,而更像是一份针对客户和开发个体的箴言警局。
1、敏捷开发的特征
从敏捷软件开发宣言可以发现敏捷开发的一些特征:
(1)客户参与
围绕以客户需求为导向的开发过程,需要让客户尽早参与到开发周期中,并一直到其结束;如果没有客户参与,敏捷开发等同失败,这时可以选择传统的开发流程。
(2)迭代开发
敏捷开发提倡迭代式和增量式的开发模式。
(3)测试驱动
测试在其中发挥重要作用,依赖单元测试和验收测试(极限编程)。
2、敏捷测试的特征
敏捷测试要求每个人参与到测试计划的设计、实现及执行中去。客户通过定义用例集以及程序属性参与到定义验收测试的设计中来。开发者和测试者打造可以进行功能自动化的测试组件。敏捷测试要求每个人参与,需要有大量的沟通与协作工作。
(1)客户参与
在客户参与阶段,客户需要参与到开发周期来定义验收测试的设计。
(2)自动化测试
开发人员需要在软件代码实现之前,创建单元测试。在软件代码实现后,有任何的代码的递增,都需要进行单元测试。所以需要自动化的单元测试。
(3)项目跟进
测试者不仅是把问题找出来交给开发人员修复,他们的任务是通过持续的测试反馈推动项目前进,并帮助开发这修复bug、改变需求及其他一般质量的提升。
3、极限编程与测试
极限编程是一种新的软件开发方法,可以很好的支持像Java、Visual Basic及C#等面向对象编程语言的应用。面向对象的开发语言虽然加快了程序的开发,但其质量并未得到保证。
XP(极限编程)开发方法的目的是短时间内开发高质量的程序。XP除了需要客户参与之外,还高度依赖模块的单元和验收测试,也就是说每次代码的递增和修改,开发人员都必须进行单元测试,以确保代码库满足其规格说明的要求。
3.1 极限编程基础
XP是一种使开发人员快速生产高质量代码的软件开发过程。如果将“质量”定义为:代码库对其设计的规格以及客户的满意程度。
XP的关注点是:
-
- 实现简单的设计。
- 开发人员与客户的沟通。
- 不断地测试代码库。
- 重构以适应规格说明的变更。
- 寻求用户的反馈。
XP更倾向于中小规模的软件开发,因为此类软件的规格说明变更非常频繁,同时还需要同客户进行实时的沟通。
XP同传统的开发过程相比有一下几点不同:
(1)避免大规模项目综合症
综合症:开始编码之前客户和编程小组碰头,设计软件的每个细节。XP的策划阶段重点在于收集应用程序的一般性需求,而非在所有小细节上。
(2)避免编写不需要的功能
将精力集中在必需的功能上,有助于短时间内开发高质量的软件。
(3)将主要精力集中在测试上
传统软件开发模型会建议首先编码,然后生成测试接口。但XP方法,先生成单元测试用例,然后才编写代码通过测试。
XP开发模型有12个核心实践,可总结归纳为4个概念
1.聆听客户和其他程序员的谈话
2.与客户合作,开发应用程序的规格说明和测试用例
3.结对编程
4.反复测试代码库
下表是极限编程的12个核心实践
实践 | 注释 |
1.计划与需求分析 |
|
2.小规模、递增地发布 | 努力添加细微的、实在的、可增值的特征,频繁发布新版本 |
3.系统隐喻 | 编程小组确认隐喻,便于建立命名规则和程序流程 |
4.简要设计 | 实现最简单的设计,是代码通过单元测试。假设变更即将发生,因此不要在设计上花太多时间,只是不停地实现 |
5.连续测试 | 编写模块之前生成单元测试,模块只有通过单元测试后才算完成 |
6.重构 | 清理和调整代码库。单元测试有助于不破坏程序功能,应在任何重构之后重新进行所有单元测试 |
7.结对编程 | 两位程序员协同工作,在同一台机器开发代码库。这样可以对代码进行实时检查,提高发现缺陷的概率和改正的几率 |
8.代码的集体所有权 | 所有代码归全体程序员所有,没有哪一个程序员只致力于开发某一个代码库 |
9.持续集成 | 每天的程序变更,需要通过单元测试后才能集成到代码库中 |
10.每周40小时工作 | 不允许加班。如果每周都全力工作了40小时,就不需要加班。在重大发布前的一星期例外 |
11.客户在现场 | 开发人员和编程小组可以随时接触用户,这样可以快速、准确地解决问题,是开发不至于中断 |
12.按标准编码 | 所有代码看上去必须一致。设计一个系统隐喻有助于满足改原则 |
重要的核心实践:XP计划和XP测试。
(1)XP计划
XP计划的重点是确定客户的应用需求,然后设计使用场景(或用例故事,User Story)来满足客户的应用需求。用户也可以在验收测试时使用这些场景。同时用户的深入参与,也可以获得对程序的拥有感和信心。
(2)XP测试
XP测试的关键是进行连续的测试。连续测试包括:单元测试和验收测试,但是单元测试占据主要部分。持续的测试也可以增强编程小组对代码库的信心。
3.2 极限测试
极限测试主要包括:单元测试和验收测试。
(2)单元测试
1.所有代码模块在编码开始前必须设计好单元测试用例;
2.产品在发布之前必须通过单元测试。
因此需要自动化的软件测试套件来进行单元测试,这些测试套件可以通过编写测试脚本,执行全部或其中的一部分。此外测试套件可以生成报告,并对程序中出现的缺陷进行分类。
(2)验收测试
验收测试是由客户而不是开发人员来执行的。验收测试可以是自动化或非自动化。验收测试也是回归测试的一种形式。
参考文献:
[1]敏捷软件开发宣言.http://agilemanifesto.org/iso/zhchs/manifesto.html
原文地址:https://www.cnblogs.com/chengabc/p/11351334.html
- Andrew Ng机器学习课程笔记--week8(K-means&PCA)
- Andrew Ng机器学习课程笔记--week7(SVM)
- Pytorch windows10安装教程
- Udacity并行计算课程笔记-The GPU Programming Model
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面
- 通俗理解决策树中的熵&条件熵&信息增益
- KNN实现手写数字识别
- softmax分类算法原理(用python实现)
- DeepLearning.ai学习笔记(一)神经网络和深度学习--Week4深层神经网络
- 博客园自定义皮肤扁平化设计
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week3 目标检测
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week2深度卷积神经网络 实例探究
- DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 库安装问题-whl is not a supported wheel on this platform.原因及解决办法
- 安装Go运行环境
- Python 语法问题-module 'pip' has no attribute 'pep425tags',告诉你如何正确查看pip支持,32位、64位查看pip支持万能方法
- 使用matplotlib绘制3D图表
- 微服务的用户认证与授权杂谈(下)
- Python 库安装问题-用pip安装pyHook3报错,原因及解决办法
- 微服务的用户认证与授权杂谈(上)
- Python 技术篇-win32、amd64结尾的whl库该选哪个,如何查看python平台支持
- Python 基础篇-pip卸载python库方法,pip命令大全
- Python 技术篇-pip安装的python库缓存位置查看方法,如何查看python库源码
- Redis持久化 - RDB和AOF
- Python 技术篇-pip只下载python库不安装方法,pip命令大全
- Python 技术篇-将项目打包成whl文件,whl包的制作方法
- PowerBI 超级粘性用户计算 - 原理与实现
- Chrome 技术篇-常用web调试手法:清除缓存并硬性重新加载