软件测试人员发现更多程序bug
软件测试人员发现更多程序bug
1. 理解需求和业务,需求评审时候发现bug
熟悉了产品的业务流程、才能迅速找出软件中存在的一些重要的缺陷,发现的软件缺陷才是有价值的。否则即使你能找到一些软件缺陷,那也是纯软件的缺陷,价值不大。阅读需求文档的时候,在需求评审阶段,识别和处理潜在的bug。常见的问题包括:
需求不明确或模糊:
需求文档中的描述不够清晰,导致理解上的歧义。需求缺少必要的细节,使得开发无法准确实现功能。
用户体验问题:
需求没有考虑到用户的易用性,可能导致用户体验不佳。需求与业务目标或用户期望不一致。需求的交互设计不符合用户习惯,需要调整。
安全性问题:
数据泄露风险:需求没有考虑数据保护措施,可能导致用户数据泄露,数据库存放明文密码,导出用户信息。
权限控制不当:需求的权限控制不合理,可能导致未授权访问。
性能问题:
需求没有考虑性能优化,可能导致系统响应缓慢,用户、设备数量超过10万,授权和登录功能、同步到其他设备。导入和导出没有限制数量。
可维护性问题:
需求的实现方式不利于未来的扩展和维护,每一个功能需要有日志记录,限制单个日志空间占用大小,增加新组件注册。云平台系统需要支持磁盘扩容。
一旦发现这些问题,应立即记录并向测试经理反馈,团队成员共同分析bug的原因和影响,确定是否需要修改需求。及时提出问题,可以有效减少后期开发中的返工和修改成本。
2. 写测试用例多思考发现更多bug
测试用例的全面性和有效性,写出能够发现更多bug的测试用例。
理解需求和设计
详细阅读需求文档:理解软件的功能需求、业务逻辑和非功能需求(如性能、安全等)。输入内容限制格式长度,新增和修改功能没有限制名字不能重复。查询功能精确查询和模糊查询,多条件查询。
参与需求讨论:参与需求讨论,确保对需求的理解没有偏差。明确哪些功能是本次测试的重点,用户最常用的业务流程,确保这些路径被充分测试。
设计测试用例
正常流程:设计覆盖所有正常业务流程的测试用例。
异常流程:考虑各种可能的错误情况和异常输入,设计相应的测试用例。模拟真实的使用场景,包括用户可能遇到的意外情况。
边界条件:针对每个输入,设计边界值测试用例,包括最小值、最大值、刚超过最小值、刚低于最大值等。
等价类划分:将输入数据划分为有效和无效的等价类,从每个类中选取代表性的值进行测试。验证系统如何处理非法或无效的输入。
边界值分析:专注于输入域的边界,因为这些地方最容易出错。
安全性测试:考虑潜在的安全漏洞,设计测试用例来检查输入验证、权限控制、数据加密等方面,导入功能需要限制文本格式和大小。
性能测试:设计测试用例来评估系统在高负载下的表现。
查看历史bug:参考以前发现的bug,提供更多参考思路。
用例评审和优化
用例评审:让同事审查你的测试用例,他们可能会发现你遗漏的测试点。
持续改进:根据发现的bug和新的需求,参考维护的文档,不断更新和优化测试用例。
3. 测试时候发现bug
测试每一个功能都需要考虑:外观、功能、性能、安全、易用性和兼容性。每天花一点时间查看其他人提交的bug,拓展自己的测试思路,多问一下维护组的同事,重点测试用户反馈的一些问题。集中测试的时候要使用二八原则。
外观
布局问题:元素错位、间距不一致、格式不统一、对齐问题、翻页功能和浏览器滚动条等。颜色搭配不合理、字体不统一或不清晰、中英文切换查看显示字体。
图片和图标问题:图片格式不同加载失败、不同显示屏图标分辨率低或显示错误。
功能
预期的功能未实现或部分实现。功能实现与需求不符,导致操作结果错误。业务正向和逆向流程,不同入口使用业务流程,导致业务流程错误。
新增功能:名称重复、所有字段填写后保存后丢失或错误,页面内容显示错误,字母大小写没有校验,多次点击保存按钮保存了多次,关键信息没有tooltips。
修改功能:没有限制输入字符类型和长度、没有区分大小写字母、时间先后没有校验、修改操作完后记录结果错误,修改名称和已存在资源相同名称保存成功,修改操作日志记录错误,修改内容没有同步到已注册的其他组件。
删除功能:删除失败、删除自定义内容失败、删除前没有提示信息、批量删除失败、物理删除用户数据、删除操作日志记录错误,删除内容没有同步到已注册的其他组件。
查询功能:无查询功能、没有限制输入字符长度、查询结果不准确、内置数据无查询结果、100万条数据查询加载慢、不支持关键词查询。
导入功能:导入数据失败、没有限制输入字符类型和长度、导入数据后位置乱序、导出默认数据后再导入失败、没有限制导入文件格式、没有限制导入文件大小和数据量(建议excel单个sheet限制10000行)、导入提示信息错误、导入数据后没有记录到日志或记录错误。
接口功能:缺少接口、接口没有限制每个字段长度和字符类型、缺少字段、接口文档错误(符号不正确、错别字、缺少字段)、接口返回结果错误与接口文档描述不一致。
网络功能:ipv4(回环127.0.0.1、回环域名localhost)、ipv6(回环::1、回环域名localhost)、纯ipv6环境功能正常、纯域名环境功能正常、使用已经被占用的IP、网口聚合、dchp自动获取地址能正常访问、DNS解析失败、nat地址、各组件配置nat、配置多网卡多个ip地址(一个地址通、一个地址网络不通)、各组件配置多个IP、禁用组件网卡功能继续使用,提示信息准确、高可用配置主备、主备切换、浮动IP地址注册组件切换主备、多个IP地址日志外发使用的IP地址、设备网络带宽瓶颈
性能
响应时间慢:登录系统响应时间长,数据量达到100万条加载慢,影响用户体验。
资源消耗大:系统资源(如内存、CPU)使用率高,可能导致系统崩溃。系统在高并发情况下性能下降,无法满足用户需求。
安全
1.SQL注入:攻击者通过在输入框中输入恶意SQL代码,尝试获取或修改数据库中的数据。
2.重放攻击漏洞:攻击者截获合法用户的请求,然后将该请求重复发送给服务器。
3.XSS(跨站脚本攻击):攻击者通过在网页中插入恶意脚本,当其他用户浏览该网页时,这些脚本会被执行,从而窃取用户信息或进行其他恶意操作。
4.文件上传漏洞:攻击者通过上传恶意文件,尝试执行远程代码或获取服务器权限,上传功能没有校验文件格式和内容。
5.弱密码策略:默认或过于简单的密码可能导致攻击者轻易破解账户。
6.未加密的数据传输:在数据传输过程中未进行加密处理,可能导致数据泄露或被篡改。
7.未经授权的访问控制:未对敏感资源进行严格的访问控制,可能导致攻击者越权访问。登录系统后台使用命令或者脚本越权。
8.缺乏安全更新和补丁:未及时修复已知的安全漏洞,可能导致攻击者利用这些漏洞进行攻击。使用中间件版本低存在漏洞,百度一下中间件的漏洞然后提bug。
易用性
导航困难:菜单结构复杂,用户难以找到所需功能。交互设计不符合用户习惯,需要调整,比如有的功能需要进入后台才能配置,页面需要有配置的选项。
帮助信息不足:缺少必要的帮助文档或提示信息,使用户难以理解如何使用软件,增加tooltips功能。
兼容性
跨浏览器问题:在不同浏览器上表现不一致,某些功能无法正常使用。
跨平台问题:在不同操作系统(国产操作系统)或设备上表现不一致,某些功能无法正常使用。
拓展思路:
参考其他人提交的bug,可以从不同的角度拓展思路,发现更多潜在的bug。也可以参考其他项目中的bug报告,了解常见的bug类型和解决方案;也可以借鉴其他测试人员的经验,学习他们的测试方法和技巧。
自由测试是一种非正式的测试方法,测试人员可以根据直觉和经验进行测试,不受预定义测试用例的限制。这种方法可以帮助发现一些容易被忽视的bug,但也可能因为缺乏系统性而导致漏测。在进行自由测试时,建议结合正式的测试用例一起使用,以获得更全面的测试覆盖。
根据二八原则(帕累托原则),80%的问题往往集中在20%的模块中。统计bug分布时,可以重点关注那些出现bug较多的模块。通过对这些模块的深入测试,可以发现更多bug,有效提高系统的整体质量。
4. 回归bug的时候发现更多bug
在回归测试时发现更多bug是一个常见且重要的现象。在修复一个bug时,可能会对其他功能模块产生连锁反应,导致新的bug出现。一个模块的修复可能会影响到另一个模块的正常使用。
测试覆盖不全面:在初次测试中,可能由于测试用例设计不充分或者测试时间和环境的限制,未能覆盖所有可能的场景。在回归测试中,通过更全面的测试用例,可能会发现之前未检测到的bug。
需求变更:在软件开发过程中,需求可能会发生变化。这些变更如果没有及时反映到测试用例中,可能会导致新的bug在回归测试中被发现。
环境变化:测试环境和生产环境可能存在差异。在回归测试中,如果使用了更接近生产环境的配置,可能会暴露出之前未发现的环境相关bug。
人为因素:开发人员在修复bug时可能会因为疏忽或误解需求而引入新的bug。
确保之前发现的bug已经修复,并且修复没有引入新的问题。多思考类似的功能有没有同样的问题。
5. 软件发布后,用户使用中的bug
软件发布后,用户在实际使用过程中遇到的各种问题,用户在使用过程中发现的bug是一个不可避免的现象。以下是一些常见的用户使用中发现的bug类型及其描述:
功能问题:某些预期的功能与用户期望不符。
性能问题:应用响应缓慢,加载时间长,在高并发情况下,系统崩溃或服务不可用。
兼容性问题:在不同操作系统、浏览器或设备上表现不一致。
安全性问题:数据泄露或未授权访问,系统容易受到SQL注入、XSS攻击等。
稳定性问题:长期使用,应用崩溃或频繁出错,内存泄漏导致系统资源耗尽。
国际化和本地化问题:多语言支持不完整或翻译错误,日期、货币格式未根据地区正确显示,系统初始化后语言正确。
用户体验问题:界面不友好,操作复杂,缺乏必要的帮助信息或提示。
采取以下措施:
问题分析和定位:对用户报告的问题进行详细分析,重现问题场景,定位问题根源。
记录和跟踪:将用户反馈的bug记录在案,并跟踪其处理状态。这有助于后续的问题管理和质量改进。
测试和验证:在问题修复后,进行充分的测试以确保问题已经解决,并且没有引入新的问题。
持续改进:通过分析用户反馈的bug,不断改进软件测试用例和方法,减少未来类似问题的发生。
相关文章:
软件测试人员发现更多程序bug
软件测试人员发现更多程序bug 1. 理解需求和业务,需求评审时候发现bug 熟悉了产品的业务流程、才能迅速找出软件中存在的一些重要的缺陷,发现的软件缺陷才是有价值的。否则即使你能找到一些软件缺陷,那也是纯软件的缺陷,价值不大…...

Nagle 算法:优化 TCP 网络中小数据包的传输
1. 前言 在网络通信中,TCP(传输控制协议)是最常用的协议之一,广泛应用于各种网络应用,如网页浏览、文件传输和在线游戏等。然而,随着互联网的普及,小数据包的频繁传输成为一个不容忽视的问题。…...

C#入门教程
目录 1.if分支语句 2.面向对象 3.static简单说明 1.if分支语句 我们的这个C#里面的if语句以及这个if-else语句和C语言里面没有区别,就是打这个输出上面的方式不一样,c#里面使用的是这个console.writeline这个指令,其他的这个判断逻辑都是一…...

【MySQL报错】---Data truncated for column ‘age‘ at row...
目录 一、前言二、问题分析三、解决办法 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~ 博客主页链接点这里–>:权权的博客主页链接 二、问题分析 问题一修改表结构 XXX 为 not n…...

Go基础学习08-并发安全型类型-通道(chan)深入研究
文章目录 chan基础使用和理解通道模型:单通道、双通道双向通道单向通道单向通道的作用 缓冲通道和非缓冲通道数据发送和接收过程缓冲通道非缓冲通道 通道基本特性通道何时触发panicChannel和Select结合使用Select语句和通道的关系Select语句的分支选择规则有那些Sel…...
some 蓝桥杯题
12.反异或01串 - 蓝桥云课 (lanqiao.cn) #include "bits/stdc.h" #define int long long using namespace std; char c[10000000]; char s[10000000]; int cnt,Ans,mr,mid; int maxi; int p[10000000],pre[10000000]; signed main() {ios::sync_with_stdio(0);cin.t…...

[linux 驱动]input输入子系统详解与实战
目录 1 描述 2 结构体 2.1 input_class 2.2 input_dev 2.4 input_event 2.4 input_dev_type 3 input接口 3.1 input_allocate_device 3.2 input_free_device 3.3 input_register_device 3.4 input_unregister_device 3.5 input_event 3.6 input_sync 3.7 input_se…...
2023_Spark_实验十:Centos_Spark Local模式部署
参考这篇博客:【Centos8_配置单节点伪分布式Spark环境】_centos8伪分布式环境搭建-CSDN博客...

pyecharts-快速入门
pyecharts文档:渲染图表 - pyecharts - A Python Echarts Plotting Library built with love. pyecharts-gallery文档:中文简介 - Document (pyecharts.org) 一、快速入门案例 from pyecharts.charts import Barbar Bar() bar.add_xaxis(["衬衫…...
vue3打包疯狂报错
打包的时候报错很多Cannot find name ‘xxx‘ 。 但是npm run dev 是运行正常的。 解决方法:package.json中的vue-tsc --noEmit 删掉就可以了。 例如: 这是原来的 {"scripts": {"dev": "vite","build": &quo…...

STM32 软件触发ADC采集
0.91寸OLED屏幕大小的音频频谱,炫酷! STM32另一个很少人知道的的功能——时钟监测 晶振与软件的关系(深度理解) STM32单片机一种另类的IO初始化方法 ADC是一个十分重要的功能,几乎任何一款单片机都会包含这个功能&a…...

Android SystemUI组件(08)睡眠灭屏 锁屏处理流程
该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分 睡眠灭屏 即可。 Power按键的处理逻辑最终是由PhoneWindowManager来完…...

C# 表达式与运算符
本课要点: 1、表达式的基本概念 2、常用的几种运算符 3、运算符的优先级 4、常见问题 一 表达式 表达式是由运算符和操作数组成的。、-、*和/等都是运算符,操作数包括文本、常量、变量和表达式等。 二 算术运算符 2.1 算术运算符的使用 三 常见错误 …...
SpringBoot--最大连接数和最大并发数
原文网址:SpringBoot--最大连接数和最大并发数-CSDN博客 简介 本文介绍SpringBoot的最大连接数和最大并发数。 配置 SpringBoot默认使用tomcat处理请求。tomcat可以指定连接数、线程数等配置。 server:tomcat:# 请求处理线程都在使用中时,新连接请求…...
CF687D Dividing Kingdom II 题解
Description 给定一个 n n n 个点、 m m m 条边的图,有 q q q 次询问,每次询问一个 [ l , r ] [l,r] [l,r] 的区间,求将 n n n 个点分为两个部分后,编号在 [ l , r ] [l,r] [l,r] 内的边中,两端点属于同一部分的…...

高空抛物AI检测算法:精准防控,技术革新守护城市安全
近年来,随着城市化进程的加速,高楼大厦如雨后春笋般涌现,但随之而来的高空抛物问题却成为城市管理的一大难题。高空抛物不仅严重威胁行人的安全,还可能引发法律纠纷和社会问题。为了有效预防和减少高空抛物事件的发生,…...

html+css+js实现Collapse 折叠面板
实现效果: HTML部分 <div class"collapse"><ul><li><div class"header"><h4>一致性 Consistency</h4><span class"iconfont icon-jiantou"></span></div><div class"…...
RM服务器研究(一)
客户端默认端口是10100: MultiPort.dll BOOL sub_10001070() { UINT v0; // esi BOOL result; // eax CHAR KeyName; // [espCh] [ebp-10Ch] DWORD flOldProtect; // [esp10h] [ebp-108h] CHAR Buffer; // [esp14h] [ebp-104h] char v5; // [esp15h] [e…...

云岚到家xxl job 配置
调度中心: 负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码; 主要职责为执行器管理、任务管理、监控运维、日志管理等 任务执行器: 负责接收调度请求并执行任务逻辑; 主要职责是执行任…...
国内动态短效sk5
HTTP爬虫代理,软件测试, 动态转发IP方案,全高匿名,私密IP,固定网关将您每次请求的HTTP重定向到不同的后端IP,支持API;指路小熊IP https://www.xiaoxiongip.com?fromqkJWgD可测...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...