1. CPU 和 GPU的区别
CPU 力气大啥P事都能干,还要协调。
GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。
详细解释
2. 推荐的算法有哪些?
1 基于人口统计学的推荐
2 基于内容的推荐
3 协同过滤
4 混合推荐算法
3. 协同过滤
协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
换句话说,就是借鉴和你相关人群的观点来进行推荐。
4. Linux命令
查看整个磁盘还剩多少空间 df -h
查看当前的文件夹下的磁盘使用情况 du –max-depth=1 -h
查看某一个文件(文件夹)的大小 du -sh或du -h –max-depth=0
du命令后面可以跟文件路径,来查看指定路径的大小 du -sh /root
找到一个文件中含有aaa 和 bbb和行 grep ‘aaa’ *.txt|xargs grep ‘bbb’
更多命令
5. 白盒和黑盒测试的方法有哪些?
黑盒测试的测试方法有:等价类划分、边界值分析法、猜错法、随机数法、因果图。
白盒测试的测试方法有:代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、Z路径覆盖和基本路径测试法。
6. Python实现字符串替换
a = ‘hello word’
a.replace(‘word’,’python’)或
import re
strinfo = re.compile(‘word’)
b = strinfo.sub(‘python’,a)
print b
作者:牛妹
链接:https://www.nowcoder.com/discuss/165276?type=0&order=0&pos=21&page=1
来源:牛客网
测试工程师面试考点汇总
以下不作为测试工程师的学习路径,只是汇总的校招测试工程师面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的测试工程师校招面试题库,还有其他岗位的相关题库和资料,想要什么岗位的可以留言哦~
本篇根据各个公司的面试问的问题的大数据进行总结,后面还会更新面试中考察所占比例,当然,本文只包括技术面,不太包括hr面或者一些其他谈人生理想的
附题目
一、软件测试基础知识
1、请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
2、请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步
3、请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?
4.请问测试开发需要哪些知识?需要具备什么能力?
5、请说一说黑盒与白盒的测试方法
6、请说一下手动测试与自动化测试的优缺点
7.请问你怎么看待软件测试的潜力和挑战
8、你觉得软件测试的核心竞争力是什么
9、你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障
10、你觉得单元测试可行吗
11、你觉得自动化测试有什么意义,都需要做些什么
12、请你回答一下测试的相关流程是什么?
13、请你说一下如何写测试用例
14、请问你觉得测试项目具体工作是什么?
15、请问如果想进行bug的测评,怎么去评测bug?
16、请你说一说**测试用例的边界
17、请你说一下软件质量的六个特征
18、请你说一下设计测试用例的方法
19、请你说一说测试工程师的必备技能
20、请你说一下app性能测试的指标
21、请你说一说app测试的工具
22、请你说一说bug的周期,以及描述一下不同类别的bug
23、请你说一说PC网络故障,以及如何排除障碍
24、请你说一说测试的**常用方法
25、请你说一下黑盒白盒
26、请你说一说你知道的自动化测试框架
27*、请你说一说web测试和app测试的不同点
28、请问你了解什么测试方法
29、请问黑盒测试和白盒测试有哪些方法
30、请问你怎么看待测试,知道哪些测试的类型,有用过哪些测试方法?
31、请问你怎么测试网络协议
32、请你回答一下什么是α测试和β测试,以及什么时候用到他们
二、软件测试实例
1、给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例
2、请进行测试用例设计:一串数字,闰年的判别
3、请你说一说简单用户界面登陆过程都需要做哪些分析
4、请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示
5、请你对吃鸡游戏进行压力测试
6、请你根据微信登录界面设计测试用例
7、请你对朋友圈点赞功能进行测试
8.如果做一个杯子的检测,你如何测试
9.如何对一个页面进行测试
10.如何对水壶进行测试
11*如何对淘宝搜索框进行测试
12.如何对一瓶矿泉水进行测试
13、如何测试登陆界面
14.请你说一下jmeter
15.请你进行测试:前端下拉框实现,测试下拉框定位方式
16.请你来聊一聊appium断言
17.请你来说一下购物车的测试用例
18.请你进行一下弱网模拟
19、你写的测试程序是怎么样的,你写过前端、后端程序吗?
20、请问你有没有写过测试脚本,怎么写的?
21、请问你有没有写过web测试,怎么写的?
23、请你回答一下如何测试手机开机键?
24、请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
25、你在做项目中有做过压力测试吗,怎么做
26、请问你在项目中关于功能测试和接口测试是怎么做的
27、请问你有用过什么测试工具吗,用过哪些?
28、请你设计一个微信朋友圈点赞的测试用例
29、请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
30、在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?
31、如果广东用户头条app刷不出东西了,你应该怎么排查问题
32、请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分
33、请问如何将大量日志的异常记录或错误揪出来
34、请问如何对登录界面进行测试
35、请你说一说当前工作中涉及的测试问题(测试流程和测试性能)
36、请你说一说洗牌问题的思路并手写代码,并设计测试用例
37、请你测试一下游戏中英雄的技能
38、请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量
39、请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试
40、请问你有没有做过压力测试
41、对于有系统大量并发访问,你会如何做测试,有什么建议
三、语言基础
1、Java
1.请你说一下多态
2请问Java中接口与抽象类是否相同?
3.请你说一下垃圾回收机制
4、请你说一下Java中的异常处理机制
5.请问多线程是什么?
6、请你来聊一聊集合类和内存
7.请你说一下java jvm的内存机制
8.请你说一说有哪几种垃圾回收算法
9.请你说一说垃圾收集机制
10.请你回答一下GC Root可以是哪些
11.请你说一下OOM可能发生在哪,怎么查看,怎么调优
12.请你说一下类加载
13.请你说一下AQS
14.请你说一下volatile
15请你说一下死锁的原因,以及如何打破,如何查看死锁进程状态
16.请你说一下内存泄漏
17.请你说一说class和interface的区别
18.请你说一下内存泄漏的原因
19.请你说一说强引用和弱引用
20.请说一下你对多态的理解
21、手写代码:求n以内的最大质数
22、请你说一下java里内存泄漏和溢出的区别
23、请问你用过什么语言,用这些语言写过什么程序
24、你知道java里面的内存管理机制吗,比如创建和回收是怎么管理的?
25、请你说一下Java里integer和int的区别,以及如何比较相等
26、请你介绍下Java学习情况,学习一门新的语言需要多快
27、请你介绍一下gc,另外如果Java里写一个方法,这个方法里只有一条语句,即new一个对象,请问**方法结束以后这个对象怎么回收的?
28、请你回答一下protected,public,private的区别
29、请你说一下抽象类和接口的区别
30、请你说一下List和ArrayList的区别,以及arrayList和HashSet区别
31、请你回答一下**Java的内存结构是什么,全局变量,临时变量,静态变量分别存在哪里,堆分为哪几块,比如说新生代老生代,那么新生代又分为什么
32、手写代码:给出一个int类型123,写一个函数,返回反转的值321
33、请你回答一下c++和java的区别
34、请你回答一下怎么判断哪些对象是可以删除的,可达是什么意思
35、请你说一说接口有什么限制
36、请问Java中线程如何实现,如何实现多线程,线程安全在Java中是如何实现的,线程的工作区是哪里**
37、请你说一说内存溢出和内存泄漏是怎么回事
38、请你介绍一下HashMap,HashTable,ConcurrentHashMap
39、请你说一下Hashset有什么特性,以及**hashset判断存入的对象是否重复是如何比较的
40、请你说一下Java的反射,你目前主要用他做什么,以及Java的泛型,他的主要作用是什么
41、请问类加载器你了解吗
42、ReentranceLock 和 synchronized 有什么区别
43、请问object的hash该怎么设计
2、c++
1.请你说一下数组和指针的区别
2.请你说一说STL常用的容器
3请你说一下虚函数
4.请你说一下动态内存分配
5.请你说一下深copy浅copy
6.请你说一下C 中申请和释放内存的方法
7.请你说一说C++和C的区别
8.请你回答一下C++中的多态是怎么实现的
9、请你说一下C语言的内存分配
10、请你回答一下什么是指针,以及指针和数组的区别,指针和引用的区别
11、请你说一下const和指针的区别,以及运算符优先级是怎么样的
12、手写代码:写一个程序算出100以内7的倍数
13、手写代码:写一个函数,不用加法和乘法,返回他的八倍
14、请你说一下new和malloc的区别
15、请你说一说C++语言的三大特性
16、请你说一说虚函数和纯虚函数区别
17、请你说一下static作用
18、请问你怎么理解多态,他有什么好处
19、手写代码:求两个数的最大公约数
20、手写代码:将字符串转int类型,要求不能用已有的方法
21、手写代码:求x的n次方
3、Python
1.手写代码:比较两个json数据是否相等
2、请问怎么拿到python的输入方式?以及python怎么打开文件?
4、Shell
1、请你说一下shell的基本命令,怎么看到行号?怎么查进程的id?
2、请你回答一下常用到的shell指令中与网络相关的有哪些,netstat、ping、ifconfig这三个的区别,分别是什么功能,netstat里面一般服务器启动后的端口状态是什么
四、算法与数据结构
1、链表
1、手写代码:一个单向链表,每个节点上都有一个value;给定 一个 value,将该 value 之前的所有 value返回
2、手写代码:**怎么判断链表有环,怎么找环节点
3手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度;
4.请问如何判断一个单向链表存在回路?
5请问如何判断一个链表是否有环
6请问如何判断两个链表是否相交
7、手写代码:将一个数组指定offset后面的元素前置,可采用链表实现
8、手写代码:循环链表插入元素
2、数组
1、手写代码:合并两个排序数组
2.手写代码:最大子数组问题(要求时间复杂度最佳)
3.手写代码:筛选数组arr中重复的元素,考虑时间复杂度。
4.写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。
5、 请看一下这个小型的算法题,有一个长度未知的无序数组(无法获取数组长度,不许排序,数组元素为int范围内的任意值),如何找出第一个连续出现的重复的数(比如 4 3 4 3 5 5,找出的数是5)
6手写代码:合并两个有序数组
7.手写代码:有三种面值的硬币k1 < k2 < k3 ,找k面值的零钱,最少需要多少硬币
8手写代码:合并有序数组
9.手写代码:一个数组找出重复的元素
10.请问如何防止数组越界
11、请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点
3、复杂度
1.一行里有很多IP地址,互相之间用 || 隔开,共有一万行。要求:取双竖线分隔的倒数第二列所有的IP地址并且去重并输出每个IP地址的出现次数。
2、手写代码:硬币找零问题(要求时间复杂度最佳)
2、排序
1、请问Java中collection的sort方法,默认的排序方法是什么
2、手写代码:合并两个排序数组
3.请问有哪些排序算法
4.手写代码:冒泡排序
5手写代码:统计排序数组中出现次数最多的元素出现的次数?
6.请你说一下堆排序的思想?以及怎么初始建堆?是否稳定?
7、手写代码:数组的2-sum,3-sum,问题(leetcode原题)
8、手写代码:5个扑克牌是否是顺子,大小王当成任意的
9、请你说一说快速排序,并手写代码
10、你最熟悉什么算法?给我说一下原理或者排序过程?它的优缺点是什么?你知道什么排序算法,介绍他们的实现方法,时间复杂度和空间复杂度,是否稳定,快排基准点怎么选择,
11、请你说一下快排如何实现?
3、树
1、请你说一下BST的特点,并**手写代码判断一棵树是不是BST
2、手写代码:给一个二叉树,怎么得到这棵树的镜像
3、手写代码:通过前序和中序还原二叉树
4.手写代码:求二叉树每层最大值
5、手写代码:两个平衡二叉树合并是怎么做的
6手写代码:求全体二叉树节点最大值
7、手写代码:二叉树深度优先遍历
4、递归
1.手写代码:青蛙跳台阶
5、字符串
1、手写代码:两个字符串的最长公共子序列?
2、手写代码:字符串逆序
3.手写代码:字符串复制函数
4.手写代码:驼峰字符串问题,给定一个驼峰样式的字符串例如“AaABbBcBbcvQv........”->“bc”,两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。
5、手写代码:给一个字符串找出第一个只出现一次的字符位置
6、堆与栈
1.请你说一说堆和栈的区别*
2、请问有一些数,每次可以插入,或者取出第1/4大的数,应该用什么数据结构?
7、动态规划
1.系统会给定一串数字让玩家选择,如果玩家选中一个数字,比如M,那么玩家获得M分,但同时当前选中的M,以及这串数字中所有的M+1和M-1将会全部消失。玩家可以继续选择得分,直到串为空。最终系统会根据玩家获得的积分发送奖励,积分越高,奖励越丰厚。例如系统给定的数字是[2,3,3,3,4], 如果玩家选定了2,玩家得2分,并且选中的2和所有的1和3会消失,那么数组只剩下[4],玩家再选择4,数组为空,此时一共获得6分如果玩家首先选中的是3,那么玩家得3分,选中的3,以及2和4都会消失,数字剩下[3,3],第二次和第三次玩家可以再次选择3,这样选择一共得9分,这也是最优的选择方式。
2.手写代码:给一个英文文本“i have a dream i am a human you can have dream too.”再给一个文本“i you am ”,要求计算出第一个文本中包含第二个文本每个单词的最短文本,比如例子中最短文本就是“i am a human you”。**
3.手写代码:给你一个格子,一个人在格子的左上角,他只能向右走一步,或者向下走一步,他走到右下角共有多少种方法**
4请你讲一下动态链表和静态链表的区别
5、请你说一下递归和动态规划的区别?
6、手写代码:01背包
8、高级算法
1、手写代码:LCS问题
2、请问你知道什么加密算法吗
3、手写代码:斐波那契数列
9、查找
1、手写代码:二分查找的代码
2、一个二维坐标系,给你n个点的坐标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。
10、哈希
1、请你说一下哈希表是做什么的?另外哈希表的实现原理也说一下
2、现在有100W个账户密码,要存起来,要求查找时速度尽可能快,你选择什么数据结构?为什么?
11、图
1、请问你对图论算法了解多少?(BFS,DFS,最短路径,最小生成树,最小割最大流...)平常有用过吗?
五、框架
1、Spring
1、请问Spring 声明一个 bean 如何对其进行个性化定制
2、请你说一下Spring AOP
3、请问J2EE 上 request 请求先经过谁 然后再转交到 SpringMVC上
4、请你回答一下Filter主要是做什么的,filter和Servlet先过哪个,FilterChain 是什么意思
六、Linux,SQL等
1.请问linux两台机器之间传文件,用的什么端口
2.请你说一说关于linux查看进程
3.请你说几个基本Linux命令
4.请你说一说Linux命令(查看进程、top命令、查看磁盘)
5请你说几个**inux指令
6.请你说一下vector的特性
7、查看端口号、进程的指令是?动态查看日志的指令?怎么判断一个端口存不存在,磁盘满了怎么处理,删除一个目录下的txt文件,你还熟悉其他什么linux指令?
8、请你说一下vi里面怎么替换字符串
9、请问contrab,uptime,du,netstat这几个指令有什么作用,如何查看磁盘分区状态
10、请问如何将文本中的T全部替换成t,将其中的一行复制新的一行出来
七、前端
1、请你说一下**前端数据存储方式(cookies,localstorage,sessionstorage,indexedDB)
八、开发工具
1.请你说一下eclipse的常用操作快捷键
九、设计模式
1**.请你说一下常用设计模式;**
2**.请你手写一下单例模式**
3**、请问设计模式是什么?**
4**、请你手写一下单例模式代码**
十、场景题
1.上亿数量的链接,如何找出点击量排名前十的链接?
2.请你说几个海量数据存储常见问题**以及如何解答
3.请顾问有两个文件,如何将这两个文件按行依次交叉存入第三个文件中
4、请你回答一下:统计文本中出现次数前十的单词,文件很大,不能一次性读入内存?
5、请你回答一下QQ怎么实现在线大文件的传输
6、请你回答一下新增一个dota2英雄要怎么设计,应该考虑哪些
7、请你说一下你用过哪些电商app,并**比较他们的好坏
8、有一款还没有进入杭州市场的铅笔,怎么估计他的月销售量
9、请你说一下ping百度途径的主机是如何展示出来的
10、1-100,100个数,取走一个,怎么快速知道我取走了哪个数。
十一、大数据
1、Hadoop
1.请你说一下分布式和集群的概念。
2、Hadoop你也有了解的,那你有了解他的备份机制吧?请问怎么做到数据保持一致?
十二、计算机基础
1、计算机网络
1.请你说一下HTTP的报文段是什么样的?
2.请你回答一下HTTP用的什么连接?
3.请你说一说TCP的三次握手?
4.请你说一下在浏览器中输入一个网址它的运行过程是怎样的?
5请你说一说http rest
6.请你说一说http请求报文
7.请你说一说get和 post区别
8.请你说一下tcp和udp的区别
9.请你说一下get和post的区别
10.请你说一下为什么tcp可靠,哪些方法保证可靠
11.请你说一说TCP的流量控制
12.请你回答一下TCP三次握手,以及为什么不是两次
13.请你回答一下ipv6的位数
14.请你说一说osi七层模型
15.请你说一说DNS解析过程
16*请你说一说http和https区别
17.请你说一说get和post区别
18.请你说一下**https中SSL层原理
19.请你说一说TCP断连过程,以及单向连接关闭后还能否通信
20.请你说说TCP和UDP用一个端口发送信息是否冲突
21.请你说说HTTP常见头
22.请你说说**HTTP状态码
23.请你说说soket编程和http协议
24请你说说tcp三次握手四次挥手
25请你说说post和get的区别
26.请你说说HTTP状态码,HTTP请求协议
26、请你说一说http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的
27.请你回答一下搜索敏感词汇时,页面被重置的原理
28、请你说一说两个机器之间的通讯过程?以及计算机网络为什么有七层?
29、请你说一说http缓存问题,缓存寿命,怎么判断文件在服务器是否更改的
30、请你说一说什么是http协议,http的数据段包括什么?http 为什么是无状态的,http和https的区别?ip地址的abcd类是怎样分的,ABCD分层协议为什么如此分层,什么是长连接和短链接**
31、请你说一说**tcp数据段都包括什么?tcp三次握手四次挥手过程、为什么挥手是四次
32、请你说一下tcp与udp的区别,以及**tcp为什么可靠,tcp滑动窗口,同传,拆包组装包是如何实现的
33、请你说一下tcp/ip四层网络协议
34、手写代码:从网络日志中,提取出date 字段,并排序。
35、从打开浏览器输入url到到达服务器上项目中某一个Controller上,请你来描述一下这一串过程
36、请你介绍下session
37、请问你知道跨域吗,条件是什么,在header里需要加什么,有几种方案
38、请你来回答一下,比如淘宝的搜索算法,输入关键词,会给出搜索出来的商品结果,对于这样的算法,如何评价它的好坏?
39、商品的种类有几十万种,在这种大数据的情况下,如何评价搜索算法的好坏?
2、数据库
1.请问什么是数据库事物
2.请你说一下数据库连接泄露的含义
3请你解释一下数据库事务的含义
4请你写一下mysql删除语句
5.请你说一下**数据库mysql中CHAR和VCHAR的区别
6.请你写两个sql语句,统计XX人数、选出课程编号不为XX的学生学号
7请你说一下**SQL左连接以及使用场景
8.请你写一下SQL查询、更新的某一列语句
9.请你写一下SQL语句的多表查询
10请你说说redis
11.请你写一些基本的SQL语句
12.某个表格中有10条一模一样的数据,现在要删掉其中的9条,请你写一下sql语句
13某个表格存着 s_name subject score 三个字段,比如某一行是 张三 数学 76,现在要选取出所有科目成绩都大于80分的学生名字,请写出sql语句
14.请你说一说数据库中的聚类查询
15、请问如果mysql中用户密码丢了怎么办,建一个数据库表,授权命令是什么
16、写出sql语句:数据库统计总成绩取前十名的学生
17、请你说一下数据库事务、主键与外键的区别?
18、请问对缓存技术了解吗
19、请问count和sum的区别,以及count()和count(列名)的区别*
20、请问你数据库是用的MySQL吗?平常数据库的语句都是怎么写的? join作用,想删除一行怎么做
21、请问如何对数据库作优化
22、请问什么是幻读
23、请你说一下MyBatis有什么优势,他如何做事务管理
24、请你说一下事务的隔离级别,以及你一般使用的事务是哪种
3、操作系统
1.请你说一下多进程、多线程,操作系统层面的差别和联系
2.请你说一下线程通信的方法、线程的五种状态
3.请你说一下虚拟内存
4.请你说一下线程的同步和互斥以及应用常见
5.请你说一下线程的五种状态以及转换
6.请你说一说消息队列、信号量的实现方式
7请你说一下进程和线程的区别
8请你说一下死锁的概念、原因、解决方法
9请你说一下多线程
10.请你说一下线程之间通信的手段
11.请你说一下死锁
12.请你回答一下进程同步的方法
13、请问进程线程的区别,进程间怎么相互通信,什么是多线程,什么是并发
十三、智力题
1.5只猫 五分钟捉5只老鼠 请问100分钟捉100只老鼠需要多少只猫?
2.圆桌,两个人,轮流放硬币,不能重叠,半径为1,某一方不能放下去,则为输。问先手赢 后手赢。
3.逻辑题:3升的杯子一个,5升的杯子一个,杯子不规则形状 问怎么得到4升的水 水无限多
4.晚上有四个人过桥,一次只能过两个人,但是只有一只手电筒,四个人过桥时间分别是1,2,5,8,求最短过桥时间
5.两个容积分别为5升和6升的桶,最后如何只装3升?
6.有十张扑克牌,每次可以只出一张,也可以只出两张,要出完有多少种出法
7、井盖为什么是圆的
8、用5L和6L的桶,没有刻度,怎么量出3L的水
9、从前有座山,山脚下有5个海盗抢到了100枚金币,每一颗都一样的大小和价值。他们决定通过抽签的方式,按顺序提出分配方案决定金币的归属。
首先,由1号提出方案,5个人进行表决,半数人以上(包括半数)同意时,方案通过,否则他将被扔入大海喂鲨鱼,剩余海盗继续按顺序提出方案,依次类推。
假设每个海盗都是足够理性及机智,会考虑到利害及利益最大化问题,那么,1号海盗提出怎样的分配方案才能顺利通过考验并拿到可能性内最多的金币呢?
1*0、烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定15分钟?
11、两个盲人各买了一白一黑两双袜子,不小心弄混了,问他们自己怎么分成刚好每人一白一黑
12、一个圆桌,两个人往上放硬币,只能平铺不能重合,最后一个放的人胜利(接下来硬币无处可放了),问先放的赢还是后放的赢。
十四、职业规划
1、为什么要投测试工程师?
十五、技术发展
1、对于大数据有什么了解
2、有没有关注什么最新的技术
3、对加班的看法、
4、介绍实习经验
5、印象最深刻的一个项目,用英文将这个项目说一遍
6、实习过程中有没有想过开发一些自动化测试工具
7、你在学校的成绩,
8、你觉得你做的比较出彩的事情
9、就发表的论文讨论
10、发表的论文印象最深的?
11、那你觉得文章效果好,好在哪里呢?
12、那你能给我总结一下,它的创新点在哪里?
13、打断一下,是有监督的学习还是无监督的?
14、怎么看待你的岗位?
15、标签的搜集是怎么搜集的?
16、那握手用的什么协议?上层的协议的用的那个协议?
17、数字认证认证成功是要通过用户名和密码么?
18、怎么判断是不是伪造?
19、具体怎么判断?信道信息能模拟么?
20、换了时间,信息就不一样了
21、相似性多大才会认为是合法的呢?
22、你们用的什么机器学习算法?
23、那你分类选的啥?你用其他算法去对比了么?)
24、近几年有什么职业规划?
25、打算一辈子做测试吗?
26、你有遇到什么困难吗?
27、你的短板是什么?
28、项目里最成功的是什么?你自己做的吗?多大规模?你怎么实现的,从开始到实现流程是怎样的?
29、你为什么要做测试?结合你自己的优势说(这里我强调了一下,我的学习成绩,学习能力强)
30、你有哪些与众不同的优点**
31、让我介绍下自己,自己的优点和缺点,同学和朋友怎么看你
32、和别人合作过项目没(答曰做过项目负责人),是怎么协调组员合作的,有过冲突和矛盾还有困难?怎么解决的
33、问拿到的offer,谈谈为什么选择头条
34、你了解头条多少,下载APP没,怎么看待
35、你有什么擅长的技术
36、对测试开发有什么了解
37、问成绩、实习时间、实习时间能不能延期、开题报告了没、论文定了什么内容没?
38、你有没有意愿做系统测试?
39、你自己比较偏向于做测试开发?还是系统测试?
40、问我亚索的e在一小段时间内是不能对同一目标使用的,怎么测
41、玩过dota吗,说一下你当时玩dota的时候发现的bug
42、游戏手感是什么?能不能用数据来描述?**43、FPS啥意思?**
44、读过什么源码吗
十六、Hr面
1、有没有家属在腾讯?
2、有没有患过重大疾病、精神疾病、心里疾病?
3、有没有亲属在深圳?
4、意向工作城市?
5、还投过哪些公司?
6、为什么想来腾讯?
7、成绩、实习时间,实习能不能延期?
8、职业规划,为什么来北京
9、对于互联网现状的认识
10、参加过什么竞赛,你在里面担任了什么角色
11、大学这几年怎么过的
12、有没有测试的什么经验
13、如果说来实习,你住的地方怎么解决呢?大概入职时间?
14、你觉得自己是个什么样的人?
15、你对未来同事、老大、团队、公司都有什么期望?
16、如果老大给你一些资料让你看,然后你看不懂,老大又非常忙,你该怎么办?
17、你觉得在公司里什么样的事情会让你很有成就感呢?
18、项目主要解决的问题,从项目中学到的最好的技术,项目经验对做我们这个岗位的好处
19、玩过哪些游戏?
蚂蚁金服面试题
蚂蚁金服】
一、自我介绍
二、Tcp和udp:
1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路
3.运输层:主要为两台主机上的应用提供端到端的通信
4.应用层:负责处理特定的应用程序细节
三、TCP三次握手和四次分手
三次握手
客户端发送SYN信号,表示告诉服务器,我要建立连接
服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
客户端收到来自服务端响应后,知道服务端已经接受连接请求,再次发送ACK给服务器,确认服务端的SYN,其实也就是一个确认的再确认。
四次握手
主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的连接;
被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的连接关闭了,也就是主动方不能再发送数据给被动方。
被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的连接;
主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的连接关闭了,也就是被动方不能再发送数据给主动方
四、Dns的作用
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串
DNS系统:通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53
五、接口和抽象类的区别
1、接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情
2、抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板
六、怎么理解测试这项工作的
就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别
七、Qtp怎么使用的
QTP:QuickTest Professional,关键字驱动(如控件)的功能测试工具,能够对各种编程语言开发的软件进行功能测试,可以用VBScript脚本语言编写程序
执行计划的步骤
创建测试脚本:按照计划录制脚本并保存
增强测试脚本
执行测试
分析测试结果
https://www.cnblogs.com/xiezhidong/p/6784684.html
八、写测试用例
测试用例主要由8部分构成:所属的模块、名称、编号、等级、描述、预制条件、操作步骤、预期结果
九、Linux
常用命令:
十、软件测试里的元素定位
非xPath方式和xPath方式
十一、TestNG怎么使用???
1、Selenium是浏览器自动化工具,主要用来Web的自动化测试
TestNG是一个设计用来简化广泛的测试需求的测试框架
编写测试的过程:
编写测试的业务逻辑并在代码中插入TestNG Annotation
将测试信息添加到testng.xml文件或者build.xml中
运行TestNG
注:TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试
2、测试信息尤其是测试数据不再写死在测试代码中,好处就是修改测试数据时不需要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试
3、注解:
@BeforeSuite: 被注释的方法将在所有测试运行前运行
@AfterSuite:被注释的方法将在所有测试运行后运行
@BeforeTest: 被注释的方法将在测试运行前运行
@AfterTest: 被注释的方法将在测试运行后运行
@BeforeGroups: 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
@AfterGroups: 被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
@BeforeClass: 被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass: 被注释的方法将在当前类的所有测试方法调用后运行。
@BeforeMethod: 被注释的方法将在每一个测试方法调用前运行。
@AfterMethod: 被注释的方法将在每一个测试方法调用后运行。
属性:
@alwaysRun 对于每个bufore方法(beforeSuite, beforeTest, beforeTestClass 和 beforeTestMethod, 但是不包括 beforeGroups)
如果设置为true,被配置的方法将总是运行而不管它属于哪个组。
对于after方法(afterSuite, afterClass, ...): 如果设置为true,被配置的方法甚至在一个或多个先调用的方法失败或被忽略时也将运行。
@dependsOnGroups 这个方法依赖的组列表
@dependsOnMethods 这个方法依赖的方法列表
@enabled 这个类的方法是否激活
@groups 这个类或方法所属的分组列表
@inheritGroups 如果设置为true,这个方法被属于在类级别被@Test annotation指定的组
@DataProvider 标记一个方法用于为测试方法提供数据。
被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。从这个DataProvider接收数据@Test方法需要使用一个和当前注释相同名称的dataProvider名称
@name 这个DataProvider的名称
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]
@Parameters描述如何传递参数给@Test方法
value 用于填充这个方法的参数的变量列表
@Test 标记一个类或方法作为测试的一部分
@ alwaysRun 如果设置为true,这个测试方法将总是运行,甚至当它依赖的方法失败时
@ dataProvider 这个测试方法的data provider的名称
@ dataProviderClass 用于查找data provider的类。
如果不指定,将在当前测试方法所在的类或者它的基类上查找data provider。
如果这个属性被指定, 则data provider方法需要是指定类的static方法。
@ dependsOnGroups 当前方法依赖的组列表
@ dependsOnMethods 当前方法依赖的方法列表
@ description 当前方法的描述
@ enabled 当前类的方法/方法是否被激活
@ expectedExceptions 测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.
@ groups 当前类/方法所属的组列表
@ invocationCount 当前方法被调用的次数
@ successPercentage 当前方法期望的成功率
@ sequential 如果设置为true,当前测试类上的所有方法保证按照顺序运行。甚至测试们在parallel="true"的情况下.
@ 这个属性只能用于类级别,如果用于方法级别将被忽略。
@ timeOut 当前方法容许花费的最大时间,单位毫秒。
@ threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定
注意:如果invocationCount没有指定则这个属性将被忽略
https://blog.csdn.net/lykangjia/article/details/56485295
十二、事务(DB)
四大特性:数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚
一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性:当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务
不考虑事务的隔离性,会发生的几种问题:
脏读:指在一个事务处理过程中读取了另一个未提交的事务中的数据
不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
虚读(幻读)
事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。
MySQL数据库为我们提供的四种隔离级别:
① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
② Repeatable read (可重复读):可避免脏读、不可重复读的发生。
③ Read committed (读已提交):可避免脏读的发生。
④ Read uncommitted (读未提交):最低级别,任何情况都无法保证
十三、假如你现在来测试登陆这个模块的话,你怎么测试
(1)基本功能测试点
输入正确的用户名和密码登录成功
输入错误的用户名密码登录失败
用户名正确,密码错误,是否提示输入密码错误?
用户名错误,密码正常,是否提示输入用户名错误?
用户名和密码都错误,是否有相应提示?
用户名密码为空时,是否有相应提示?
如果用户未注册,提示请先注册,然后进行登录
已经注销的用户登录失败,提示信息友好?
密码框是否加密显示?
用户名是否支持中文、特殊字符?
用户名是否有长度限制?
密码是否支持中文,特殊字符?
密码是否有长度限制?
密码是否区分大小写?
密码为一些简单常用字符串时,是否提示修改?如:123456
密码存储方式?是否加密?
登录功能是否需要输入验证码?
验证码有效时间?
验证码输入错误,登录失败,提示信息是否友好?
输入过期的验证能否登录成功?
验证码是否容易识别?
验证码换一张功能是否可用?点击验证码图片是否可以更换验证码?
用户体系:比如系统分普通用户、高级用户,不同用户登录系统后可的权限不同。
如果使用第三方账号(QQ,微博账号)登录,那么第三方账号与本系统的账号体系对应关系如何保存?首次登录需要极权等
(2)页面测试
登录页面显示是否正常?文字和图片能否正常显示,相应的提示信息是否正确,按钮的设置和排列是否正常,页面是否简洁壮观等。
页面默认焦点是否定位在用户名的输入框中
首次登录时相应的输入框是否为空?或者如果有默认文案,当点击输入框时默认方案是否消失?
相应的按钮如登录、重置等,是否可用;页面的前进、后退、刷新按钮是否可用?
快捷键Tab,Esc,Enter 等,能否控制使用
兼容性测试:不同浏览器,不同操作系统,不同分辨率下界面是否正常
(3)安全测试
不登录:浏览器中直接输入登录后的地址,看是否可以直接进入
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
用户名和密码是否通过加密的方式,发送给Web服务器
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
用户名和密码的输入框,应该屏蔽SQL 注入攻击
用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
错误登陆的次数限制(防止暴力破解)
考虑是否支持多用户在同一机器上登录;
考虑一用户在多台机器上登录
性能测试
单用户登录系统的响应时间是否符合"3-5-8"原则
用户数在临界点时并发登录是否还能符合"3-5-8"原则
压力:大量并发用户登录,系统的响应时间是多少?系统会出现宕机、内存泄露、cpu饱和、无法登录吗?
稳定性: 系统能否处理并发用户数在临界点以内连续登录N个时的场景?
其他测试
连续输入3次或以上错误密码,用记是否被锁一定时间(如:15分钟)?时间内不允许登录,超出时间点是否可以继续登录。
用户session过期后,重新登录是否还能重新返回这前session过期的页面?
用户名和密码输入框是事支持键盘快捷键?如:撤销、复制、粘贴等等
是否允许同名用户同时登录进行操作?考虑web和app同时登录
手机登录时,是否先判断网络可用?
手机登录时,是否先判断app存在新版本?
是否支持单点登录?
是否有埋点接口
十四、你是测试工程师,如何保证软件的质量
从两个角度:1.质量是全员质量,公司每个成员都有责任参与质量保证。2.从测试角度来保证质量,测试也分为多个层次。
1、质量管理
(1)代码质量:开发通过单元测试保证
(2)让用户参与UAT测试,保证用户体验(使用质量)
(3)引入QA,保存过程环节质量
(4)系统测试工程师保证系统质量满足需求
2、质量保证
(1)测试策略:质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合
(2)用例质量:采用合适的用例方法,如何进行需求分析,用例评审
(3)执行质量:如何保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型
(4)缺陷质量:Bug评审,引入合适的Bug流程
(5)过程质量:合理的软件测试流程,测试过程监控
电话一面(35min)
1、冒泡排序,找下纸笔手写代码
1.5 讲述下不同排序算法的优缺点(时间复杂度、稳定性、海量数据排序)
2、栈的原理和应用:左右括号是否正确匹配的经典问题
3、介绍你研究生期间的项目、用到了哪些算法(机器学习方向)
3.5 Kmeans算法的原理,有什么可以改进的
4、实验室项目之外有什么经历、
5、有没有拿奖、或者参加计算机类竞赛
感谢一面的面试官,很有耐心,即使面对的是我这种没时间准备面试的。
电话二面(42min)
面试官:我将分为几个大的部分开展问题,做一下准备;
0、先介绍下你在实验室做的项目,
用到了KNN,那就讲一下机器学习中的几种距离(欧几里得距离、曼哈顿距离和切比雪夫距离)
1、机器学习:详细说明下“梯度下降”的公式推导?
1.5、答不上来,没关系,我再问一个:最大期望算法的原理,另外这和上一个问题之间有什么联系么?
2、数据结构方面:简述下堆排序的原理?
3、计算机网络方面:多线程通信的方式,系统产生死锁的原因(四个必要条件)?
4、简历上项目中的数据噪点是怎样去除的?
因为楼主是C++,所以基本不涉及Java方面的知识。
终结
今天不知道怎么了,就想去官网上看看状态。发现已经变成Rejected了,还是有点伤心的。
其实上面的问题有一些回答不是很满意,后来去牛客网上看了下,大概明白了:
也有可能是前面的技术综合评价不够高吧,然后一直备胎中…后来出现比你好的了…就被刷了…
后面的大家加油,阿里校招的HC一向不多,所以要有更强的实力和更充足的准备!
推荐
《大话数据结构》 && 《统计学习方法》(李航博士的蓝皮书)
---------------------
测试开发工程师常见面试题
一.功能测试用例的设计
举例:
(一).我想要回家,让你给我买一张票,然后设计测试用例
答案:
1.确定需求(回家回哪,需要什么票,买什么时候的票)
2.开始测试
2.1功能测试(我去买票(买火车票,飞机票),买到票(什么时候),回来给你)
2.2可靠性测试(我去买票过程中被撞死了,票买不到怎么办,延期了,买那个点的票没了怎么办让我帮他买票的人的身份,比如是否有特殊优待,如军人,1米2以下儿童等,身份证丢了,或者票丢了,责任划分)
2.3可维护性测试(票是否可保存完好)
2.4兼容性(还不同人的去买,我中间招人去买,我坐车走路)
2.5算法测试(我通过不同的渠道买票花费的时间)
2.6竞品测试(别的人怎么买的票)
2.7安全性测试(身份信息保密)
2.8性能测试(一个身份证买多张票,同时多张身份证买多张票)
二.工作测试流程:
(一).功能测试流程
1.需求评审(重点,你发挥的作用是什么,需求可执行性,关联影响的功能模块,异常情况处理)
2.评估测试时间(测试计划)
3.测试用例设计(正交,边界值,等价类。。)
4.用例review(领导,开发,产品)
5.提测(确认开发进行过自测,功能主流程畅通,然后开始介入测试)(产品开发测试一块走流程)
6.codediff(代码改动点,从根源发现开发的问题,代码中明显测试代码(return,写死值),
公共静态变量在发生高并发时容易出问题,所以不能让这个变量的值去内存里面取)
7.执行用例
8.提bug(jira)
9.回归测试
10.确认测试(准生产环境确认)(分情况)
11.发布(线上回归))
12.BUG review(总结问题)
注意点:
发布测试来控制,测试环境部署测试来控制
发布过程中,开发运维做监控。(分批发布)
三.app专项测试:
1.CPU,内存,流量,电量,弱网,兼容性,FPS,中断,安装,稳定性
怎么自动化实现,写一些自动化框架方法封装起来,重复的使用
2.冷热启动的区别
冷启动:在个人电脑中,冷启动是切断电源后重新启动。App类似,就是完全退出(不在后台运行)后重启启动。
热启动:非冷启动情况都可以称为热启动。热启动比冷启动多了一个触发点,那就是在后台启动App,比如双击苹果的HOME键,进行App的热启动。同时热启动通常会有一个计时器,特别是一些理财和银行的类的App会做此处理,当你间隔一段时间触发了热启动后,会让你再次登录(通过密码/手势/指纹)。也有比如网易新闻客户端这样的,当你间隔一段时间后触发热启动,会弹出广告页。
四.工具使用:
postman:接口,功能测试,可以做参数化
httprequester:接口,功能测试
jemter:接口功能性能工具
lr:接口功能性能
fiddler:抓包,设置代理,设置断点,mock数据
charles:抓包,设置代理,设置断点,mock数据
robot:功能自动化
uft(qtp):功能自动化
docker:容器
monkey:性能稳定性(app)
jenkins:自动持续集成
git,svn:代码管理
xmind/visio:脑图
soapUI:接口功能测试(HTTP,WEBSERVICE协议)
xshell/SecureCRT/putty:
slor:关键字分词
slor:我测试:我 测试分别去数据库搜索结果
nginx(反向代理)
tomcat(动态网页发布)
五.基础概念:
什么是性能测试
HTTP协议(哪些方法,什么区别(GET\POST),怎么组成,状态码)
TCP三次握手四次离手
线程,进程区别联系
内存泄露,内存溢出
死锁
六.自动化测试:
自动化测试脚本的应用场景:
1.重复性较多的,写脚本能省时间,节省效率,
接口重复回归,功能重复回归
2.手动做不了的测试
上万数据的准确性校验,脚本跑,错误数据筛选出来
数据更新机制的调整,全量变成增量更新()
自动化框架的搭建:
接口自动化框架
1.结构(1.框架思想(数据,关键字,行为,事件,混合)
2.读取用例的模块(excel,txt,mysql,xml)
3.发请求的模块(requests封装)
4.断言模块(re,遍历断言)
5.日志模块
6.测试报告生成模块
7.发邮件模块
8.配置文件)
2.怎么设计测试用例,注意哪些点()
3.怎么断言
功能自动化框架
1.和接口自动化类似
2.对页面各个控件的api封装(哪些封装,下拉框,选择框,对隐形控件怎么处理)
3.不同环境处理
4.xpath定位方法()
5.js定位方法()
平台工具:
1.接口自动化集成到平台上;
2.平台做测试环境,线上环境的监控
3.做公用统计线上badcase的统计
七.算法:
(会多门语言(前端了解。java熟练,python熟练))
排序算法:
冒泡
快排
查找算法:
二分查找,
队列,堆,栈实现:
八.linux:
常用命令背下来,熟悉,知道怎么用
ls -alih()
看日志(cat,head,tail,more)
grep|wc -l
九.数据库:
关系型数据库:
mangodb
mysql(sql,慢查询,配置)
oracal
GP数据库
非关系型数据库:
redis
十.服务架构:
服务分布式架构(超融合):概念实现理解
十一.网络
IP
网关
路由
根据子网掩码算网关
NAT
VPN
交换机配置
十二.典型例题
(一).Web页面出现空白页怎么定位问题
1.抓包(抓包)
2.看服务日志
3.看你当前url 用接口实际访问模拟下请求
4.mock数据,给请求,确认是那部分问题
(二).Web页面响应过慢怎么定位问题
从一个浏览器输入url到形成页面经历了什么
(三).你所测试的系统架构
---------------------
经典的测试开发面试题
(整理自网络)
1、你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?
首先,将问题提交到缺陷管理库进行备案。
然后,要获取判断的依据和标准:
- 根绝需求说明书,产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是都确认的直接依据;
- 如果没有文档依据,根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
- 根据用户的一般使用习惯,来确认是否是缺陷;
- 与设计人员,开发人员和客户代表等相关人员探讨,确认是否是缺陷;
合理论述,客观严谨的向测试经理说明自己的判断理由;
等待测试经历做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反应,并由上级做出决定
2、给你一个网站,你如何测试?
首先,查找需求说明、网站设计等相关文档,分析测试需求;
制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试、界面测试、性能测试、数据库测试、安全性测试、兼容性测试;
设计测试用例:
功能测试(包括不限于):
链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回
提交功能的测试
多媒体元素是否可以正确加载和显示
多语言支持是否能够正确显示选择的语言
界面测试(包括但不限于):
页面是否风格统一,美观
页面布局是否合理,重点内容和热点内容是否突出
空间是否正常使用
对于必须但未安装的控件,是否提供自动下载并安装的功能
文字检查
性能测试:
压力测试
负载测试
强度测试
数据库测试:
具体决定是否需要展开。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。
安全性测试:
基本的登陆功能的检查
是否存在溢出错误,导致系统崩溃或者权限泄露
相关开发语言的常见安全性问题检查,例如:SQL注入
如果需要高级的安全性问题,确定获得专业安全公司的帮助,外包测试,或者获取支持
兼容性测试,根据需求说明的内容,确定支持的平台组合:
浏览器的兼容性
操作系统的兼容性
软件平台的兼容性
数据库的兼容性
开展测试,并记录缺陷,合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如:需求变更,风险,配置,测试文档,缺陷报告,人力资源等内容)
定期评审,对测试进行评估和总结,调整测试内容
3、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何使用LoadRunner进行测试
建立测试计划,确定测试标准和测试范围
设计典型场景的测试用例,都改常用业务流程和不常用的业务流程等
根据测试用例,开发自动化测试脚本和场景
录制测试脚本:新建一个脚本(Web/HTML协议);点击录制按钮,在弹出的对话框的URL中输入”about:blank”;在打开的浏览器中进行正常操作流程后,结束录制;调试脚本并保存,可能要注意到字符集的关联。
设置测试场景:针对性能设置测试场景,主要判断在正常情况下,系统的平均事务响应时间是否达标;针对压力负载设置测试场景,主要判断在长时间处于满负荷或者超出系统承载能力的条件下,系统是否会崩溃;执行测试,获取测试结果,分析测试结果
4、目前主要的测试用例方法是?
白盒测试:路径覆盖、代码走查、静态分析
黑盒测试:边界值分析,等价类划分,错误推测法,因果图,状态图法
5、软件测安全性从哪几个方面测试?
软件安全性测试包括:程序、数据库安全测试
- 用户认证安全的测试要考虑问题: 明确区分系统中不同用户权限 、系统中会不会出现用户冲突 、系统会不会因用户的权限的改变造成混乱 、用户登陆密码是否是可见、可复制 、是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)、用户退出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入 系统 、系统网络安全的测试要考虑问题 、测试采取的防护措施是否正确装配好,有关系统的补丁是否打上 、模拟非授权攻击,看防护系统是否坚固 、采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP ) 、采用各种木马检查工具检查系统木马情况 、采用各种防外挂工具检查系统各组程序的外挂漏洞
- 数据库安全考虑问题: 系统数据是否机密、系统数据的完整性 、系统数据可管理性 、系统数据的独立性 、系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)
6、什么是测试用例?什么是测试脚本?两者关系?
测试用例:为实现测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的合集
测试脚本:为了进行自动化测试而编写的脚本
关系:测试脚本的编写必须对应相应的测试用例
7、简述 静态测试、动态测试、黑盒测试、白盒测试、α测试 、β测试
静态测试:不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程
动态测试:实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检测程序的正确性、可靠性、有效性、并分析系统运行效率和健壮性等性能
黑盒测试:一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否得以实现,把北侧程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性
白盒测试:根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。
α测:由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成
β测试: 软件的多个用户在一个或多个用户的实际使用环境下进行的测试,开发者通常不在测试现场,Beta测试不能由程序员或测试员完成
8、软件测试分为几个阶段,各阶段的测试策略和要求是什么?
和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段:
- 单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
- 集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
- 系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
- 验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。
单元测试测试策略:
自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。
自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。
孤立单元测试策略:最好的单元测试策略。
集成测试的测试策略:
大爆炸集成:适应于一个维护型项目或被测试系统较小
自顶向下集成:适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
自底向上集成:适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
基于进度的集成
优点:具有较高的并行度;能够有效缩短项目的开发进度。
缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。
系统测试的测试策略:
数据和数据库完整性测试;功能测试;用户界面测试;性能评测;负载测试;强度测试;容量测试;安全性和访问控制测试;故障转移和恢复测试;配置测试;安装测试;加密测试;可用性测试;版本验证测试;文档测试
9、测试人员在软件开发过程中的任务是什么?
1、尽可能早的找出系统中的Bug;
2、避免软件开发过程中缺陷的出现;
3、衡量软件的品质,保证系统的质量;
4、关注用户的需求,并保证系统符合用户需求。
总的目标是:确保软件的质量。
10、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
一条Bug记录最基本应包含:
bug编号; bug严重级别,优先级; bug产生的模块; 首先要有bug摘要,阐述bug大体的内容; bug对应的版本; bug详细现象描述,包括一些截图、录像....等等; bug出现时的测试环境,产生的条件即对应操作步骤; 高质量的Bug记录:
1) 通用UI要统一、准确 缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。 2) 尽量使用业界惯用的表达术语和表达方法 使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。 3) 每条缺陷报告只包括一个缺陷 每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。 4) 不可重现的缺陷也要报告 首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。 5) 明确指明缺陷类型 根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。 6) 明确指明缺陷严重等级和优先等级 时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。 7) 描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置 描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。 8) 短行之间使用自动数字序号,使用相同的字体、字号、行间距 短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。 9) 每一个步骤尽量只记录一个操作 保证简洁、条理井然,容易重复操作步骤。 10) 确认步骤完整,准确,简短 保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。 11) 根据缺陷,可选择是否进行图象捕捉 为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。 附加必要的特殊文档和个人建议和注解 如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。 12) 检查拼写和语法缺陷 在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。 13) 尽量使用短语和短句,避免复杂句型句式 软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。 以上概括了报告测试缺陷的规范要求,随着软件的测试要求不同,测试者经过长期测试,积累了相应的测试经验,将会逐渐养成良好的专业习惯,不断补充新的规范书写要求。此外,经常阅读、学习其他测试工程师的测试缺陷报告,结合自己以前的测试缺陷报告进行对比和思考,可以不断提高技巧。 14) 缺陷描述内容 缺陷描述的内容可以包含缺陷操作步骤,实际结果和期望结果。操作步骤可以方便开发人员再现缺陷进行修正,有些开发的再现缺陷能力很差,虽然他明白你所指的缺陷,但就是无法再现特别是对系统不熟悉的新加入开发人员,介绍步骤可以方便他们再现。实际结果可以让开发明白错误是什么,期望结果可以让开发了解正确的结果应该是如何。
11、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!
黑盒测试
优点:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关; 从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。
缺点:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。
白盒测试
优点:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐 藏的问题。
缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。
12、如何测试一个纸杯?
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:杯子有没有毒或细菌
可靠性:杯子从不同高度落下的损坏程度
可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
13、测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
软件测试计划是指导测试过程的纲领性文件:
- 领导能够根据测试计划进行宏观调控,进行相应资源配置等
- 测试人员能够了解整个项目测试情况以及项目测试不同阶段的所要进行的工作等
- 便于其他人员了解测试人员的工作内容,进行有关配合工作
包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
测试计划编写6要素(5W1H):
-
why——为什么要进行这些测试;
-
what—测试哪些方面,不同阶段的工作内容;
-
when—测试不同阶段的起止时间;
-
where—相应文档,缺陷的存放位置,测试环境等;
-
who—项目有关人员组成,安排哪些测试人员进行测试;
-
how—如何去做,使用哪些测试工具以及测试方法进行测试
测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。
14、详细的描述一个测试活动完整的过程
(以瀑布模型为例)
项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪
开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。
测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。
测试用例完成后,测试和开发需要进行评审。
测试人员搭建环境
开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。
开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。
重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。
如果有客户反馈的问题,需要测试人员协助重现并重新测试。
15、BUG管理工具的跟踪过程(用BugZilla为例子)
测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员
开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配,开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。
如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。
测试人员在新版本中测试,如果发现问题依然存在,则拒绝验证;如果已经修复,则关闭BUG。
16、软件产品质量特性是什么?
功能性:适应性、准确性、互操作性、依从性、安全性。
可靠性:成熟性、容错性、易恢复性。
可使用性:易理解性、易学习性、易操作性。
效率:时间特性、资源特性。
可维护性:易分析性、易变更性、稳定性、易测试性。
可移植性: 适应性、易安装性、遵循性、易替换性
17、一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
- 300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。
- 300个用户在一个客户端上,需要更大的带宽。
- IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
- 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。
18、试述软件的概念和特点?软件复用的含义?构件包括哪些?
软件是计算机系统中与硬件相互依存的另一部分,与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。
软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
可以被复用的软件成分一般称作可复用构件
6、软件生存周期及其模型是什么?
软件生存周期(Software life cycle)又称为软件生命周期,生存期。是指从形成开发软件概念起,所开发的软件使用以后,直到失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括,计划、开发、运行(维护)三个时期,每个时期又划分为若干个阶段,每个阶段有明确的任务。
周期模型(典型的几种):
- 瀑布模型
- 快速原型模型:快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。
- 迭代模型:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。在某种程度上,开发迭代是一次 完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段都可以细分为迭代。每一次 的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。
生命周期阶段:
- 软件计划与可行性分析
- 需求分析
- 软件设计
- 编码
- 软件测试
- 运行与维护
19、什么是软件测试?目的和原则?
在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程
软件测试的目的:
- 测试是程序的执行过程,目的在于发现错误
- 一个成功的测试用例在于发现至今未发现的错误
- 一个成功测试是发现了至今未发现的错误的测试
- 确保产品完成了她所承受或公布的功能,并且用户可以访问到的功能都有明确的书面说明
- 确保产品满足性能和效率的要求
- 确保产品是健壮的和适应用户环境的
软件测试的原则:
- 测试用例中一个必须部分是对预期输出或接过进行定义
- 程序员应避免测试自己编写的程序
- 编写软件的组织不应当测试自己编写的软件
- 应当彻底检查每个测试的执行结果
- 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
- 检擦程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
- 应避免测试用例用后即弃,除非软件本身就是个一次性的软件
- 计划测试工作时不应默许假定不会发现错误
- 程序某部分存在更多错误的可能性,与该部分已经发现错误的数量成正比
- 软件测试是一项极富创造性,极具智力的挑战性的工作
20、软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
SQA由一套软件工程过程和方法组成,以保证(软件的)质量。SQA贯穿整个软件开发过程,(它)应包括需求文档评审、代码控制、代码评审、变更管理、配置管理、版本管理和软件测试。
软件质量保证(SQA-Software Quality Assurance)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些将使软件项目满足机构方针的要求。
27、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?
尽量面对面的沟通,其次是能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。
运用一些测试管理工具如TestDirector进行管理也是较有效的方法,同时要注意在TestDirector中对BUG有准确的描述。
在团队中建立测试人员与开发人员良好沟通中注意以下几点:
一真诚、二是团队精神、三是在专业上有共同语言、四是要对事不对人,工作至上
当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。
28、你对测试最大的兴趣在哪里?为什么?
回答这个面试题,没有固定统一的答案,但可能是许多企业都会问到的。提供以下答案供考:
最大的兴趣,感觉这是一个有挑战性的工作;
测试是一个经验行业,工作越久越能感觉到做好测试的难度和乐趣
通过自己的工作,能使软件产品越来越完善,从中体会到乐趣
回答此类问题注意以下几个方面:
尽可能的切合招聘企业的技术路线来表达你的兴趣,例如该企业是数据库应用的企业,那么表示你的兴趣在数据库的测试,并且希望通过测试提升自己的数据库掌握能力。
表明你做测试的目的是为了提升能力,也是为了更好的做好测试;提升能力不是为了以后转开发或其他的,除非用人企业有这样的安排。
不要过多的表达你的兴趣在招聘企业的范畴这外。比如招聘企业是做财务软件的,可是你表现出来的是对游戏软件的兴趣;或招聘是做JAVA开发的,而你的兴趣是在C类语言程序的开发。
29、你自认为测试的优势在哪里?
该面试也没有固定不变的答案,但可参考以下几点,并结合自身特点:
有韧性、有耐心、做事有条理性、喜欢面对挑战、有信心做好每一件事情、较强的沟通能力、从以前的经理处都得到了很好的评价表明我做的很好
33、简述你在以前的工作中做过哪些事情,比较熟悉什么。参考答案如下。
我过去的主要工作是系统测试和自动化测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。
在测试中,我感觉对用户需求的完全准确的理解非常重要。另外,就是对BUG的管理,要以需求为依据,并不是所有BUG均需要修改。
测试工作需要耐心和细致,因为在新版本中,虽然多数原来发现的BUG得到了修复,但原来正确的功能也可能变得不正确。因此要注重迭代测试和回归测试。
34、在C/C++中static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用
35、引用与指针有什么区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。
36、Internet采用哪种网络协议?该协议的主要层次结构?Internet物理地址和IP地址转换采用什么协议?
TCP/IP协议主要层次结构为: 应用层/传输层/网络层/数链路层。
ARP (Address Resolution Protocol)(地据址解析协议)
37、说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试;
自顶向下集成
优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。
缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。
适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。
2、自底向上集成
优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。
缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。
38、软件验收测试包括正式验收测试、alpha测试、beta测试三种测试。
39、系统测试的策略有很多种的,有性能测试、负载测试、强度测试、易用性测试、安全测试、配置测试、安装测试、文档测试、故障恢复测试、用户界面测试、恢复测试、分布测试、可用性测试。
40、设计系统测试计划需要参考的项目文档有软件测试计划、软件需求工件、和迭代计划
41.通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是:
§ 分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
§ 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
§ 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。 § 把因果图转换成判定表。
§ 把判定表的每一列拿出来作为依据,设计测试用例。
43、请说出这些测试最好由那些人员完成,测试的是什么?
代码、函数级测试一般由白盒测试人员完成,他们针对每段代码或函数进行正确性检验,检查其是否正确的实现了规定的功能。
模块、组件级测试主要依据是程序结构设计测试模块间的集成和调用关系,一般由测试人员完成。
系统测试在于模块测试与单元测试的基础上进行测试。了解系统功能与性能,根据测试用例进行全面的测试。
44、 设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?
设计测试用例时需要注意的是,除了对整体流程及功能注意外,还要注意强度测试、性能测试、压力测试、边界值测试、稳定性测试、安全性测试等多方面。(测试用例需要考虑的四个基本要素是输入、输出、操作和测试环境;另外,测试用例需要考虑的是测试类型(功能、性能、安全……),这部分可以参照TP做答。此外,还需要考虑用例的重要性和优先级)
45、 在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?
单字节,如A;双字节, AA、我我;特殊字符 /‘。‘;、=-等;保留字,如com;文件格式为8.3格式的;文件名格式为非8.3格式的;/,\,*等九个特殊字符。
46、假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?
特殊字符,如10个*或¥;英文字母,如ABCDefghik;小于十个字符,如123;大于十个字符,如11111111111;数字和其他混合,如123AAAAAAA;空字符;保留字符
47.软件测试项目从什么时候开始,?为什么?
软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.
48、什么是回归测试?
回归测试: (regression testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。
49.单元测试、集成测试、系统测试的侧重点是什么?
单元测试针对的是软件设计的最小单元--程序模块(面向过程中是函数、过程;面向对象中是类。),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错.一般有两个步骤:人工静态检查\动态执行跟踪
集成测试针对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能.
系统测试针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试.
51.一个测试工程师应具备那些素质?
1、责任心2、沟通能力3、团队合作精神4、耐心、细心、信心5、时时保持怀疑态度,并且有缺陷预防的意识6、具备一定的编程经验
53:你所了解的的软件测试类型都有哪些,简单介绍一下。
按测试策略分类:1、静态与动态测试2、黑盒与白盒测试 3、手工和自动测试 4、冒烟测试 5、回归测试;
按测试阶段分类:单元测试、集成测试、系统测试;
其他常见测试方法:1、功能测试 2、性能测试 3、压力测试 4、负载测试 5、易用性测试 6、安装测试 7、界面测试 8、配置测试 9、文档测试 10、兼容性测试 11、安全性测试 12、恢复测试
54:你认为做好测试计划工作的关键是什么?
明确测试的目标,增强测试计划的实用性
编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
坚持“5W”规则,明确内容与过程
“5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
采用评审和更新机制,保证测试计划满足实际需求
测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
分别创建测试计划与测试详细规格、测试用例
应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
55:您认为做好测试用例设计工作的关键是什么?
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
56:你的测试职业发展目标是什么?
测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,不断的更新自己改正自己,做好测试任务。
57:测试结束的标准是什么?
从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。
如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。
59、一套完整的测试应该由哪些阶段组成?
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试
61、您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
开发过程---需求调研(需求人员)、需求分析(需求人员)、概要设计(设计人员)、详细设计(设计人员)、编码(开发人员)
测试过程---需求评审、系统测试设计、概要设计评审、集成测试设计、详细设计评审、单元测试设计、测试执行
测试工作的整个过程都做过,擅长做测试设计
过程决定质量,软件的过程改进正是为了提高软件的质量,将过往的种种经验教训积累起来。
62、测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?
代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等.
可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果.
可再现性:即对同样的测试用例,系统的执行结果应当是相同的。
方法有等价类、边界值、因果图、状态图、正交法、大纲法
63、面向对象的测试用例设计有几种方法?如何实现?
给类中的每个构造函数设计一组测试用例
组合类中的类变量、实例变量
组合类中的各种方法
根据前置条件和后置条件设计测试用例
根据代码设计测试用例
64、LoadRunner分为哪三个模块?请简述各模块的主要功能。
Virtual User Generator:用于录制脚步
Mercury LoadRunner Controller:用于创建、运行和监控场景
Mercury LoadRunner Analysis:用于分析测试结果
65、你对测试最大的兴趣在哪里?为什么?
最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。
66、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
测试类型有:功能测试,性能测试,界面测试。
功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试
67、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能否输出正确的结果?3、是否有数据结构错误或外部信息(例如数据文件)访问错误?4、性能上是否能够满足要求?5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能性能如同用户所合理期待的那样。
68、当开发人员说不是BUG时,你如何应付?
开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
69、为什么要在一个团队中开展软件测试工作?
因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
71、一份测试计划应该包括哪些内容?
背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。
72、针对于软件的行业背景,你如何理解软件的业务?
阅读用户手册了解软件的功能和操作流程;看一些业务的专业书籍补充业务知识;如果有用户实际的数据,可以拿实际的数据进行参考;参考以前的用例和BUG报告;在使用软件的过程中多思考;多与产品经理交流。
74、如何定位测试用例的作用?
组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认
76、什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。
主要验证软件产品在不同版本之间的兼容性。包括向下兼容和交错兼容,向下兼容是测试软件新版本保留它早期版本功能的情况,交错兼容是验证共同存在的两个相关但不相同的产品之间的兼容性。
77、对某软件进行测试,发现在WIN98上运行得很慢,怎么判别是该软件存在问题还是其软硬件运行环境存在问题?
看软件的运行环境要求。如果符合要求则是程序存在问题,若不符合要求则是硬件系统存在问题
78、需求测试的注意事项有哪些?
是否使用了公司的模板、文档内容是否符合规范、所有的需求是分级是否清析适当、所有的需求是否具有一致性、需求是否可行(即,该需求组合有解决方案)、需求可否用己知的约束来实现、需求是否足够(即,可以把它送到一个规范的开发组织,并有一个生产出所需要产品的合理的可能性)、所有的其它需求是交叉引用是否正确、用户描述是否清楚、是否用客户的语言来描述需求、每个需求描述是否清楚没有岐义,可以移交给一个独立的组去实现时也能理解、是否所有的需求都是可验证的、是否每条需求都具有独立性,即使发生了变化也不会影响其它需求、性能指标是否明确、非功能性需求是否得到充分表现、是否完整列出适用的标准或协议、标准和协议之间是否存在冲突
81、主键、外键的作用,索引的优点与不足?
答:主键:是表中的唯一标示键。作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。
外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。
索引的优点: 1、通过创建唯一性的索引,可以保证表中数据的唯一性; 2、加速数据的检索速度; 3、加快表与表之间的连接; 4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间; 5、在查询的过程中使用优化隐藏器,提供系统性能。
缺点: 1、创建索引需要时间,且随着数据量的增加而增加; 2、索引需要占用物理空间;
3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。
84、性能测试的流程?
1.测试需求分析2.测试计划制定与评审3.测试用例设计与开发4.测试执行与监控5.分析测试结果6.编写性能测试报告7.测试经验总结
88、简述bug的生命周期?
1, 有效地记录BUG 2, 使用BUG模板 3, 评价BUG优先级和严重性 4, BUG的生命 5, 维护BUG数据库
89、缺陷记录应包含的内容?
缺陷标识、缺陷类型、缺陷严重程度、缺陷产生可能性、缺陷优先级、缺陷状态、缺陷起源、缺陷来源、缺陷原因;
91 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
易用性测试-界面的友好性,操作方便性等。
功能测试-系统中功能性需求的满足
安全性测试-系统是否存在安全隐患和漏洞
性能测试-系统在大并发下的响应速度和健壮性
93、您认为做好测试计划工作的关键是什么?
了解项目或系统的业务需求
和项目经理协调好,了解项目的进度计划安排情况
95您认为做好测试用例设计工作的关键是什么?
对业务和软件需求非常清楚,可以根据需求不同选择不同的测试用例设计
96、.您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。
评审计划->预审->评审;
评审内容主要是测试用例对软件需求的覆盖程度,对于相关边界是否考虑,是否针对复杂流程准备多套测试数据,是否有专门针对非功能性需求的测试。
98.您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
关键是测试脚本的录制,测试时候测试环境的干净。
100、.您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
CQ,也可以使用BugFree等免费工具。
101、.您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?
将先进的经验或思想固化到过程中,通过过程改进和能力提高来改进软件质量