当前位置:首页 » 网页前端 » web测试常见bug
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

web测试常见bug

发布时间: 2022-09-05 09:18:00

❶ 软件测试中容易犯的测试错误

虽然说我们在工作中一再要求大家要认真细心,但是对于许多的新手来说,依然会在不知不觉中犯错误。下面云南电脑培训http://www.kmbdqn.com/就通过软件测试岗位做为分析案例,了解一下,一个软床测试新人都容易犯的测试错误都有哪些。



1.没有测试


我们很容易毫无原因地掉入这个陷阱。从现在开始,制定计划添加测试到你现在正在处理的代码中,并添加测试到将来的项目中。


2.没有从项目一开始就启动测试


我们很难再回过头去添加测试,并且可能需要改变架构才能添加测试,这样做终将需要你花更长的时间才能产出可信任的代码。从一开始就在项目的生命周期添加测试可以节省时间和精力。


3.编写失败的测试


TDD方法的普及将红—绿—重构的理念带到软件测试世界。这个理念常常被误认为应该“通过编写一个失败的测试开始”。其实并非如此。在写代码之前创建测试的目的是定义系统的正确行为应该是什么。在许多情况下,它是一个失败的测试(红色表示),但它可能会通过一个非决定性的或未实现的测试来表示。


4.担心未实现测试


软件开发中的一个大问题就是,代码和任何关于系统实际上应该做什么的文档之间的沟壑。通过拥有一个名称中明确定义你终想要实现的预期行为的测试,你将从测试中得到一定的价值,即使将怎么写测试目前还不得知。


5.没有很好地命名测试


命名软件这件事出了名的很难做好,这同样适用于测试。关于如何命名测试有几种流行的约定。无论你使用哪一种都没有关系,只要你能够一贯使用,并准确描述正在测试什么。


6.让测试做太多事情


又长又复杂的名字通常说明了你想同时测试多件事情。单个测试应该只测试一件事情。如果失败了也应该在代码中注明是什么地方出了错。你没有必要为了知道代码中出了什么问题而查看是哪部分测试失败。这并不意味着你不应该在测试中有多个断言,但这些断言应该紧密相关。例如,一个查看订单处理系统输出,并确认输出中是否有一个单一项目以及它是否包含具体项目的测试,是ok的。但一个验证相同系统的输出的测试,既创建一个特定项目,又记录到数据库中,还发送确认电子邮件,就不行了。


7.没有实际测试代码


经常可以看到测试新手创建过于复杂的模型以及不能实际测试代码的设置程序。他们可能会验证模拟代码是否正确,或者模拟代码是否和真正代码做相同的事情,或没有任何断言而只是执行代码。这样的“测试”都是白费力气,特别是如果它们的存在只是为了提高代码覆盖率水平的话。


8.担心代码覆盖率


代码覆盖率的理念很崇高,但往往实际价值有限。知道运行测试的时候有多少代码被执行应该是有用的,但因为它不考虑正在执行代码的测试的质量,因此就变得没有意义。代码覆盖率在它数值非常高或非常低的时候,是挺博人眼球的。如果非常高,就表明,比起带来的价值,过多的代码可能正在被测试。非常低的代码覆盖率表明有可能代码的测试不够。因为这样模棱两可的意思,有的人就不知道单一片段的代码是否应该进行测试。我用一个简单的问题来明确这一点:代码是否包含重大的复杂性?如果包含,那么你需要一些测试。如果没有的话,你就不需要。测试属性访问器不过是浪费时间。如果它们失败的话,那么比起你正在写的代码,你的代码体系出现了一些更根本的问题。如果你不用看一段代码,就立即知道一切,那么它就不重大。这不仅适用于代码,也适用于你写代码。如果我们在任意点重访代码,那么它就需要测试。如果在现有代码中发现过bug,那就说明这一块的代码对其复杂性没有进行充分的测试。


9.着眼于一种类型的测试


一旦你开始测试,很容易只纠结于一种风格的测试。这是一个错误。只用一种类型的测试,你就不能充分测试系统的所有部分。你需要单元测试来确认代码的各个组件是否能够正确工作。你需要集成测试来确认不同组件是否能够协同工作。你需要自动化UI测试来验证软件是否可以如预期使用。后,你需要为任何不容易自动化的部分和探索性尝试进行手动测试。


❷ 软件测试面试常见问题及答案有哪些

如下:

1、什么是bug?

答:软件的bug指的是软件当中不符合用户需求的问题。

常见的软件bug分为以下三类:

没有实现的功能。

完成了用户需求的功能,但是运行时会出现一些功能或性能上的问题。

实现了用户不需求的多余功能。

2、简单概述缺陷报告,并说明包括哪些项?

答:现在缺陷报告一般不再使用纸质档文档编写,而是专用测试管理工具(如TestDirector),这样便于缺陷管理。在这些工具中,每个缺陷作为一条记录输入指定的缺陷管理系统中。

缺陷报告包括:软件名称、版本号、功能模板、缺陷编号、对应的用例编号、编写时间、编写人、测试员、预期结果、实际结果、缺陷描述、严重级别、优先级别

3、开发人员修复缺陷后,如何保证不影响其他功能?

答:重新执行用例、看是否出现错误结果。并对周围的一些相关功能点追加新的测试用例。

4、什么时候功能测试?

答:功能测试是在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。

5、为什么选择测试这行?

答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更全面。

❸ 软件测试中非必现的bug怎么找

写写我的经验吧。其实很简单:分析log
测试客户端或web功能时,打开抓包工具,跟踪自己的操作路径。
当涉及到server功能时,就依赖于开发了,有经验的开发会在自己的代码中打很多的log,去log文件里按时间找自己的操作即可。通过分析log,可以:
1. 方便的回溯随机bug,出现问题直接查错误日志、定位原因、告知开发,就不需要再绞尽脑汁的重现bug了,提高测试质量。
2. 查log能够准确的定位问题。特别是比较复杂的系统,一环套着一环,通过查log剥茧抽丝逐步定位问题所在。提高工作效率。
3. 查log的过程也是对系统实现细节的深入学习过程,通过了解到的技术实现,完善测试用例,避免漏测。
但在实际的测试中,可能会有很多意想不到的情况,比如开发忘记在出错点打log了,你分析半天发现没哟,浪费时间所以测试之前一定要提醒开发在关键点打好log:
1、异常处理。系统各层次都要显式处理异常,任何可能出现的错误都能在日志中找到原因和地点。
2、重要的逻辑处一定要有日志。能够通过日志看出是哪个文件的哪个方法出了问题。

❹ web网站哪些模块容易出BUG

非法登录、SQL注入(这个现在少了),多用户同时登录,多地点登录,信息同步,文件、图片以及音视频的上传下载、乱码、浏览器版本支持、高访问量、网络不通畅时的脚本不能加载等问题。

❺ 在测试/开发过程中遇到过哪些印象深刻的bug

目前在测试日历,支持多(Android,iOS,web,PC)同步.遇见一个bug,有某些复杂操作下,可以创建一个开始时间比结束时间晚的日程,界面中无任何显示,研发考虑不解决.提bug的测试也觉得可以不解决.
但我反对了.基于两个方面,
第一,出现这个bug,可以判断研发在最后保存数据时,并没有对数据的有效性进行判断.而是在相关控件进行操作时进行判断的.这样风险有点大,因为控件之间对数据也会有影响,如果仅在操作控件时判断,会产生问题.
第二,这种脏数据虽然不会在视图展示,但保存在服务器上,在各个上均会进行同步.这还需要保证其他对于脏数据进行处理,且不会出现问题.风险较大.
基于这两个原因,研发还是解决了这个问题.这对我还是有一定启发的.
看问题可能会更考虑多方面的影响.不单纯只是现象.

❻ 如何定位Web系统前后台的BUG

分开跟你说
前台bug 主要有两块 第一就是JS写的有问题,这个你可以按F12 打开控制台,一般浏览器都会显示报错的jS 你看你报错的function然后去代码里看,基本上都会找到错误原因的 变量未定义,参数未定义啦啥啥啥的,JS错误都很好解决的。 第二个就是你页面中的bug了,现在做web项目基本上没有做静态页面的都是动态了,所以你页面中要么使用了小脚本要么使用了EL表达式来存值。页面报错的话 在控制台是可以看到你错误行号和附近代码的,你自己去找就行了。
后台bug 改难改,但是找好找。主要就是看控制台报错,然后定位错误行号。如果配置文件没有问题,那么一般的报错就是空指针,或者是数组下标越界。看附近变量,看方法的参数基本上都可以定位错误了。。。纯手打,望采纳。如果还有什么问题欢迎私聊

❼ Web前端工程师要掌握的JavaScript常见BUG及修复方法

今天小编要跟大家分享的文章是关于Web前端工程师要掌握的JavaScript常见BUG及修复方法。JavaScript看上去是一门十分简单的语言,然而事实并不如此。它有很多容易被弄错的细节,一不注意就导致BUG。所以今天小编就为大家分享了10个JavaScript常见的bug及修改方法,来和小编一起看一看吧!

一、错误的对this进行引用


在闭包或则回调中,this关键字的作用域很容易弄错。举个例子:


Game.prototype.restart=function(){


this.clearLocalStorage();


this.timer=setTimeout(function(){


this.clearBoard();//此处this指的是?


},0);


};


如果执行上面的代码,我们会看到报错:


UncaughtTypeError:undefinedisnotafunction


出错的原因在于:当你调用setTimeout函数,你实际上调用的是window.setTimeout()。在setTimeout中传入的匿名函数是在window这个对象环境下,所以this是指向window,但是window并没有clearBoard方法。


如何解决呢?定义新的变量引用指向Game对象的this,然后就可以使用啦。


Game.prototype.restart=function(){


this.clearLocalStorage();


varself=this;//将this指向的对象绑定到self


this.timer=setTimeout(function(){


self.clearBoard();


},0);


};


或则使用bind()函数:


Game.prototype.restart=function(){


this.clearLocalStorage();


this.timer=setTimeout(this.reset.bind(this),0);//bindto'this'


};


Game.prototype.reset=function(){


this.clearBoard();//此处this的引用正确


};


二、和块作用域(blockscope)有关的BUG


在大多数程序语言中,每一个函数块都有一个独立的新的作用域,但是在JavaScript中并不是。例如:


for(vari=0;i<10;i++){


/*...*/


}


console.log(i);//会输出什么呢?


通常在这种情况下,调用console.log()会输出undefined或则报错。不过呢,这里会输出10。在JavaScript中,即使for循环已经结束,变量i依然存在,并且记录最后的值。有些开发者会忘记这一点,然后导致许多bug。我们可以使用let而不是for来杜绝这一问题。


三、内存泄漏


你需要监控内存使用量,因为泄露很难避免。内存泄露可能由于引用不存在的对象或则循环引用导致。


·如何避免:关注对象的可访问性(reachability)。


·可访问的对象:


§现有的callstack任何位置可以访问的对象


§全局对象


当一个对象可以通过引用访问到,那么会在内存中保存。浏览器的垃圾回收器仅仅会把那些不可访问的对象回收。


四、混淆的相等判断


JavaScript自动将所有在布尔环境下的变量类型转换为布尔类型,但是可能导致bug。举例:


//所有都是true


console.log(false==Ɔ');


console.log(null==undefined);


console.log(" "==0);


console.log(''==0);


//注意:下面两个也是


if({})//


if([])//


{}和[]都是对象,他们都会被转换为true。为了防止bug出现,推荐使用===和!==来做比较,因为不会隐式做类型转换。


五、低效的DOM操作


在JavaScript中,你可以轻松操作DOM(添加、修改和删除),但是开发者往往很低效地去操作。这会导致bug出现,因为这些操作非常耗费计算资源。为了解决这个问题,推荐使用文档碎片(Document
Fragment),如果你需要操作多个DOM元素。


六、在for循环中错误的定义函数


举例:


varelements=document.getElementsByTagName('input');


varn=elements.length;//假设我们有10个元素


for(vari=0;i

elements[i].onclick=function(){


console.log("元素编号#"+i);


};


}


如果我们有10个元素,那么点击任何一个元素都会显示“元素编号#10”!因为在onclick被调用的时候,for循环已经结束,因此所有的i都是10。


解法:


varelements=document.getElementsByTagName('input');


varn=elements.length;//假设有10个元素


varmakeHandler=function(num){//outerfunction


returnfunction(){//innerfunction


console.log("元素编号##"+num);


};


};


for(vari=0;i

elements[i].onclick=makeHandler(i+1);


}


makeHandler在for循环执行的时候立即被调用,获取到当前的值i+1,并且存储在变量num中。makeHandler返回一个函数使用num变量,该函数被绑定到元素的点击事件。


七、通过原型错误地继承


开发者如果没能正确理解继承的原理,那么就可能写出有bug的代码:


BaseObject=function(name){


if(typeofname!=="undefined"){


this.name=name;


}else{


this.name='default'


}


};


varfirstObj=newBaseObject();


varsecondObj=newBaseObject('unique');


console.log(firstObj.name);//->输出'default'


console.log(secondObj.name);//->输出'unique'


但是,如果我们做如下操作:


deletesecondObj.name;


那么:


console.log(secondObj.name);//->输出'undefined'


而我们实际上想要的结果是打印默认的name。


BaseObject=function(name){


if(typeofname!=="undefined"){


this.name=name;


}


};


BaseObject.prototype.name='default'


每一个BaseObject都继承name属性,并且默认值为default。此时如果secondObj的name属性被删除掉,通过原型链查找会返回正确的默认值。


varthirdObj=newBaseObject('unique');


console.log(thirdObj.name);//->输出'unique'


deletethirdObj.name;


console.log(thirdObj.name);//->输出'default'


八、实例方法中的无效引用


我们来实现一个简单的构造函数用来创建对象:


varMyObject=function(){}


MyObject.prototype.whoAmI=function(){


console.log(this===window?"window":"MyObj");


};


varobj=newMyObject();


为了使用方便,我们定义变量whoAmI来引用obj.whoAmI:


varwhoAmI=obj.whoAmI;


打印出来看看:


console.log(whoAmI);


控制台会输出:


function(){


console.log(this===window?"window":"MyObj");


}


现在我们来对比一下两者调用的区别:


obj.whoAmI();//输出"MyObj"(和期望一致)


whoAmI();//输出"window"(竟然输出了window)


当我们把obj.whoAmI赋值给whoAmI的时候,这个新的变量whoAmI是定义在全局下,因此this指向全局的window,而不是MyObj。如果我们真的要获取对MyObj的函数的引用,需要在其作用域下。


varMyObject=function(){}


MyObject.prototype.whoAmI=function(){


console.log(this===window?"window":"MyObj");


};


varobj=newMyObject();


obj.w=obj.whoAmI;//任然在obj的作用域


obj.whoAmI();//输出"MyObj"


obj.w();//输出"MyObj"


九、settimeout/setlnterval函数第一个参数误用字符串


如果你将一个字符串作为setTimeout/setTimeInterval,它会被传给函数构造函数并构建一个新的函数。该操作流程很慢而且低效,并导致bug出现。


varhello=function(){


console.log("hello,fundebug!");


}


setTimeout("hello",1000);


一个好的替代方法就是传入函数作为参数:


setInterval(logTime,1000);//将logTime函数传入


setTimeout(function(){//传入一个匿名函数


logMessage(msgValue);


},1000);


十、未能成功使用strictmode


使用strictmodel会增加很多限制条件来加强安全和防止某些错误的出现,如果不使用strict
mode,你就相当于少了一个得力的助手帮你避免错误:


·更加容易debug


·避免不小心定义了不该定义的全局变量


·避免this隐式转换


·避免属性名字或则参数值的重复使用


·eval()更加安全


·无效地使用delete会自动抛出错误


以上就是小编今天为大家分享的关于Web前端工程师要掌握的JavaScript常见BUG及修复方法的文章,希望本篇文章能够对正在从事web前端工作的小伙伴们有所帮助,想要了解更多web前端相关知识记得关注北大青鸟Linux培训官网,最后祝愿小伙伴们工作顺利!


作者:fundebug


原文:#/2017/11/15/top_10_bugs_and_fixing_method/


❽ 测试时遇到的印象深刻的bug是什么

目前在测试日历软件,支持多平台(Android,iOS,web,PC)同步.遇见一个bug,有某些复杂操作下,可以创建一个开始时间比结束时间晚的日程,界面中无任何显示,研发考虑不解决.提bug的测试也觉得可以不解决.
但我反对了.基于两个方面,
第一,出现这个bug,可以判断研发在最后保存数据时,并没有对数据的有效性进行判断.而是在相关控件进行操作时进行判断的.这样风险有点大,因为控件之间对数据也会有影响,如果仅在操作控件时判断,会产生问题.
第二,这种脏数据虽然不会在视图展示,但保存在服务器上,在各个平台上均会进行同步.这还需要保证其他平台对于脏数据进行处理,且不会出现问题.风险较大.
基于这两个原因,研发还是解决了这个问题.这对我还是有一定启发的.
看问题可能会更考虑多方面的影响.不单纯只是现象.