1:组件测试:也叫单元测试
组件测试在实际的测试过程中所对应的阶段是我们的单元测试阶段,组件测试是最低层的一个级别的测试。
单元测试的目的
- 验证代码是与设计相符合的
- 发现设计和需求中存在的错误
- 发现在编码过程中引入的错误
单元测试的维度:功能测试和非功能测试
功能方面主要是内部的逻辑结构,验证程序内部逻辑结构是否满足设计要求,当然除此之外还包括内部数据结构、独立路径集等方面的内容。非功能测试主要是其他逻辑设计之外的内容,主要包括代码性能、内存泄漏、代码健壮性、代码可靠性等。
单元测试需要一个环境,也就是如果要测试一个函数或类,它不可能独立运行,它需要存在一定的条件下才能运行,在这个环境中会涉及两个重要的组成部分:粧模块和驱动模块。
粧模块(Stub)是指模拟被测试的模块所调用的模块,而不是软件产品的组成部分。主要模块作为驱动模块,与之直接相连的模块用桩模块代替。
驱动单元(Driver):所测函数的主程序,它接收测试数据,并把数据传送给所测试单元,最后再输出实测结果。
当然如果每测试一个单元模块都需要写这么多桩模块和驱动模块,那么工作效率就会很低,所以现在有很多的一些专业的工具来实现,如Gtest、Junit等。
2:集成测试:灰盒测试
集成测试,也叫组装测试或联合测试。集成测试是在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
集成测试(也叫组装测试、联合测试)是单元测试的逻辑扩展。它最简单的形式是,把两个已经测试过的单元组合成一个组件,测试这些组件之间接口数据传递是否有问题。
在测试过程中,集成测试的层次包括两种:一是系统内部集成;二是系统间的集成。
系统内部集成是指在整个系统内部功能模块与功能模块集成,一个系统可能由很多不同的功能模块组成,对于这种在一个系统内部将功能与功能进行集成的测试称为系统内的集成。
另一类集成是系统间的集成,系统间的集成是指两个独立的系统之间,通过某种方式进行传递数据。
集成测试的策略有很多种,主要包括自底向上集成测试、自顶向下集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。
3:系统测试
系统测试(System Testing)是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试活动。系统可能包含硬件,但不一定包含硬件,可能就是纯软件。
在系统测试概念中详细地描述了三个维度的内容:系统测试对象、系统测试是一个过程、系统应该有一个流程。
系统测试的对象
系统测试的对象是软硬件集合在一起的系统,不应是独立的软件与硬件环境。当然具体操作、执行时可根据实际情况来组织。也就是说,我们通常说的系统测试不一定只有软件,还可能包含硬件、电源和结构等,手机产品就是典型的这类系统,不仅有软件,还有硬件、电源、结构等。验证时应尽可能模拟实际的运行环境与条件。在测试过程中系统测试应该尽量模拟实际的运行环境,这样可以尽最大可能保证系统上线后不出问题。
系统测试是一个过程
为了验证系统是否满足客户需求,需要一系列的测试活动来保证,即系统测试并不是一个简单的步骤,所以为了让系统测试更全面,就需要对系统测试的活动进行管理。
系统测试应有一个流程
为了更好地管理这些活动,我们制定了一个标准的测试流程,包括五个步骤:计划与控制、分析与设计、实现与执行、评估与报告、结束活动。
在系统测试过程中有一个很重要的环节就是测试设计,这也是我们常说的系统测试方法,系统测试方法即测试用例设计方法,常见的系统测试用例设计方法包括:等价类、边界值、因果图、判定表、正交试验、场景分析法、状态迁移等。
系统测试的类型包括:功能测试、性能测试、兼容性测试、易用性测试、安全性测试等,系统测试可以分为多种类型取决于软件质量模型。
系统测试的目的
(1)通过与系统的需求定义做比较,发现软件与系统定义不符合或与之矛盾的地方。
(2)系统测试的测试用例应根据需求分析说明书来设计,并在实际使用环境下运行。
4:验收测试
验收测试是软件发布之前最后一个测试阶段,是在单元测试、集成测试和系统测试完成之后的一个测试阶段,也称之为交付测试。
验收测试是向最终用户表明系统能够像预定要求那样正确地工作,验收测试的策略通常包括四种:正式验收、非正式验收、Alpha测试和Beta测试。
正式验收测试是一项管理严格的过程,它通常是系统测试的延续。计划和设计这些测试的周密和详细程度不亚于系统测试。选择的测试用例应该是系统测试中所执行测试用例的子集。不要偏离所选择的测试用例方向,这一点很重要。在很多组织中,正式验收测试是完全自动执行的。
非正式验收测试执行测试过程的限定不像正式验收测试中那样严格。在此测试中,确定并记录要研究的功能和业务任务,但没有可以遵循的特定测试用例。测试内容由各测试员决定。这种验收测试方法不像正式验收测试那样组织有序,而且更为主观。
Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。Alpha测试的目的是评价软件产品的功能、局域化、可使用性、可靠性、性能和支持等特性是否满足用户要求。
Beta测试是一种验收测试。它与Alpha测试有很多相似之处,都是关注产品功能、性能、可靠性等特性,但与Alpha测试也有一些不同之处,如Beta测试是由最终用户或潜在用户来执行。
软件测试的过程
测试过程是整个测试活动中一个至关重要的环节,对于一家企业来说,如果没有一个很好的测试流程规范,那么测试的质量就很难被控制,标准的测试流程包括五大阶段:计划与控制、分析与设计、实现与执行、评估与报告和结束活动。在实际测试过程中分为测试计划、测试方案、测试用例、测试执行和测试报告五个阶段。
过程决定质量,软件测试过程的重要性我们不用过多地去描述,标准的软件测试流程划分为五大阶段:计划与控制、分析与设计、实现与执行、评估与报告和结束活动
课上内容2:stat命令的实现-mysate
学习使用stat(1),并用C语言实现
提交学习stat(1)的截图
man -k ,grep -r的使用
伪代码
产品代码 mystate.c,提交码云链接
测试代码,mystat 与stat(1)对比,提交截图
首先,利用 man命令学习stat(1),man 1 stat
,结果如下图:
通过学习理解到,stat命令主要用于显示文件或文件系统的详细信息,
-L:显示符号链接所指向文件的信息
-f:显示文件所在文件系统的信息
-t:以简洁方式输出信息
-c:以特定格式输出文件的某些信息
具体代码在这里
对比一下二者:mystat 与stat
课下测试IPC,
实验要求:研究Linux下IPC机制:原理,优缺点,每种机制至少给一个示例,提交研究博客的链接
共享内存
管道
FIFO
信号
消息队列
简单介绍:IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。
共享内存原理:共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的地址空间(这里的地址空间具体是哪个地方?)中。其他进程可以将同一段共享内存连接到自己的地址空间中。
共享内存优缺点:1.方便使用文件共享 2.方便使用Messenger 3.可以在onTransact方法中 进行权限验证
实现代码:生成共享内存
实现代码:获取共享内存
管道
管道原理:管道实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另一进程就可以从管道的另一端将其读取出来。
管道优缺点:管道是由内核管理的一个缓冲区,一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。
实现代码:向管道文件中写数据
实现代码:从管道文件中读数据
实验截图:
FIFO
FIFO原理:管道(FIFO)是一种特殊类型的文件,它在系统中以文件形式存在。这样克服了管道的弊端,他可以允许没有亲缘关系的进程间通信。
FIFO优缺点:方便一个进程向文件中写数据,方便一个进程将读出数据并丢弃向命名管道文件中写数据
实现代码:向命名管道文件中写数据
实现代码:从命名管道文件中读数据并丢弃
实验截图:
信号
信号原理:信号机制是unix系统中最为古老的进程之间的通信机制,用于一个或几个进程之间传递异步信号。
信号缺点:对于命名管道FIFO来说,IO操作和普通管道IO操作基本一样.
实现代码:信号
实验截图:
消息队列
消息队列原理:消息队列是内核地址空间中的内部链表,通过linux内核在各个进程直接传递内容,消息顺序地发送到消息队列中,并以几种不同的方式从队列中获得,每个消息队列可以用IPC标识符唯一地进行识别。内核中的消息队列是通过IPC的标识符来区别,不同的消息队列直接是相互独立的。每个消息队列中的消息。
消息队列优缺点:消息队列克服了信号承载信息量少,管道只能承载无格式字符流。命名管道相比,消息队列的优势在于消息队列也可以独立于发送和接收进程而存在,从而消除了在同步命名管道的打开和关闭时可能产生的困难。2、同时通过发送消息还可以避免命名管道的同步和阻塞问题,不需要由进程自己来提供同步方法。
实现代码:向进程发送消息
实现代码:一个进程接收消息
实验截图: