软件测试笔试题

1 软件测试遵循的原则: 1、所有的测试都应追溯到用户需求。因为软件的目的是使用户完成预定的任务,满足其需求,而软件测试揭示软件的缺陷和错误,一旦修正这些错误

1 软件测试遵循的原则:

1、所有的测试都应追溯到用户需求。因为软件的目的是使用户完成预定的任务,满足其需求,而软件测试揭示软件的缺陷和错误,一旦修正这些错误就能更好地满足用户需求。
2、应尽早地和不断地进行软件测试。由于软件的复杂性和抽象性,在软件生命周期各阶段都可能产生错误,所以不应把软件测试仅仅看作是软件开发的一个独立阶段,而应当把它贯穿到软件开发的各个阶段去。在需求分析和设计阶段就应开始进行测试工作,编写相应的测试计划及测试设计文档,同时坚持在开发各阶段进行技术评审和验证,这样才能尽早发现和预防错误,杜绝某些缺陷和错误,提高软件质量,测试工作进行得越早,越有利于提高软件的质量,这是预防性测试的基本原则。
3、在有限的时间和资源下进行完全测试,找出软件所有的错误和缺陷是不可能的,软件测试不能无限进行下去,应适时终止。因为,测试输入量大、输出结果多、路径组合太多,用有限的资源来达到完全测试是不现实的。
4、测试只能证明软件存在错误而不能证明软件没有错误,测试是无法显示潜在的错误和缺陷,继续进一步错误可能还会找到其它错误和缺陷。
5、充分关注测试中的集群现象。在测试的程序段中,若发现的错误数目多,则残存在其中的错误也越多,因此应当花较多的时间和代价测试那些具有更多错误数目的程序模块。
6、程序员应避免检查自己的程序。考虑到人们的心理因素,自己揭露自己程序中的错误是件不愉快的事,自己不愿意否认自己的工作;另一方面,由于思维定势,自己难以发现自己的错误。因此,测试一般由独立的测试部门或第三方机构进行。
7、尽量避免测试的随意性。软件测试是有组织、有计划、有步骤的活动,要严格按照测试计划进行,要避免测试的随意性。
 为了发现更多的错误让系统更完善,设计测试用例时不但要选择合理的输入数据作为测试用例,而且要选择不合理的输入数据作为测试用例,使得系统能应付各种情况。

  测试过程不但要求软件开发人员参与,而且一般要求有专门的测试人员进行测试,并且还要求用户参与,特别是验收测试阶段,用户是主要的参与者。

编写测试计划的目的是:()

A、使测试工作顺利进行 B、使项目参与人员沟通更舒畅 C、使测试工作更加系统化

D、软件工程以及软件过程的需要 E、软件过程规范化的要求 F、控制软件质量

正确答案:A,B,C

3 下列不是在软件故障插入测试技术中关注的方面是___B___。

A.故障类型

B.故障对系统的破坏程度

C.插入故障的方法

D.目标系统

4 在oracle数据库中,关于索引描述正确的是

  • 需要对大数据类型创建索引
  • 对于大表,索引能明显提高查询效率
  • 在数据表上创建唯一约束,会自动生成唯一索引
  • 我们最常用到的是B-Tree索引
正确答案:B C D

 

6 下列测试用例设计方法可以用来为正向测试设计的是_C_____。

A.错误猜测法

B.边界值分析

C.状态迁移测试

D.内部边界分析

7 你觉得自动化测试有什么意义,都需要做些什么

参考回答:

自动化测试的意义在于

1、可以对程序的新版本自动执行回归测试

2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,

3、能够更好的利用资源,节省时间和人力

执行自动化测试之前首先判断这个项目适不适合推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估

 8 请说一下手动测试与自动化测试的优缺点

参考回答:

手工测试缺点:

1、重复的手工回归测试,代价昂贵、容易出错。

2、依赖于软件测试人员的能力。

手工测试优点:

1、测试人员具有经验和对错误的猜测能力。

2、测试人员具有审美能力和心理体验。

3、测试人员具有是非判断和逻辑推理能力。

自动化测试的优点:

1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。

2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。

3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。

4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。

6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

自动化测试的缺点:

1、不能取代手工测试

2、手工测试比自动测试发现的缺陷更多

3、对测试质量的依赖性极大

4、测试自动化不能提高有效性

5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

6、工具本身并无想像力

9.下列关于事务的叙述,正确的是( C)。


A.确保持久性是数据库系统中事务管理部件的责任
B.串行地执行事务不是解决事务并发执行问题的一种方式
C.一旦中止事务造成的变更被撤销,则称事务已回滚
D.如果每个事务都保证一致性和原子性,即使它们并发执行,也有可能导致不一致状态

保证原子性是数据管理系统中事务管理部件的责任。保证一致性是对该事务编码的应用程序员的责任,完整性约束的自动检查有助于保持一致性。保证持久性是数据库系统中恢复管理部件的责任,因此选项A)是错误的。对于选项B),解决事务并发执行问题的一种方法是串行地执行事务,但这样性能较低。事务并发执行可以显著改善性能,因此使用并发控制部件来控制事务的并发执行,因此选项B)也是错误的。对于选项D),即使每个事物都能确保一致性和原子性,但如果几个事务并发执行,它们的操作可能会以人们所不希望的某种方式交叉执行,这也会导致不一致的状态,因此选项D)也是错误的。

10 若事务T对数据对象A加上S锁,则(      )。

  • 事务T可以读A和修改A,其它事务只能再对A加S锁,而不能加X 锁。
  • 事务T可以读A但不能修改A,其它事务能对A加S锁和X锁。
  • 事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X 锁。
  • 事务T可以读A和修改A,其它事务能对A加S锁和X锁。
正确答案:C
1.共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁。获准共享锁的事务只能读数据,不能修改数据。
排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
共享锁(S锁):读锁,可查看但无法修改和删除,已加该锁则其他事务只能加S锁;
排他锁(X锁):写锁、独占锁,可写可读,已加该锁则其他事务不能再加任何类型的锁;

11 判断输入是否是中文:

def is_Chinese(word):
  for ch in word:
    if '\u4e00' <= ch <= '\u9fff':
      return True
  return False
print(is_Chinese("中文"))

 12 事务的特性  https://blog.csdn.net/u010960184/article/details/82557978

13 存储管理中的抖动现象

在虚拟存储dao的页式存储的换页过程源中,如bai果选用了一个不合适的调度算法du,就会出zhi现这样的现象:dao刚被淘汰了的页面又立即要用,又要把它调入进来,而调入不久又被调出,调出不久再次被调入,如此反复,使得调度非常频繁,以至于大部分时间都花费在来回调度上。这种现象叫“抖动”。一个好的调度算法应减少和避免抖动现象

14 OSI介绍

https://www.cnblogs.com/qishui/p/5428938.html

15 delete误操作的回滚

      操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时。这里先说明下因为Delete 操作的恢复方法:主要还是通过binlog来进行恢复,前提是binlog_format必须是Row格式,否则只能通过备份来恢复数据了。

16 在C语言中,关于静态变量的说法,正确的有()

  • 静态变量和常量的作用相同
  • 函数中的静态变量,在函数退出后不被释放
  • 静态变量只可以赋值一次,赋值后则不能改变
  • 静态全局变量的作用域为一个程序的所有源文件
 
1、静态变量在内存的静态存储区,静态数据一直占有着该存储区单元直到程序结束;
2、静态局部变量只声明一次,一旦申请内存成功,不再接受重复申请;
3、静态局部变量的作用域与一般局部变量一样,二者区别在于以上两点:一般局部变量在函数调用结束后释放变量占用的存储单元,而静态局部变量不释放。
注意:由于静态局部变量在内存中存在的时间较长,即占用内存时间较长,故应尽量少用static来修饰变量(有刚需除外)。

 链接:https://www.nowcoder.com/questionTerminal/e46723f3a2f14f7b98ec46d12090cf04?orderByHotValue=2&done=0&pos=13&onlyReference=false
来源:牛客网

A.静态变量与常量作用不同:
static:改变生命周期和限制作用域
    (1)作用于变量
    (2)作用与函数
const:"只读"
     (1)定义常量
     (2)修饰指针
     (3)修饰函数中的参数和返回值
B.函数中的静态变量:用static声明,使变量成为静态局部变量,编译时就为变量分配内存,直到程序退出时释放内存,在函数结束后不会被释放
C.静态变量只进行一次初始化,但是它的值是可以改变的,也就是说可以被赋值
D.static静态全局变量只能在定义它的文件中使用
所以正确答案为B

17

 
  • 空类编译器会将sizeof()的值变为1;
  • 类的大小只与非静态成员变量和虚函数的大小有关,而与其他普通函数成员无关,与构造函数析构函数也无关,与静态成员函数与静态成员变量也无关。类中含虚函数,编译器会自动生成一个虚函数表,类需要一个指针来指向该虚表,因此类的sizeof()为4;
这里,普通函数不算;
只计算非static数据成员,这里为4;
还有就是虚函数,这里也为4;需要指出,这里的4是因为存在指向虚函数表的指针(也就是,若存在多个虚函数,也为4)
所以,总的为8
普通成员函数不算到字节里面,虚函数有一个指向虚函数列表的指针,无论有多少个虚函数都是占用一个字节的大小。

18 问题:Static的理解

关于static变量,请选择下面所有说法正确的内容:
A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
D、静态全局变量过大,可那会导致堆栈溢出。 
答案与分析:
对于A,B:根据本篇概述部分的说明b),我们知道,A,B都是正确的。
对于C:根据本篇概述部分的说明a),我们知道,C是正确的(所谓的函数重入问题,下面会详细阐述)。
对于D:静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出,D是错误的。
因此,答案是A、B、C。
问题:不可重入函数
曾经设计过如下一个函数,在代码检视的时候被提醒有bug,因为这个函数是不可重入的,为什么?
  1. unsigned int sum_int( unsigned int base )
  2. {
  3. unsigned int index;
  4. static unsigned int sum = 0; // 注意,是static类型的。
  5. for (index = 1; index <= base; index++)
  6. {
  7. sum += index;
  8. }
  9. return sum;
  10. }

答案与分析:
所谓的函数是可重入的(也可以说是可预测的),即:只要输入数据相同就应产生相同的输出。
这个函数之所以是不可预测的,就是因为函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数。因此如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量,这种函数中的static变量,使用原则是,能不用尽量不用。
将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto 类型的变量,函数即变为一个可重入的函数。
当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

19 sql 根据职称分别统计男女各多少人

select 职称,baisum(case when sex='男' then 1 else 0 end) as 男教师du数zhi,sum(case when sex='女' then 1 else 0 end) as 女教师数 from 教师表
group by 职称dao

20 对学号和课程创建一个索引

create unique index grade_id_c_ind on grade(学号,课程编号)

21 

22 一个缺陷报告必须包含以下核心要素:

1)测试环境zhi
2)软件版本
3)缺陷标题(问题描述)
4)测试步骤
5)期望结果
6)实际结果
7)详细日志及界面截图

23 1nosql数据库比较 

https://blog.csdn.net/sunzhiwei_/article/details/81566984

24 实时查看文件的更新

在linux系统里输入命令tail -f /dzqc/1.txt

25 python 对象引用计数增加和减少的情况

https://blog.csdn.net/weixin_30486037/article/details/96596289

26 windows下查看mac地址

运行“ipconfig /all”命令后,即可看到电脑网卡的相关信息,在下面找到一项“物理地址”后面的数字串就是此电脑的MAC地址了

 27 分辨服务器是linux系统还是Windows系统

通过ping命令测试,查看返回的TTL值。TTL=128,这是WINNT/2K/XP。 TTL=32,这是WIN95/98/ME,TTL=256,这是UNIX。 TTL=64,这是LINUX。

 ttl:TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。

28 top k问题

 

 

29 3个实用命令帮你详细定位网络排查问题点 

https://www.bilibili.com/read/cv7509221

ping traceroute,route,ipconfig

 

 

 

 

 

 

 

您可能有感兴趣的文章
软件测试(理论基础)

什么是软件测试,软件测试究竟是做什么的

软件测试基础知识整理

软件测试概念及分类整理汇总

软件测试步骤详解