如标题所言——软件测试55道经典面试题,废话不多说,上题伺候!
1. 自我介绍
想一矢中的,首先必须认清自我,一定要弄清以下三个问题。你现在是干什么的?你将来要干什么?你过去是干什么的?2、投其所好:清楚自己的强项后,便可以开始准备自我介绍的内容。当然,之所以让我们自我介绍,其实是面试官想找一些时间来看简历,所以自我介绍不用太长的时间,1-2分钟即可。
2.需求评审需要哪些人参加
需求评审主要需要以下的人参与:
产品经理、项目经理、开发leader、设计、前端工程师、后端工程师、测试...
这个每家公司都可能不同,不是完全固定的,但一般都有这些角色参加,如果是原始需求,可能很会有市场、销售部的人参与,因为市场和销售部的人是最了解客户的人。即使从需求来的角度来说,需求来源也有一部分是来自内部员工的需求。
测试在评审过程中主要是站在测试的角色从需求的特性来分析需求是否正确或准确。
(1)完整性:每一项需求都必须将所要实现的功能描述清楚,使设计人员获得设计和实现这些功能所需的必要信息。
(2)正确定:每一项需求都必须准确地陈述其要开发的功能。(只有用户代表才能确定需求的正确性)
(3)可行性:每一项需求都必须是在已知的系统或环境内可以实现的。(建立数学模型,进行仿真)
(4)必要性:每项需求都是编写文档的根源,每项需求都唔那个回溯到具体用户。(用户需求,跟踪矩阵,WishList)
(5)无歧义性:对所有的需求,读者只能有一个明确统一的解释。(形式化的语言、图、表)
(6)可验证性:检查每一项需求是否能通过测试用例或其它验证方法。
3.一个完整的测试过程
1)制定系统测试计划
2)编写系统测试用例
3)执行系统测试用例
4)跟踪管理缺陷
5)总结测试
4. 测试结束的标准是什么?
1)第一类标准:测试超过了预定时间,则停止测试。
2)第二类标准:执行了所有的测试用例,但并没有发现故障,则停止测试。
3)第三类标准:使用特定的测试用例设计方案作为判断测试停止的基础。
4)第四类标准:正面指出停止测试的具体要求,即停止测试的标准可定义为查出某-预订数目的故障。
5)第五类标准:根据单位时间内查出故障的数量决定是否停止测试。
5.你认为是BUG的,但开发不认同,你觉得怎么沟通才好呢?
测试和开发沟通大部分都在讨论bug,测试说是bug但是开发认为这个不是bug,对于测试来说就很头痛了。明明是问题,但是为什么开发不主动修改呢?这时候测试应该去需求文档中找出有关这个功能的描述或者去询问产品经理,总之不要正面冲突,要拿出证据来说服开发。
6.近期遇到的比较印象深刻的bug
如果问印象深刻的BUG,很多人会想应该回答一个很难发现的BUG,其实这不一定要找一个很发现的BUG,理想的回答应该是找一个这样的BUG,发现这个BUG改进了研发流程,这是最合理的。
例如:
【问题描述】订单使用余额支付,支付成功之后返回收银台选择支付宝支付,仍可跳转至支付宝页面并支付成功
【复现步骤】
1、在订单确认页点击去支付拉起收银台
2、选择余额支付,并完成支付
3、支付完成之后,返回收银台
3、选择支付宝支付
【预期结果】提示订单已支付成功不可重复支付
【实际结果】页面跳转至支付宝支付页面,并可完成支付
这个问题是因为当支付成功后没有及时更新支付状态导致的,所以以后我们测试应该多去验证我们结果,我们在支付成功后支付状态没有改过来,但我们测试工程师没去验证这个信息是否变化,所以准确的来说这个BUG应该是提在第一次支付时的问题,因为第一次支付完成后页面上是扣钱了,但是没去关注底层信息是否正确的变化。
7、平时做接口测试吗?如果做,一般是怎么进行的?
我们公司是要求做接口测试的,主要使用的工具是JMeter工具,一般接口测试的步骤如下:
1.分析接口说明书,开发会有一个接口说明书给到我们测试
2.根据接口说明书,设计需要的测试用例,设计用例的方法其实和功能测试有共同之处,例如等价类、边界值、判定表等。
3.使用JMeter工具来创建线程组,一个线程相当于一个用例
4.参测试过程中使用到的数据进行参数化,即数据驱动
5.设置断言对结果进行断言,通常包括JSON断言、文本断言、响应断言等.....
8.为什么开展接口测试?
接口测试属于集成测试、测试接入越早,就越能在项目早期发现问题,修复问题成本降低。
接口测试非常快速,UI自动化执行一个测试用例10s左右,接口用例执行一般毫秒级。
9.做接口测试运用过哪些测试工具?
(1)Postman
(2)JMeter
(3)SoapUI
(4)Python + requests
(5)Java + HttpClient
(6)Java + OkHttp
10.通用接口用例设计?
(1)通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
(2)参数组合:现在有一个操作商品的接口,有个字段 type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样就要测参数组合了,type 传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
(3)接口安全:绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功。参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。密码安全规则,密码的复杂程度校验。
(4)异常验证:所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
11.你们公司的接口测试流程是怎样的?
(1)编写接口测试计划
接口测试计划跟功能测试计划是一样的,都是为了确认是否满足需求,确定测试环境及测试计划,为设计测试用例做准备,一般来说,接口测试计划包含概述,测试资源,测试功能及重点,测试策略,测试风险及测试标准
(2)编写,评审接口测试用例
从开发中取得接口文档,了解接口业务,主要包括接口地址、请求方式、入参、出参、返回格式等信息。
根据需求文档,接口文档写测试用例,然后开发,测试一起评审测试用例是否符合需求和相关要求。下面的图里面的内容可以供大家写测试用例的时候参考。
12.Python的requests包是干什么的?
requests是一个HTTP库,作用是发送HTTP请求,获得响应,往往使用在网络爬虫,接口自动化测试中。
13.在接口测试中关联是什么含义?如何使用Postman设置关联?
关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行。
在Postman中设置关联的步骤如下:
(1)通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来。
(2)使用设置全局变量的代码把取出来的值保存到全局变量里。
(3)在下一个接口中,使用(全局变量)代替要替换的静态值。
14. Get与Post请求的区别
15. web和APP测试有哪些共同点和不同点
共同点:主要是在于功能点的测试是相同的,其它的没有太多相当,一般不管是WEB还是APP的,服务器端都是一样的,所以功能点测试和服务器端的逻辑是一样的。
不同点则主要是在一些APP专项测试方面,主要包括以下几个维度:
1.兼容性
web聚焦在浏览器的兼容性; APP聚焦在手机型号的兼容性,操作系统的兼容性,分辨率的兼容性
2.安装、升级
web则不用安装
APP的安装,升级(相邻,跨版本)
3. App的性能测试
包括APP的响应速度,耗电量,耗流量,手机的cpu,内存web的性能主要包括端页面的性能和服务器的性能
4.app的网络切换,弱网情况
工具模拟弱网
5.app的功能交互性
来电,信息等
16.APP测试的内容主要包括哪些,如何开展?
功能测试:
业务逻辑正确性测试:依据:产品文档->测试用例编写
兼容性测试:
1.系统版本: Android:官 方版本,定制版本;IOS:官方提供版本
2.分辨率: 720 * 1280 1080* 1920
3.网络情况:2g 3g 4g 5g Wi-Fi
异常测试
1.热启动应用:应用在后台长时间待机;应用在后台待机过程中,手机重启
2.网络切换和中断恢复:网络切换;中断恢复:
3.电话信息中断恢复升级,安装
卸载测试
1.升级测试:临近版本升级(1.0->1.1);跨版((0.0....>2.2)
2.安装测试:首次安装;覆盖安装(同版本,不同版本覆盖);卸载后安装
3.卸载测试:首次卸载;卸载安装后在卸载
健壮性测试
1.手机资源消耗: cpu, 内存
2.流量消耗:图片,数据,视频
3.电量测试
4.崩溃恢复
17.常用的ADB命令?
adb --help / adb :看见帮助信息
adb start-server:启动adb服务
adb kill-server:关闭 adb服务
adb devices:查看手机设备号
adb shell getprop ro.build.version.release:获取系统版本
adb push 电脑手机
adb pull 手机电脑
adb logcat | grep(unix) 包名
adb logcat| findstr(win)包名
adb shell :进入shell 命令行,可以操作Linux 命令
adb shell dumpsys window windows | grep mFocusedApp:获取包名启动名(win: adb shell dumpsys window windows| findstr mFocusedApp)
adb install 路径/apk文件:安装apk到手机上
adb uninstall 包名:卸载app从手机上
adbshellamstart-W包名/启动名:app启动时间
18. app闪退的原因是什么?闪退怎么看日志?
闪退原因,主要有:
1)、程序缓存过多或者可用内存过低。
2)、安装位置不对,可尝试更改储存位置。
3)、和其它的程序不兼容,或者不兼容操作系统的版本,可卸载重新安装该程序或卸载了一些与系统不兼容的程序;
4)、程序本身问题,有些程序本身存在问题导致闪退
5)、硬件不兼容,比如不兼容某些品牌机器
19. 一个版本的测试周期大概是多久
现在互联网项目一般都是3周左右迭代一次,当然不同的公司不一样,有的2周迭代一次,每次迭代要测试多久也是不完全确定的,因为迭代的需求不确定,如果迭代的需求多,那测试周显然会长一些。
对于产品类的项目一般就不太可能3周迭代一次,例如汽车、手机
20.说出10个以上的Linux命令
1、创建文件: touch
2、删除文件: rm(remove)
3、查看文件: cat
4、复制: cp(copy)
5、创建文件夹: mkdir(make directory)
6、剪切或者重命名: mv(move)
7、压缩解压缩: tar
8、查看: Is list
9、编辑: vi/vim
10、查看当前路径: pwd(Print Working Directory)
11、切换用户: su switch user
12、创建用户: useradd
13、删除用户: userdel
14、创建用户组: groupadd
15、删除用户组: groupdel
16、查找: find
17、修改权限: chmod(change mode)
18、查看进程: ps process
21.在Linux系统中,一个文件的访问权限是755,其含义是什么?
755表示该文件所有者对该文件具有读、写执行权限,该文件所有者所在组用户及其他用户对该文件具有读和执行权限。
22.linux查看文件用什么命令,查看进程用什么命令
查看文件内容的命令有more less head tail cat
查看进程: ps-ef|grep 进程号
查看日志文件常用:less、view
23. linux传输文件的方式
FTP :FTP是文件服务器,可实现文件的上传下载,存储等功能,但本文不打算介绍ftp的使用。
scp:scp能够将不同主机的文件进行相互传输,使用简单方便。
rz :用于linux与windows之间的文件上传
sz :用于linux与windows之间的文件下载
rsync :rsync是文件同步工具,结合inotify可以实现文件的同步,备份功能。
24. linux中常见的监控命令
iostat、vmstat、top、free、 sar等
25.以/etc/passwd的前五行内容为例,提取用户名?
cat /etc/passwd| head -n5 |cut-d :-f1
26.在linux 中find 和grep的区别?
Linux系统中grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称是Global Regular Expression Print, 表示全局正则表达式版本,它的使用权限是所有用户。
linux下的find:
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。语法: find 起始目录寻找条件操作说明: find命令从指定的起始目录开始,递归地搜索其各个子目录, 查找满足寻找条件的文件并对之采取相关的操作。
简单点说说,grep 是查找匹配条件的行,find 是搜索匹配条件的文件。
27.什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库
28.写出表的增删改查SQL语法
表的创建: create table表名(列名1类型约束,列2类型约束..)
表的删除: drop table表名
表的更改(结构的更改,不是记录的更新) : alter table表名add|drop 列名约束名
插入记录: insert into表名.. .values...
更新记录: update 表名set 列名=值where条件
删除记录: delete from表名where 条件
29.事务的特性?
1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某- - 顺序串行执行的结果相一致。
3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
30.简述什么是存储过程和触发器?
存储过程:是数据库中的一一个对象,Transact-SQL语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理。(可以理解为 C语言中的函数,有参数、返回值等函数特性)
触发器是一种特殊类型的存储过程,当使用下面的一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效: UPDATE、INSERT 或DELETE。
31. mysql分析SQL响应时间和资源消耗
profifile工具主要是用于分析SQL执行所消耗的响应时间和系统资源。
profifile的语法如下:
SHOW PROFILE [type [, type] ... ][FOR QUERY n][LIMIT row_count [OFFSET offset]]
32. 如何监控mysql连接池
SHOW STATUS LIKE '%conn%'SHOW STATUS LIKE '%abort%'SHOW STATUS LIKE '%thread%'SHOW STATUS LIKE '%bytes%'
33. mysql常见的查询优化方法
mysql常见查询优化的方法如下:
1. 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
2. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
3. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
4. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
5. in 和 not in 也要慎用,否则会导致全表扫描
6. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
7. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
8. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
9. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定...
34. 什么是B/S架构,什么是C/S架构,两者有可区别?在测试侧重点上有什么不同
B/S: Browser/Server 浏览器/服务器模式,客户端通过浏览器来访问服务器和进行业务操作,一般的web系统是属于B/S架构,比如淘宝和京东等,主要使用http/https协议
优点:使用方便,不需要安装客户端软件就能访问服务器和操作业务;
缺点:安全性不如C/S模式,性能比C/S低一些
一般用PHP、JAVA、ASP.net等开发语言;
C/S: Client/Server 客户端/服务器模式,客户端需要安装专门的客户端软件来访问服务器和进行业务操作,比如QQ,使用socket或者是其它自定义协议
缺点:便利性不如B/S模式,需要安装专门的客户端软件才能访问服务器和操作业务;
优点:安全性比B/S模式高,性能比B/S高
一般用C/C++/C#等开发语言
35. http和https协议有什么区别
1) HTTP协议是一种使用明文数据传输的网络协议,数据不加密,而HTTPS是协议的升级,就是在HTTP的基础上增加了数据加密,HTTPS是建立在TSL/SSL子层上的协议
2) HTTP端口号80, HTTPS端口号443
3) HTTPS协议的服务器必须要有一套数字证书,而HTTP不需要
4) http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
36. cookie与session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
37. 你们项目版本上线(发布)的标准是什么
严格标准:
1、所有的缺陷都被修复并且回归测试通过;
2、所有的需求都被测试覆盖;
3、所有的测试用例都被执行并通过;
4、通过XX缺陷管理方法达到测试退出的条件;
宽松标准:
1、所有的严重级别为一般以上的缺陷都被修复,遗留缺陷加权和小于3;
2、主要的需求都被测试覆盖;
3、所有的H,M级的测试用例都被执行并通过,70%以上的L级用例执行并通过;
4、通过XX缺陷管理方法达到测试退出的条件;
38. 你会搭建测试环境吗
一般的来说,对于大公司是有专门的人来搭建测试环境和维护环境的,所以回答这个问题可以这样说,我们公司是有专门的人来搭建测试环境的,测试环境不需要我们测试来搭建。
但对于一些小公司来说,则不是这样,小公司测试环境主要是我们测试人的来搭建,当然小公司搭建测试环境也比较简单,主要是一些基础功能的软件进行安装即可,如apache、mysql等。
39.给你一个网站怎么开展测试?
1.首先,查找需求说明、网站设计等相关文档,分析测试需求。
2.制定测试计划,确定测试范围和测试策略,一般包括以下几个部分:功能性测试,界面测试,性能测试,数据库测试,安全性测试,兼容性测试
3.设计测试用例:
(1)功能性测试可以包括,但不限于以下几个方面:链接测试;链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回等;提交功能的测试;多媒体元素是否可以正确加载和显示;多语言支持是否能够正确显示选择的语言等
(2)界面测试可以包括但不限于以下几个方面:页面是否风格统一,美观。页面布局是否合理,重点内容和热点内容是否突出。控件是否正常使用。对于必须但为安装的空间,是否提供自动下载并安装的功能。文字检查。
(3)性能测试-般从以下两个方面考虑:压力测试,负载测试,强度测试
(4)数据库测试要具体决定是否需要开展。数据库- -般需 要考虑连结性,对数据的存取操作,数据内容的验证等方面。
(5)安全性测试:基本的登录功能的检查;是否存在溢出错误,导致系统崩溃或者权限泄露;相关开发语言的常见安全性问题检查,例如SQL注入等;如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试,或者获取支持。
(6)兼容性测试,根据需求说明的内容,确定支持的平台组合:浏览器的兼容性;操作系统的兼容性;软件平台的兼容性;数据库的兼容性。
4.开展测试,并记录缺陷。合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如,需求变更、风险、配置、测试文档、缺陷报告、人力资源等内容)。
5.定期评审,对测试进行评估和总结,调整测试的内容。
40.nginx,tomcat,apache都是什么?
Nginx (engine x)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP 服务器。
Apache HTTP Server是一个模块化的服务器,源于NCSAhttpd 服务器
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,是开发和调试JSP程序的首选。
41.apache和nginx的区别?
Nginx相对Apache的优点:
轻量级,同样起web服务,比apache占用更少的内存及资源;
抗并发,nginx处理请求是异步非阻塞的,支持更多的并发连接,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能;
配置简洁;
高度模块化的设计,编写模块相对简单;
社区活跃。
Apache相对Nginx的优点
rewrite,比nginx 的rewrite 强大;
模块超多, 基本想到的都可以找到;少bug,nginx 的bug相对较多;
稳定。
42.Selenium有哪些定位元素方法
1. id定位
2. name定位3. class_ _name
4. tag_ _name
5. link_ text
6. partial_ link_ text
7. Xpath
8. CSs
当定位一个元素是,如果存在ID属性值时,我们可以优先考虑ID定位,当没有ID, 有name属性值和class属性值时也可以采用name和class_name定位。当次能确定该元素的标签为页面唯一时,可以采用tag. name定位,一般来说采用link. text定位的方法比较少。如果ID,name,class_ name单个定位不了,可以采用css和xpath 定位。
43. 加入购物车如何测试
44. 拉取商品详情页
45. 搜索商品如何测试
46. 支付的接口如何测试的
以调用支付宝为例,后台会有一个专门的程序将客户端的信息发送到支付宝的服务器上。
而调用支付宝的接口都是有固定格式的,这个请求参数的格式见以下页面https://docs.open.alipay.com/api_1/alipay.trade.pay但实际上我们并不会填写那么多参数,我们只会填一些常见的参数进行提交
biz_content={
"out_trade_no": "0000010001000010102953",
"total_amount": "0.01",
"subject": "1181418945838252034",
"body": "1181418945838252034",
"product_code": "QUICK_WAP_WAY"
}
47. 优惠卷如何测试
48. 积分如何测试
49. 结算功能如何测试
测试商品金额的计算公式是否正确 "订单总金额 = 商品总金额- 折扣 - 商品折扣+ 发票税额 + 配送费用 + 保价费用 + 支付费用 + 包装费用+ 贺卡 应付款金额 = 已付款金额 - 使用余额 - 使用积分 - 使用红包"
50. TCP三次握手
51. jmeter,一个接口的响应结果如下:
<!DOCTYPE html>
<html>
<head>
<title newBidld =“74956"encryptBidld="713504275825">小贷公司标管理/title>
请用正则表达式方法分别获取一下74956和713504275825这两个数值分别赋值给A1和A2
52.接口产生的垃圾数据如何清理
造数据和数据清理,需要连数据库做增删改查的操作
测试用例前置操作,setUp 做数据准备
后置操作,tearDown 做数据清理
53.简述常用的Bug 管理或者用例管理工具,并且描述其中一个工作流程?
常用: testlink, QC, mantis, 禅道,TAPD, JIRA。
TAPD:产品创建(需求,计划,模块)-->项目创建(PM排期、任务分解) -->研发(编码、单元测试等)-->测试(测试计划,用例,执行,bug, 报告等)。
54.禅道和qc的区别?
同为缺陷管理工具。
QC
作为缺陷管理工具,QC在缺陷管理方面,做的相对完善。提bug页面:填写内容可以根据测试需求,不断修改添加新的字段;以我上-家公司为例,在提bug过程中,有一- 下几个必填项: Bug状态(new、fixed、 closed 等)、发现人员、缺陷发现阶段(测试阶段、.上现阶段等)、 缺陷来源(测试人员给出的bug定位)、Bug分类(功能、性能等问题)、测试阶段(单元测试、集成测试、系统测试等)、归属需求、缺陷回归次数、优先级、分配给,这些必填项再加上bug标题 和操作描述、上传附件,使很多疑问都变得清晰。
缺陷查看页面:可以根据自己需要选择要呈现的字段,相对人性化可操作,每个显示的字段都可以进行筛选,使研发人员很快能定位到属于自己的bug, 再根据bug状态、优先级进行筛选,使未完结的bug能有序并无遗漏地完成修改;页面还有注释功能,研发人员能写出针对本问题的各种感想,方便完善而又人性化。
禅道涉及面非常广,但是在缺陷管理这方面,与老牌的QC还是略逊一筹。提bug页面:页面是非常清晰整洁的web页面,但是需要填写的字段,并没有完全覆盖开发和测试人员的全部需求。页面字段:产品模块(对应QC中的项目)、所属项目(对应QC中的需求)、影响版本(bug所属版本? )、当前指派(修改bug的人员)、bug标题、重现步骤、相关需求(页面标注了这个字段,但是什么也没有显示,并且没有可填写的位置)、相关任务、类型/严重。.
55.关于Python程序的运行方面,有什么手段能提升性能?
使用多进程,充分利用机器的多核性能
对于性能影响较大的部分代码,可以使用C或C++编写
对于I0阻塞造成的性能影响,可以使用10多路复用来解决
尽量使用Python 的内建函数
尽量使用局部变量