`
yh_private
  • 浏览: 38778 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

二. 测试的粒度,我们到底应该把粒度控制到多细?

阅读更多
对于数据不稳定的讨论:http://www.iteye.com/topic/221103

是不是一定要测试到具体数值才叫具体?在没有找到新方法之前,想保证测试具体到结果或者说是数值准确,那这个测试代码会表现的非常脆弱,而花费了很多心思去写出完美的测试最后这段测试代码也没有测出任何问题,有些得不偿失了。
为什么要写测试?
都是为了写出健壮的代码,正确的行为,获得重构的勇气等等。
好,如果说写出健壮代码需要写很细粒度的TestCase,而且数据库通常不支持我们这样做。导致测试很难写。

我想说,测试是分很多类型的,也可以认为是关注着不同的方向。
比如TestCase就要保证我的测试比较完善,包括对结果的验证,边界条件检查等等,这样的测试包括了我们业务代码的方方面面,包括在开发时想到的,没想到的。通过细粒度来提高我们程序的健壮性。也可以说是逼我们写出健壮的代码。
在比如TDD,其实TDD所关注的是需求,也就是代码的行为。他要保证业务代码被实现后确实做了我们预想的事情。很多时候我们不太关心TestCase的边界条件,毕竟,客户要件棉袄,这件棉袄可以过冬就行了,而我们花了很多时间做出了一个刀枪不入,甚至能穿着去外太空的棉袄,用户可能永远都不能用上这些花哨的功能。TDD需要小步快跑。不需要笨重的测试代码。
    上面两个简单例子他们都能为我们提供重构的勇气。同时可以发现不同的测试方法对于测试的关注点是不一样的。
我们的测试应该更多的关注行为。而不是去扣活的数据。数据的准确性是应该在我们开发代码时,最晚也是发布之前一定要确保的。那么我们现在关注的就只有行为,行为是否正确,行为是否被执行。这样对于测试,我们完全可以写出覆盖度非常高而且对数据依赖非常小的测试代码。比如
Void TestGetSomeReport(){
List list = someDao.getSomeReport();
assertNotNull(list);
}
这样就行了,这样的测试关注的是我的Dao是否被执行,如果执行表结构是否支持(如果表结构更变会得到通知)。而且对数据的依赖非常小。我们根本不需要去验证他们。现阶段我们只要保证所有的流程都会在测试中执行,这样就可以了。
如果进行重构这些反映代码行为的测试会告知重构者,他们是做什么的,当时的那个程序员的思考过程。这已经足够了,如果你不能保证重构之后的结果依然正确,就暂时不要去触碰他,等你有足够能力去保证产出的代码可以有正确结果之后在考虑这些。


由于我们暂时还不能得到稳定的测试数据,所以准备采用测试行为的方式。而更少去关注细节。对于业务型代码,粒度会加细。
由于推广测试的路途坎坷,不能一下子全部搞好,所以,准备先以粗粒度进行,并且保证覆盖度。
分享到:
评论
16 楼 yh_private 2008-08-15  
amonlei 写道
单元测试: 看代码覆盖率
集成测试:看业务操作覆盖率

不能一概而论,这两点我们处理的很理想,有兴趣可以讨论讨论

好.我现在的问题就是鼓励大家去写测试但似乎没有什么效果.因为是老项目.以前都没有什么测试代码的.大家也都习惯了没有测试的日子.
表现就是代码覆盖率是根本不动.
又不好逼着他们做测试.闲的时候都是去上网聊天.没见人主动做测试,而且给我找出N多理由.
15 楼 amonlei 2008-08-14  
单元测试: 看代码覆盖率
集成测试:看业务操作覆盖率

不能一概而论,这两点我们处理的很理想,有兴趣可以讨论讨论
14 楼 gigix 2008-08-05  
daquan198163 写道
另外每次都让hibernate重建表,每个测试后spring自动回滚事务
没觉得太麻烦,这样其实最稳定、最省事,一劳永逸


而且这个速度很快,一个test case以后就是一条rollback
13 楼 daquan198163 2008-08-05  
抛出异常的爱 写道

勇气之类的是个虚词。。。。。
代码评审要时时刻刻作。。。。
每个svn记录后都要有人查看一次。。。
不然重构有什么意义?

敏捷的四个核心理念之一——勇气,怎么变成虚词了啊?呵呵
靠肉眼评审,能保证重构成功了吗?(没有改变系统的接口和行为)
12 楼 daquan198163 2008-08-05  
我就是像你说的方法一那样做的,在setUp里new 出很多VO准备数据
另外每次都让hibernate重建表,每个测试后spring自动回滚事务
没觉得太麻烦,这样其实最稳定、最省事,一劳永逸

麻不麻烦,其实很大程度上取决于是否了解他的全部好处,
我坚信,一个程序员如果真的了解TDD到回报,是肯定愿意去麻烦一下的
11 楼 yh_private 2008-08-04  
抛出异常的爱 写道

勇气之类的是个虚词。。。。。
代码评审要时时刻刻作。。。。
每个svn记录后都要有人查看一次。。。
不然重构有什么意义?


是不是虚词这个事情我不想讨论。至少我不喜欢去碰那些没有测试的代码。
代码评审我们是有的。我发这个帖子的意思是想问问大家在一个已经进行了几年的项目中,如何推广测试,如何让他们接受测试。而上面正是我现在存在的问题。数据不稳定如何进行测试?测试由浅入深。并且想请教下大家是如何在团队中推广测试的。而且我现在面临比较大的困难是,同志们通常很不习惯写测试。
10 楼 抛出异常的爱 2008-08-04  
yh_private 写道
gurudk 写道
yh_private 写道
抛出异常的爱 写道
主要看需求的写法
如果这回写错了,
下回写细一点。

必竟TDD是以不断变化为前题的。


哎~我们团队测试还在推广阶段,我是不想一次给他们灌输太多东西。而且要做的事情也很多。只能从浅入深,一点一点来。所以尽量降低测试的门槛。不让他们测试那么多事情。现在团队测试积极性不是很高,这个事情又不是靠逼就能逼出来的。


换个思路,代码评审对编码质量的提高更好。



代码评审如何给我们重构时带来勇气呢?难道每次重构就要把所有相关的代码全部审一遍,更何况表结构这样的变更需要非常细心的评审,实施起来恐怕比较难?

勇气之类的是个虚词。。。。。
代码评审要时时刻刻作。。。。
每个svn记录后都要有人查看一次。。。
不然重构有什么意义?
9 楼 yh_private 2008-08-02  
leton2008 写道

单元测试更关注开发者完成的单一主体功能的测试。
部分集成测试则关注功能完整性和正确性的一种测试。


难道单元测试不需要关注单一功能的正确性和完整性?单元测试的正确性是什么评定的?是否是某方法返回的结果呢?

比如这样一个方法。他查询数据库,并统计当前注册人数。而这个人数是不断变化的。我们的测试应该如何写呢?
8 楼 yh_private 2008-08-02  
gurudk 写道
yh_private 写道
抛出异常的爱 写道
主要看需求的写法
如果这回写错了,
下回写细一点。

必竟TDD是以不断变化为前题的。


哎~我们团队测试还在推广阶段,我是不想一次给他们灌输太多东西。而且要做的事情也很多。只能从浅入深,一点一点来。所以尽量降低测试的门槛。不让他们测试那么多事情。现在团队测试积极性不是很高,这个事情又不是靠逼就能逼出来的。


换个思路,代码评审对编码质量的提高更好。



代码评审如何给我们重构时带来勇气呢?难道每次重构就要把所有相关的代码全部审一遍,更何况表结构这样的变更需要非常细心的评审,实施起来恐怕比较难?
7 楼 gurudk 2008-08-02  
yh_private 写道
抛出异常的爱 写道
主要看需求的写法
如果这回写错了,
下回写细一点。

必竟TDD是以不断变化为前题的。


哎~我们团队测试还在推广阶段,我是不想一次给他们灌输太多东西。而且要做的事情也很多。只能从浅入深,一点一点来。所以尽量降低测试的门槛。不让他们测试那么多事情。现在团队测试积极性不是很高,这个事情又不是靠逼就能逼出来的。


换个思路,代码评审对编码质量的提高更好。
6 楼 leton2008 2008-07-31  
spiritfrog 写道
粒度主要是看关注点了,一般来说主要关注的是功能。
不知道tdd是用什么粒度的测试, 看lz的意思,既然不需要过于笨重的测试,那么还是以细粒度为主,步步为营了?这样确实有利于重构,是否又更加符合tdd的理念一点。


测试的粒度?
我不知道楼主想表达的意思是指在开发部门一侧的呢?还是测试部一侧的?

单元测试,功能性测试(部分集成测试),系统集成测试。
这3个层级的测试的粒度很明显是不一样的。

单元测试更关注开发者完成的单一主体功能的测试。
部分集成测试则关注功能完整性和正确性的一种测试。
以上两种我认为均可在研发部门进行和完成。

5 楼 photon 2008-07-30  
还用逼吗?重赏之下必有勇夫,给那些开发的速度快,质量高的程序员多发奖金就好了。
4 楼 yh_private 2008-07-30  
抛出异常的爱 写道
主要看需求的写法
如果这回写错了,
下回写细一点。

必竟TDD是以不断变化为前题的。


哎~我们团队测试还在推广阶段,我是不想一次给他们灌输太多东西。而且要做的事情也很多。只能从浅入深,一点一点来。所以尽量降低测试的门槛。不让他们测试那么多事情。现在团队测试积极性不是很高,这个事情又不是靠逼就能逼出来的。
3 楼 yh_private 2008-07-30  
spiritfrog 写道
粒度主要是看关注点了,一般来说主要关注的是功能。
不知道tdd是用什么粒度的测试, 看lz的意思,既然不需要过于笨重的测试,那么还是以细粒度为主,步步为营了?这样确实有利于重构,是否又更加符合tdd的理念一点。


的确,TestCase是要关注功能,但我们的数据总是变,不能把功能关注到结果的级别。所以我选择了关注行为,首先我的测试程序要保证在测试的时候所有行为都被执行。100%覆盖。这样可以保证发布出去的程序不会出现低级错误,比如一个表结构更变,在没有测试的时候我们要手工去找所有与这个表有关系的SQL,然后去修改,这样很容易出现遗漏。出现低级错误。
至于TDD,我想他与TestCase是不同的两个事情。

我没太明白你所说的    
引用
是否又更加符合tdd的理念一点。
2 楼 抛出异常的爱 2008-07-30  
主要看需求的写法
如果这回写错了,
下回写细一点。

必竟TDD是以不断变化为前题的。
1 楼 spiritfrog 2008-07-30  
粒度主要是看关注点了,一般来说主要关注的是功能。
不知道tdd是用什么粒度的测试, 看lz的意思,既然不需要过于笨重的测试,那么还是以细粒度为主,步步为营了?这样确实有利于重构,是否又更加符合tdd的理念一点。

相关推荐

    数据流和控制流测试比较

    ### 数据流和控制流测试比较 #### 一、概述 软件测试是软件开发过程中不可或缺的一环,它确保软件产品能够按预期工作,并符合用户的需求。软件测试分为多种类型,其中包括黑盒测试和白盒测试。黑盒测试侧重于功能...

    一文读懂颗粒测试的基本知识和基本方法_新能源检测技术材料化学元器件汽车电子热分析实验室仪器温度.doc

    - 重复性:同一样品多次测量结果的一致性,直接影响测试的可靠性。 - 真实性:考虑不同测试方法因等效方法差异导致的结果偏差,反映了测试方法的适用性。 【颗粒测试方法】 常见的颗粒测试方法包括激光衍射法...

    细粒度用户评论情感分析数据集(2018-AI-challenger)

    共包含6大类20个细粒度要素的情感倾向....层次二为细粒度的情感对象,例如“服务”属性中的“服务人员态度”、“排队等候时间”等细粒度要素。每个细粒度要素的情感倾向有四种状态:正向、中性、负向、未提及.

    数据仓库|数据模型该如何设计?.doc

    - **DWD(明细层)**:这一层对ODS层的数据进行进一步的清洗和转化,构建最细粒度的明细事实表,以业务过程作为建模驱动。 - **DWS(汇总层)**:基于DWD层的数据,构建更高级别的汇总事实表,通常是宽表形式,以...

    上课的时候老师给的软件测试资料

    在软件开发过程中,软件测试是不可或缺的一环,它关乎到产品的质量和用户体验。下面将详细讲解软件测试中的关键知识点,包括软件质量保证与软件质量控制、软件测试的不同方法、测试策略、常用的测试工具以及测试项目...

    微程序控制器实验总结报告

    微程序控制器的核心思想是将机器指令分解为一系列更细粒度的微指令(Microinstructions),这些微指令在控制存储器(Control Memory)中以微程序的形式存储。微程序由一条或多条微指令组成,每条微指令包含若干微...

    jmeter-压力测试报告-超细

    总的来说,JMeter是一个强大的性能测试工具,能够提供超细粒度的测试数据和报告。通过对JMeter的深入理解和使用,IT专业人员可以有效地评估系统的性能极限,定位潜在问题,并进行系统优化,以保证服务的稳定性和用户...

    软件测试组织与管理!如果需要可以下载下来看看

    1. 单元测试:针对程序模块进行的最小粒度测试,验证单个功能或方法的正确性。 2. 集成测试:多个模块组合后进行的测试,检查模块间的接口是否正常工作。 3. 系统测试:针对整个系统进行全面的功能和性能测试,...

    ISTQB: Section 1 Answers & Presentation

    这部分涵盖了测试的基础知识,包括测试粒度、测试的主要益处、bug报告的定义以及软件错误的理解。 1. 测试粒度(Test Granularity)是指测试的焦点是精细还是粗略,即一个测试用例关注的是系统的具体细节还是整体...

    软件测试用例的粒度的讨论

    看项目Schedule:在项目时间紧张的情况下,往往留给测试人员的时间很有限,测试工作的重点就是多测试,早发现问题,这时候我认为测试用例的粒度是可以放粗一些的,但是“粗”不代表随意,虽然可以放“粗”一些,但是...

    纳米材料粒度测试方法大全_新能源检测技术材料化学元器件汽车电子热分析实验室仪器温度研发工程师试验硬件质量检测.doc

    本文将详细探讨8种常见的纳米材料粒度测试方法,以帮助研发工程师们更准确地评估和控制纳米材料的质量。 1. **电子显微镜法**: - 扫描电子显微镜(SEM)和透射电子显微镜(TEM)是研究纳米颗粒尺寸和形态的主要...

    三元材料的粒度分析方法总结_新能源检测技术材料化学元器件汽车电子热分析实验室仪器温度.doc

    【新能源检测技术与材料化学】 在新能源领域,材料的特性对于电池性能有着至关重要的影响,尤其是...同时,考虑到新能源领域对材料性能的高要求,粒度测试技术的持续优化和完善对于提升电池性能和一致性具有重要意义。

    用户评论情感分析数据集(细粒度)收集于(AI-challenger比赛)2018

    共包含6大类20个细粒度要素的情感倾向....层次二为细粒度的情感对象,例如“服务”属性中的“服务人员态度”、“排队等候时间”等细粒度要素。每个细粒度要素的情感倾向有四种状态:正向、中性、负向、未提及

    手机自动化测试框架搭建

    10. 框架的选择:选择合适的框架对于自动化测试平台的建立至关重要,需要考虑到测试的需求和资源的限制。 11. 自动化测试的挑战:自动化测试面临着许多挑战,包括测试框架的建立、测试用例的设计、测试数据的准备等...

    Node.js-在Postgres上实现快速即时的GraphQLAPI具有细粒度的访问控制

    标题中的“Node.js-在Postgres上实现快速即时的GraphQL API具有细粒度的访问控制”揭示了我们将在Node.js环境中构建一个GraphQL API,并利用PostgreSQL数据库作为后端存储,同时实现精细的权限管理功能。这涉及到多...

    AI Challenger 2018 细粒度用户评论情感分析数据集

    AI Challenger 2018 细粒度用户评论情感分析数据集 训练集: sentiment_analysis_trainingset.csv 为训练集数据文件,共105000条评论数据 sentiment_analysis_trainingset_annotations.docx 为数据标注说明文件 ...

    支持细粒度权限控制且可搜索的 PHR云服务系统.pdf

    【支持细粒度权限控制且可搜索的PHR云服务系统】 个人健康记录(Personal Health Record,PHR)云服务系统是一种将用户的医疗健康信息存储于云端,方便用户随时随地访问和管理的重要应用。该系统的核心特性是实现了...

    全员5G知识赋能题库更新(2020.12.31).xlsx

    1、 目前SPN已经由方案研究进入到技术研发、测试阶段,5G传输技术取得了什么样的进展? A. 突破性 B. 小进度 C. 大进度 D. 迈步性 2、 5G组网模式是以什么划分的 A. 无线是否采用双连接的模式 B. 用户接入模式 C. ...

    学习软件测试很好的课件资料

    下面,我们将深入探讨软件测试的重要概念、方法和实践。 一、软件测试基础 软件测试是对软件产品进行的系统化活动,通过执行程序来发现其中的错误、缺陷和漏洞,以确保软件满足预定义的需求和标准。测试不仅关注...

Global site tag (gtag.js) - Google Analytics