一、C语言基础1.1指针数据类型*指针名intnum;int*p;直接使用指针变量p表示使用存储单元的地址值;p=#如果不给p赋地址值而直接使用*p=1则会报错,因为*p就是在使用p存储的地址值。如果*前面没有数据类型表示使用指针指向的内存空间的实际值。num=1;*p=1;1.2结构体指针structCarc1;structCar*p;p=&c1;对其赋值的语句:c1.num=1;//p-num=1;//(*p).num=1;(三者作用相等)1.3头文件stdio.h输入输出;string.h字符串处理——字符串赋值必须使用此方法;strlen(a)取长,不计算\0;strcpy(a,b)复制;strncpy(a,b,n)精确复制,将b的前n个复制给a;strcat(a,b)拼接;strcmp(a,b)比较,如果a=b返回0;a小返回负数;a大返回正数。strlwr();strupr()大小写转化;stdlib.h随机数;rand(%20)产生0~19的随机数;1.4宏变量#defineNUM6+3(1)定义数组的时候,数组长度必须为常量。数组长度不可以使用变量,因为定义的过程是在内存中划分存储空间的过程。(2)变量中有一种特殊的变量,宏变量(必须大写)。宏变量一旦申明完成,则宏变量值不再发生改变,而且宏变量的使用是替换而不是赋值。NUM*5=6+3*5=211.5结构体基本数据类型,相当于开发者自定义了一张数据类型。结构体中的每一个小的属性称为结构体成员,所有的成员都是基本数据类型。结构体相当于一个基本数据类型的集合。结构体自定义:必须使用struct关键字进行结构体声明:structBirthday{intyear;intmonth;intday};注意:结构体是可以进行嵌套使用的,嵌套结构体使用的时候需要多一层点运算。能够进行真正赋值操作的基本数据类型有:intdoublefloatboolchar指针结构体定义变量--实例化structStudentxiaoming;使用结构体成员,使用.运算符号xiaoming.num=10010;xiaoming.birth.year=1997;(年月日)一般结构体中会定义一个链接自身的结构体指针做链表使用。1.6动态链表(使用stdlib.h)#defineLENsizeof(structStudent)首先声明宏变量用来重新划分内存空间。为了节省系统内存资源,正常使用动态划分内存空间存储链表数据structStudent{intnum;structStudent*next;};structStudent*head,*a,*b;head=a=b=NULL;inttemp=1;charch;printf(Pleasechoosey/n:);while((ch=getchar())!='n'){if(temp==1){temp=0;head=a=b=(structStudent*)malloc(LEN);printf(PleaseinputstuNum:);scanf_s(%d,&a-num);}else{a=(structStudent*)malloc(LEN);printf(PleaseinputstuNum:);scanf_s(%d,&a-num);b-next=a;b=a;}getchar();printf(Pleasechoosey/n:);}if(temp!=1)a-next=NULL;if(head==NULL)printf(NoPoint);else{a=head;while(a!=NULL){printf(%d,a-num);a=a-next;}}这种方法称为动态链表每次开拓新的内存空间时使用malloc()函数划分空间,使用sizeof(数据类型)函数确定空间大小a=(structStudent*)malloc(LEN);1.7数据类型字符常量:如’?’字符串常量:如”boy”不能显示的字符:空(null)字符(以‘\0’表示)警告(以‘\a’表示)退格(以‘\b’表示)回车(以‘\r’表示)字符’1’在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节。即标准型int4个字节,分为长整型4个和短整型2个float型变量分配4个字节double型变量分配8个字节浮点型常量都按双精度处理如果除数或被除数中有一个为负值,舍入方向不固定。+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大321.8文件流与字符流1.8.1buffer—字节流sscanf(buffer,string,vol);intnum=10;charstr[20];sscanf(str,”thenumis%d”,&num);sprintf(str,”thenumis%d”,num);1.8.2文件流头文件stdio.h定义了文件流指针:FILE在内存中开辟了两个存储区域:文件存储区和文件缓存区。前者是打开文件保存文件内容的缓存区,后者是保存输入/输出的数据的缓存区。fopen(文件路径,打开方式);打开方式:r只读/w写入/a、r+、w+、a+读写皆可一般使用w+,r方式必须文件已存在,w方式是先创建文件再使用,若存在则覆盖。feof();验证文件是否读到文件末尾,若读到返回非0,没有读到就返回0。在C中1为真,故而用while(!feof(文件指针))循环读取文件流从文件流中将数据读取到内存中fscanf();将数据写入到文件流中fprintf();fclose();关闭文件流。实际上是关闭了两块内存空间。Fgetc(文件流指针);读不到返回EOF(erroroffile)1.9数组和清屏数组初始化inta[3][3]={0};代表数组所有位置上都是0。clrscr();将DOS界面清空二、软件测试基础2.1什么是软件测试?验证软件功能是否满足客户需求,并且对软件质量进行评估。2.1.1手工测试纯手工验证软件功能的实现——完全按照用户的使用习惯及方式验证系统功能(任何软件产品的第一轮测试)QC(惠普三大测试工具之一)2.1.2自动化测试(1)白盒自动化。一般由程序员自己完成(因为白盒要验证程序逻辑)(2)功能自动化。一般是在手工测试之后进行功能验证的时间进行的,需要借助自动化测试工具:QTP(惠普三大测试工具之一)WebDriver(编程语言C#、Java、Python、GO)主要是做Web测试的2.1.3性能自动化。验证服务器的使用性能——并发用户数——响应时间——系统资源利用率也需要借助性能测试工具:LoadRunner(惠普三大测试工具之一)规模比较大的公司使用,小的用盗版虚拟机Jmeter(免费的)2.2软件测试的对象是什么?有哪几类?2.2.1服务端系统——服务器(1)服务器系统的性能(2)服务器的硬件配置2.2.2客户端(1)APP(移动端)手机、手表、手环、眼镜、平板、VR、MacBook趋向于轻应用(H5)(2)PC端B/S架构:基于浏览器的,以后大部分应用程序会基于浏览器。浏览器分类,按平台分:PC端:IE、火狐、谷歌、Safari移动端:UC、SafariC/S架构:基于客户端的2.3什么是软件缺陷?软件缺陷的分类有哪些?(1)软件没有达到产品需求要求(2)软件出现了指明不会出现的问题(3)软件没有达到软件需求未指明但理应达到的功能要求(4)软件功能超出了指定范围(有对于功能赠送)(5)用户体验不佳——需要做系统调研——调研对象:系统的最终用户2.4软件测试方法的分类?(1)按照测试人群:阿尔法测试——内测BATE测试——公测(2)按照测试状态:静态测试——也称为文档测试动态测试——主要涉及功能与代码逻辑(3)按照测试方法黑盒测试——针对软件功能的测试白盒测试——针对软件代码的测试灰盒测试——一般指功能自动化或者性能自动化2.5什么是白盒测试?什么是黑盒测试?两种测试的区别是什么?2.5.1白盒测试表示测试是基于软件内部结构进行的,一般也称为驱动测试、单元测试2.5.2黑盒测试表示测试是基于软件外部功能实现进行的,也称为功能测试所有白盒进行的是最主要是覆盖测试(数据库mysql端口3306sql端口1433oracle端口1581系统占用率不超过20%缺陷重开率不超过%5性能主要体现在服务端,客户端主要是客户体验)2.6何时停止测试?停止测试的标准是什么?(1)第一类标准:测试超过了预定时间,则停止测试。(2)第二类标准:执行了所有的测试用例,但并没有发现故障,则停止测试。(3)第三类标准:使用特定的测试方案(时间来不及只测试业务流)作为判断测试停止的基础。(4)第四类标准:正面指出停止测试的具体要求,即停止测试的标准可定义为查出某一预订数目的故障。(5)第五类标准:根据单位时间内查出故障的数量决定是否停止测试。2.7黑盒测试一般能发现哪些缺陷或问题?(1)是否有不正确或遗漏了或增加的功能?(2)在接口上,输入能否正确地接受?能否输出正确的结果?(3)是否有数据结构错误(包括程序员把代码写死了)或外部信息访问错误?(4)性能上是否能够满足要求?(5)是否有初始化或终止性错误?程序员容易把代码写死的地方主要有:下拉列表、宏变量、函数2.8黑盒测试的方法有哪些?分别表示什么含义?2.8.1等价类划分法(1)划分原则:按区间按数值集合按数值按限制条件或规则细分等价类(2)步骤:首先为等价类表中的每一个等价类分别规定一个唯一的编号。设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。2.8.2边界值分析法按照取值域范围的临界点作为测试的重点。在开发过程中临界点最容易出现错误,如:pwdlen8&&pswlen16如果密码长度只有8位或者16位则密码长度验证不通过。在实际工作中,边界值分析法与等价类划分法是组合使用的,先通过等价类划分大的取值域,再根据各个取值域设置对应边界值。(1)边界值取值:正好等于边界、刚刚大于最小边界、刚刚小于最大边界——有效边界值刚刚小于最小边界、刚刚大于最大边界——无效边界值两者组合为健壮性测试(共6N+1个)(2)边界适用范围:速度、大小、空间、长短、重量。。。(3)边界的使用:当有多组变量数据存在的时候,使用边界需要注意:只能保持一组边界值存在,其他组必须使用正常值。内部边界值:用户看不到或者很难注意到但确实属于检验范畴的边界值条件称为内部边界值条件。边界值分析最主要的是要注意内部边界值。2.8.3因果图法验证输入条件或者输出结果之间的相互约束关系(1)(输入输出之间)因果基本关系:恒等、与、或、非(2)(输入条件之间)约束关系:E异I或O唯一R要求(3)(输出条件之间)约束关系:M强制约束虚线,指明方向,箭头条件在左、结果在右。2.8.4决策表法在黑盒测试中,基于决策表的测试是最为严格、最具有逻辑的测试。完整的决策表:简化后的决策表,‘-’表示无关条件:其中划分区域为:有N个条件就有2的N次方条规则。不论什么决策表都有一种不可能情况。一定要注意合并时是否为无关项。共2的13次方个用例。2.8.5正交实验法从大量的实验中选取具有代表性的点进行测试2.8.6错误推断法也叫作经验推断法。测试方法是为了设计测试用例使用的,准确的说是为了设计测试数据使用的。IEEE829有两个标准1983和1998。2.9测试用例的设计?什么是测试用例?测试用例包含哪几部分?为了特定的目的设计的一组测试输入,执行条件及预期结果——测试用例(1)特定目的:验证软件系统是否符合客户及实际使用需求(2)测试输入:输入数据(3)执行条件:相当于测试某一功能时使用的测试步骤(4)预期结果