关于单元测试的一个纠结的问题

问题描述

单元测试需要实现路径遍历吗?假如有一个函数,该函数带有一个参数,参数有边界值1和100我是否需要写五个测试函数?1。fun(0)2。fun(1)3。fun(50)4。fun(100)5。fun(9999)所以单元测试的目的是什么?仅仅只要传递一个参数,让它过就可以了吗?还是要实现路径的遍历,边界值的遍历?谢谢!

解决方案

解决方案二:
1、保证代码质量、可维护性、可扩展性2、还要测试变量没有初始值、无法值的情况
解决方案三:
我的理解单元测试算黑盒测试给参数,看结果,怎么实现不关心
解决方案四:
自检,发现一些低级问题,如数据验证、字符长度、异常操作导致的系统出错
解决方案五:
你说的是测试覆盖率吧。就是说测试的代码路径是否覆盖所有的分支条件以及它们的组合。一般我们的实践是,测试用例要100%覆盖你的代码,同时尽可能多的覆盖条件的组合。VisualStudioUnitTest和很多测试工具都可以辅助帮你测量测试覆盖率。
解决方案六:
就你的测试用例,没有函数的代码,无法判断覆盖率如果是两个极端情况:intfun(inta){returna;}那么一个测试用例足以保证覆盖了全部代码如果是intfun(inta){if(a>10000)return1;elsereturn0;}虽然你的测试用例很多,但是还是只覆盖了50%。
解决方案七:
引用楼主wxcnl的回复:

单元测试需要实现路径遍历吗?

如果你做的是课堂练习,那么答案可能是“可以做”。但是实际项目中,比如说有着1万行的代码中,其实如果你去先去穷举什么“路径”,你试试看要多久?而且人家每天随便修改几百处代码,那么路径就会由10亿条中少了2欠条,而多了3千条。请问有哪个测试人员保证更得上这个节奏?其实空谈各种测试指标,是手工测试人员的毛病。不实际。她们可以整天在那儿对着老板说理论,然后“自己”实际做到的只有千分之一。实践告诉我们,也许是不是需要覆盖路径(注意不是代码覆盖,是“路径”覆盖)我不知道,但是我知道哪一个人给她1年时间闭门研究也搞不定一年前的什么路径覆盖,更别提更上开发的节奏了。
解决方案八:
如果你只是一个“跟在开发人员屁股后边”的测试人员,你问“单元测试的目的是什么”,我只能告诉你“并不需要这样的测试人员”。单元测试的目的首先是驱动出开发进度,但凡重要的开发“基线”都应该先写测试后实现,而不是先实现然后才写测试。单元测试的第二个目的就是发挥某些有经验的测试人员的“创意”,他们可以预见到某些测试可以深入到系统内部的某些机制,因而“故意”埋下一些测试。第三个目的就是保证每天都可以把全部测试运行几千遍,可以打乱次序进行测试,可以并发多线程测试,用任劳任怨的机器去而避免手工测试人员那种“假装挺忙,其实根本不能经常进行回归测试”的毛病。第四个目的,当然就是保证先测试后提交到代码管理系统上,一边保证代码都是可以编译、可以随时发布(beta测试)的产品代码,而不会因为某个人的胡乱提交有冲突或者测试不通过的代码而造成别人的代码无法工作。
解决方案九:
测试不仅仅是保证产品质量的办法,实际上也有一些开发方法使测试成为了产品生产环节的比较重要的一环,7楼所说的TDD测试驱动开发就是一个很好的例子。
解决方案十:
如果你感觉你写程序只能保持3~5分钟清晰地思路,那么你就以3~5分钟为界,你可以写1。fun(0)2。fun(1)3。fun(2)4。fun(10)5。fun(11)6。fun(99)

其中前3个用于在10分钟内得到基本的架构,后边的用于重构、研究、测试,使得这个fun在20分钟内“搞定”。你写的这个,不是传统的单元测试,这明显是测试驱动。传统的“手工”测试理论往往死抠各种“覆盖率”指标理论,但是缺乏真正的测试开发技巧。一帮手工测试人员整天想着如何到互联网上去下载“测试工具”,然后这个根本没有什么东西,转而整天嚷嚷着测试理论。可是当你真正编写能够体现大部分“开发进度”的测试程序时,你需要面对大量挑战,你的一半精力应该用于去思考“如何写测试程序”上,这种开发习惯的养成,可以把一个菜鸟迅速变成一个独立的程序设计人员。比如说你面对一个别人开发的地图引擎,你如何测试“当你加载一幅地图时,相应的名为x的图层加载了,而且x上一共有不多不少正好1250个图形加载了”?这是你应该研究的,你需要研究别人的源代码,甚至重构它,使之更适合分解单元进行测试。所以编写测试程序是极高超的编程艺术,测试程序虽然短小但是都是精华。许多人因为这有难度,浅尝辄止,转而整天去研究理论,而不去实践了。
解决方案十一:
我再次强调之前首先声明的一点,我不是为“测试人员”来提供单元测试说明的,我只是针对开发人员。比如说上面我举的那个简单的“验证a地图上x层必定有1250个图形被加载”的测试用例,这是面向进度规划的,也是面向验收的。如果有人为了提高语句覆盖率而写一堆单元测试,很可能尽可能地用机械的思维方式去“硬凑”测试,而不是从这个层次的角度去设计测试用例。这就好像有许多人整天把90%以上的时间纠结于“增删改查”而不会先从用户喜好的操作行为上进行大胆创意一样,看似做到了教条上的80%,但是连实际的应该达到的水准的20%也没有做到,用户感觉花钱请人做出来的东西“档次太低”可是又不知道还能指望怎样修改。同样地,当提出这个问题的人的全部意见都在围绕着那些根本只有在51tesxxxxxx之类的网站上才会反复罗列的一些东西上的时候,当不是站在一个项目开发的角度而是站在“跟在开发人员屁股后边”的测试人员的角度思考这些问题的时候,学不到敏捷开发技术(或者极限编程技术),只能是无功而返。因为我们心目中的单元测试技术根本就不是给手工测试人员准备的测试技术。

时间: 2024-09-08 21:09:43

关于单元测试的一个纠结的问题的相关文章

解决方案-问一个纠结的数据权限问题

问题描述 问一个纠结的数据权限问题 当一个人拥有两种权限,一个是A区域的管理员,一个是B区域的普通用户. 比如有一个数据列表,这个人可以看到他身为管理员可以看到的列表(A区域数据),和他身为普通用户看到的列表(B区域数据). 这个时候问题就来了,他身为管理员是有修改删除权限的,但是普通用户是没有的. 所以在页面上肯定是要有修改和删除的按钮的.但实际上他只能修改和删除A区域的数据. 这种情况下的解决方案我想到一种,就是在修改和删除时,做验证,看是否有权限.但好像体验不佳. 求大神的更好解决方案~

hibernate-Java双向关联的一个纠结问题

问题描述 Java双向关联的一个纠结问题 在实体中例如一对多,我们Java使用关系型数据库当然希望双相关联.这样就会出现以下的问题: 使用hibernate配置实体关联的时候有一个属性叫做lazy,这个属性告诉hibernate有关联关系的时候,我是不是需要懒加载.如果lazy是true,很多人都会遇到这样的问题:no session,当然,no session有解决方案:使用配置让session延时关闭,但是这样对项目的性能显然是有影响的,会造成连接池拥挤,我们先暂时不使用这种比较笨的方式.至

考研还是就业,一个纠结的问题,我很想清楚自己的路是怎样的,求各位分享一下经验

问题描述 背景:本二,计算机专业,大四,距离考研还有不到100天,暑假复习了高数,大学里的课都听的很认真,基础不差,但是那些大学不怎么学习的竟然去考研了.自己专业课在学校里算是厉害的了,帮别人做毕业设计课程设计,又自学了不少知识,工作的话,应该会成长的很快.考研还是就业,怕就怕在后悔上,有研究生毕业抱怨自己工资没有本科生高的,有本科生毕业3年工资还是5k的.自己为了做决定,做过问卷调查,也在群里问过前辈,都说自己的路要自己走的.一直以来都是我自己走,大学里的事从来不问父母,但是考研和就业是一个很

怎么写一个javascript 实现一个纠结的页面生成? 请大家指点

问题描述 在主页 由一个新闻标题 点击弹出新闻内容的html页面.现在有一个前台控制器 需要大家指点一下javascript的写法.望大家帮助. 解决方案 下面的代码拷贝另存为xx.html<script>function openUrl(url){window.open(url,null,"height=600,width=800,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=yes&qu

SQL SERVER 表最小行的一个纠结问题

昨天一个同事突然问我,说他在SQL 2000数据库创建如下表的时候,突然碰到了下面一条警告信息.SQL脚本和警告信息如下:  IF OBJECT_ID(N'Log') IS  NULL BEGIN CREATE TABLE Log ( [Date] DATETIME, [Thread] NVARCHAR(255), [Level] NVARCHAR(50), [Logger] NVARCHAR(255), [Message] NVARCHAR(4000), [Exception] NVARCHA

写有价值的单元测试

这是写给开发同学系列文档中的一篇,主要讲单元测试. 写这个系列的原因是发现开发同学,尤其是偏业务的开发同学对于软件开发中的很多实践和理论理解的不够清楚.比如设计文档,代码评审,单元测试,集成测试和自动化测试,持续集成和持续发布这样一些耳熟能详的概念,说起来每个开发同学都听过,但很多人并没有深入考虑过为什么要引入这些实践,实践需要哪些手段,要达到什么目的,要坚持什么原则?所以这些实践落地的过程也是千差万别,效果往往也不甚理想. 通过这一系列文档,我会把我所了解的每个实践的来源.适用范围和价值用最简

利用单元测试在每个层上对PHP代码进行检查

测试驱动的开发和单元测试是确保代码在经过修改和重大调整之后依然能如我们期望的一样工作的最新方法.在本文中,您将学习到如何在模块.数据库和用户界面(UI)层对自己的 PHP 代码进行单元测试. 现在是凌晨 3 点.我们怎样才能知道自己的代码依然在工作呢? Web 应用程序是 24x7 不间断运行的,因此我的程序是否还在运行这个问题会在晚上一直困扰我.单元测试已经帮我对自己的代码建立了足够的信心 -- 这样我就可以安稳地睡个好觉了. 单元测试 是一个为代码编写测试用例并自动运行这些测试的框架.测试驱

单元测试应该测什么及不应该测什么

最近有朋友提出意见,觉得我写的文章比较空洞,写的很长,但是很不实在.可能原因是这样的:代码太少了.今天就从一段代码开始吧,这段代码描述电信营业系统中的缴费开机的过程: User user = User.getUserByServiceId("13309790280");//通过电话号码找到用户 Account account = user.getAccount();//与用户关联的帐户 user.pay(100);//用户缴费100元 //判断用户余额+帐户的信用度-用户欠费是否大于0

使用单元测试工具TestDriven.NET调试程序

引言 在实际的项目中,我们会遇到如下的问题: 1.在编写一些不太好调试的程序时,如WebService 和一些后台运行的程序时,如何调试? 2.在某些架构中存在一些底层框架,这些框架如何来调试? 3.当我们编写一个方法或者一些存在互相引用的方法,如何从上到下进行一次调试? 4.当编写出来一个方法后,难道现在你还在使用如下步骤调试?编译.F9断点.运行.调试?难道你不觉得好费时间啊...?或者你觉得为了一个方法不值,将一堆方法一起来调试/测试,这样难道不会遗漏一些方法也就是会遗漏一些BUG? 5.