阿里面试官:如何定位软件缺陷?

面试官常常会问:如何去定位软件缺陷,今天我以一个Web应用的注册登陆功能为例,跟大家说说我们该如何定位软件的bug!

首先,给大家看一个如下所示的软件的注册和登陆页面。先简单的说一下业务规则:使用手机号注册成功后可以使用该账号进行登陆。

在这里插入图片描述

没错,业务就是这么简单。假设我们发现了一个Bug:按照注册页面的提示,输入了正确的数据和信息,点了确认按钮,页面也提示,注册成功,然后跳转到登陆页面,当再用注册时提交的信息去登录时,发现提示用户名或者密码错误,根本无法登陆。

相信这么说,大家都能够理解吧!接下来我们就说说该如何定位bug!

首先从数据库的角度,通过查看数据库中数据的方式先定位:到底是注册出问题,还是登陆出问题了。

在这里插入图片描述
上表即为用户信息表。

A)如果从表中可以查找到注册的用户数据,说明注册功能没有问题,是登陆功能出问题了;(需要继续定位)

B)如果表中没有数据,则说明是注册功能出问题了,(登陆功能有没有问题待定)。(需要继续定位)

沿着思路A,注册没有问题,登陆出问题。那我们就要考虑是不是有这样的一种情况:A1:登陆页面的表单没有将登陆信息提交出去。我们在这个地方:

1)我们可以使用查看页面源代码的方式去判断页面有没有表单的提交方法:

在这里插入图片描述
2)我们也可以使用抓包工具Fiddler,进行数据抓包,判断有没有数据从该页面被传出。
在这里插入图片描述
通过这两个操作,我们可以得到两个结论:

A11:登陆的表单数据提交出去了,那就是后面的问题(继续定位)

A12:登陆的表单数据没有提交出去,那就是登陆页面代码错误(定位成功)

沿着A11的思路继续,数据传出去了,对应的接收位置的代码是否准确的接收了呢?这个需要和开发人员或者接口设计人员进行沟通接口处理程序是如何运行的。例如下面的一段代码就是PHP页面如何接收POST请求传来的表单数据,后面程序就要处理传来的数据了。(事关机密无法粘贴出来啊)

在这里插入图片描述
这个程序能不能够正确的处理传过来的数据:

A111:这个接收请求数据的程序没有问题,那就需要继续看(继续定位)

A112:这个接受请求数据的程序有问题,那就表明该内容有问题。(定位成功)

下面,接着看A111的思路,接收数据的程序也没有问题,那就看从数据库里面查询数据是不是出问题了。我们看一下查询用户名和密码的程序代码:

function checkUser($name,$password){
    $conn=new Mysql();
    $sql="select * from user where name='{$name}' and password='{$password}';";
    $result=$conn->sql($sql);
    if($result){
        return true;
    }
    else{
        echo '<html><head><Script Language="JavaScript">alert("用户不存在");</Script></head></html>' . "<meta http-equiv=\"refresh\" content=\"0;url=login.html\">";
    }
    $conn->close();

如果通过检查该部分和数据库连接的代码我们就可以最终确定问题:

A1111:数据库连接判断的语句出问题(定位成功)

A1112:程序的返回值出问题。(定位成功)

思路A都讨论完了,那接着讨论思路B:注册之后数据表中并没有注册数据的产生。类似于A。我们首先就要检查注册页面的表单数据有没有提交出去。检测方法和登陆一样,看代码也好,用工具也行。

B1:注册页面的数据没有提交出去,开发人员就写了个静态页面,不管输入什么都是注册成功。(定位成功)

B2:注册页面的数据提交出去了。(继续定位)

通过查看接收注册数据的程序,方法同上。

B21:如果发现没有准确接收注册数据,那就表明发现问题。(Bug定位成功)

B22:如果数据接收程序无误,表名要继续定位。(继续定位)

注册功能是一个向数据库中插入数据的过程,我们可以检查数据的插入操作语句和相关的处理程序是否正确:(定位成功)

如果我们从整个业务运行的全过程去说明的话,我把整个过程拆解成如下图所示的10个步骤:

在这里插入图片描述
提交注册信息到数据处理程序
数据处理程序进行数据判断和处理
将数据添加到数据库
数据库给出处理结果
数据处理程序将结果返回给注册页面
提交登陆信息到数据处理程序
数据处理程序进行数据判断和处理
将查询数据上传到数据库中进行比对
获取查询数据的结果
数据处理程序将结果返回给登陆页面

综上所述每一个环节都有可能出问题,我们要使用一切可能的办法和手段进行bug定位和查找。所以测试工程师那多少钱的工资,跟你所掌握的技术和找bug的能力、定位bug的能力有着非常直接和紧密的关系。

下面我还收集了一些测试资源,对于软件测试的的朋友来说应该是最全面最完整的备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。关注我的微信公众号:程序员二黑,就可以直接获取

最困难的时候,也就是我们离成功不远的时候!如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入我们:785128166 大家一起讨论交流学习。

各位入行的测试工程师,加油!

文章仅是从比较浅显的层面进行分析,如有大神路过,请不吝赐教!

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救?

清华学姐熬了一个月肝出这份32W字Linux知识手册,在 Github标星31K+

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员二黑

V:testerhei

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值