引论:我们为您整理了13篇单元测试方法范文,供您借鉴以丰富您的创作。它们是您写作时的宝贵资源,期望它们能够激发您的创作灵感,让您的文章更具深度。
篇1
文献标识码:A 文章编号:1672-7800(2015)005-0029-03
作者简介:刘思思(1985-),女,陕西商洛人,硕士,上海机电工程研究所工程师,研究方向为飞行控制软件开发、系统集成与验证;刘迪(1985-),男,黑龙江哈尔滨人,硕士,上海机电工程研究所工程师,研究方向为制导控制系统设计与仿真。
0 引言
在飞行控制软件(简称飞控软件)开发过程中,单元测试环节必不可少。其中,静态度量指标可以用专门的工具很方便得出其具体数值,而动态测试虽然也有专门的工具,但编写测试用例需要花费大量时间和精力。当前,航天多型号开发任务重,迫切需要应用自动化的测试工具软件来提高动态测试的工作效率。
本文结合飞控软件的特点,论述通过自动生成测试用例的工具软件Cantata6.2进行单元动态测试的方法。
1 飞行控制软件特点
飞控软件的主要功能是完成相关设备之间的实时信息交互与控制解算,从而实现飞行过程中姿态和位置的控制。飞控软件主要分为应用层软件、接口协议层软件和底层驱动软件3个部分,软件架构如图1所示。
应用层软件由实现姿态和位置控制的各功能模块组成;接口协议层软件主要为飞行控制设备与其它设备之间通信的协议模块;底层驱动软件主要由飞行控制设备的接口驱动模块以及硬件输入输出模块组成。
飞控软件嵌入在飞控设备中,具有实时性高、时序和逻辑复杂、可靠性高的特点。首先,要确保底层驱动软件和接口协议软件的正确性,使得各类信号得以正确传输;其次,要确保软件与控制算法模型的一致性,输入输出及解算正确;最后,要确保软件时序和逻辑的正确性。只有这样才能保证飞行控制系统正常工作。
2 飞行控制软件单元测试的意义
对飞控软件的最小组成单位――函数进行测试的目的在于检验其能否正确地实现其功能,满足性能指标和接口要求。通过语句(SC)、条件(DC)、修正条件判断(MC/DC)等覆盖率指标评价程序结构,及早发现软件代码中的编码和逻辑错误。
对控软件来说,被测函数已经完成了编码和调试,能够通过编译和链接进行单元测试。此外,不考虑每个模块与其它模块之间的关系,为每个模块设计驱动模块和桩模块,每个模块进行独立的单元测试,各模块的单元测试可以并行进行,能够提高测试效率,也较容易实现100%的覆盖率指标要求[1]。
3 Cantata6.2测试工具
3.1 Cantata6.2简介
Cantata6.2采用先进的代码分析器和AutoTest技术,智能分析被测代码,扫描代码的所有可能路径,根据选定的覆盖率标准,自动生成满足100%覆盖率的测试用例。对全局变量、返回值自动赋期望值,并包含对全局变量、返回值、调用函数参数传递等进行检查。对形参为复杂类型,如结构体指针的情况,能自动生成相应的测试对象,即构造一个结构体数组,将结构体数组的地址赋给形参。自动生成桩函数,在测试工程中替代真实的外部函数。使用Cantata6.2进行单元测试的原理如图2所示。
用户可以使用Cantata6.2工具AutoTest选择相应的覆盖率规则集,通常航天A级软件要满足修正条件判断(MC/DC)覆盖率100%,B级软件要满足分支判断(DC)覆盖率指标100%,C级软件要满足语句(SC)覆盖率指标100%。飞控软件通常均为A级软件,选择DO-178B/ED-12B Level A Coverage规则,自动生成满足SC、DC、MC/DC3个覆盖率指标要求的测试脚本文件。
3.2 含有桩函数的测试实例
本文以飞控软件的指令形成函数模块为例,检验Cantata6.2的动态测试功能。该函数模块的主要功能是形成稳定控制系统姿态控制等的指令信号。代码框架如下:
void Instruction (C_INSTRCUTION *C_)
{
……; //定义局部变量
if(C_->fInTT < t1)
{
……; //控制解算
}
else
{
……; //控制解算
Function1(C_);
……;
if(C_-> fInTT < t2) //注①
{
……;
}
else
{
……;
}
……;
}
}
利用Cantata6.2进行动态测试。自动生成10个测试用例并执行完后,语句覆盖率和分支判断覆盖率都没有达到100%,源代码中注①处标注的条件判断的假分支没有得到执行。于是,手动添加一个测试用例,使得在给定的输入条件下结构体变量C_-> fInTT的值落在[t2,∞)的区间内,接着重新执行该测试用例,结果还是执行不到该假分支。仔细分析代码后发现,该分支中的条件判断表达式中的结构体变量C_-> fInTT的值已被桩函数Function1(C_)修改。
处理方法如下:第一步,在Cantata6.2的调用接口控制界面中,为该桩函数添加一个新的桩函数实例,并手动修改结构体变量C_-> fInTT的值,该数值应大于或等于t2;第二步,在Cantata6.2测试用例界面,将调用序列更改为新的桩函数实例。至此,执行全部11个测试用例之后,满足语句和分支判断覆盖率全达到100%的指标要求。
3.3 编译器对测试结果的影响
飞行控制软件的编译器目前主要使用CCS2.2或CCS3.3,在用Cantata6.2进行单元测试时,CCS被设置为Simulator模式,Cantata6.2会自动调用CCS,执行编译好的测试中间文件,进而生成测试结果文件。测试过程中,笔者发现对于如下代码段,Cantata6.2自动生成的测试用例对X自动赋值为0.9999,调用CCS2.2执行用例后,代码运行的实际路径与期望路径不一致,测试结果不能达到100%的分支覆盖率指标要求。
#define ZEROP 0.00001
void Function2 (void)
{
if(X
{
……;
}
else
{
……;
}
……;
}
笔者分别在CCS2.2和CCS3.3编译器环境下,验证了该代码段的运行情况,最终得出结论如下:①在CCS2.2编译器下,程序执行真分支,与期望不一致,结果不正确;②在CCS3.3编译器下,程序执行假分支,与期望一致,结果正确。上述结果表明,不同的编译器版本影响程序实际执行路径的正确性。
4 基控软件的Cantata6.2使用策略
4.1 Cantata6.2使用策略
飞控软件中包含很多复杂的结构体数据类型,Cantata6.2能够对结构体类型自动赋值,不用手动一一赋值;而且飞控软件涉及大量数学计算,Catata6.2的测试脚本是开放的纯C代码,可在其脚本管理器界面或测试脚本中直接修改某个测试用例的变量值,提高测试效率。Cantata6.2测试工具是通用的,而飞控软件具有其特殊性,就二者的融合使用,笔者总结出如下经验:
(1)飞控软件中一般都包含do while(1)的死循环结构,测试时需要将这类死循环放开,测试用例才能执行完毕。
(2)飞控软件中包含有很多类似“x=x”的赋值操作,本义是在某些特定条件下,x的值不变,测试时要将这类语句注释起来,否则Cantata6.2会报错。
(3)当被测函数包含子函数时,Cantata6.2会自动作打桩处理,但桩函数有可能会修改某些全局变量的值,进而导致某个分支始终无法覆盖。这时,可以在该桩函数的调用接口添加一个桩函数实例,并手动修改该变量的值,再将调用序列更改为新的桩函数实例,如3.2小节所述实例。
(4)飞控软件作为嵌入式软件,最终是固化在飞控设备中,构成飞控系统运行。因此,软件一般都包含对硬件端口地址的操作,如果是从端口输出数据,测试时需要将这些代码注释起来,如果是读取某个地址的值,则可以自己定义一个变量代替该数值,否则将导致不能自动生成测试用例。
(5)飞控软件中的控制算法一般都包含有积分计算,开发人员一般习惯定义静态的局部变量,遇到这种情况时,应该将这些变量移到函数外部定义,否则会导致不能自动生成测试用例。
4.2 测试驱动开发
Cantata6.2测试工具能够自动生成测试用例,即使不满足语句、分支判断、修正条件判断覆盖率100%要求,测试人员也能很快根据覆盖率结果图示手动添加新的测试用例,使得该用例执行后覆盖到上一次未覆盖到的分支。但是,就笔者的使用经验而言,Cantata6.2对被测代码的要求比较高,被测代码要符合标准C要求,其头文件不能相互嵌套重复引用,否则一个.c文件和其相关的.h文件加载进去就会出现错误提示和警告,而且必须将这些错误提示解决完并通过编译后,才能进行下一步生成测试用例的工作。此外,由控软件具有逻辑复杂、运算量大的特点,要借助Cantata6.2的自动生成测试用例的功能快速完成飞控软件测试,这也对飞控软件的代码质量和框架结构提出了比较高的要求。在飞控软件框架结构和代码质量比较高的情况下,可以加载整个.c文件,一次性生成整个.c的全部测试用例,而不用单个函数去建测试工程,从而加快测试速度。笔者总结使用经验如下:
(1)飞控软件的自动驾驶仪模块根据控制系统的模型编写,模型中包含滚动、偏航、俯仰三通道控制解算算法,该模块代码最好拆成3个函数模块,单个模块代码行数要在200行以内,便于测试,代码结构也更加清晰。
(2)由控软件的特殊功能需求,同一个函数中包含多个条件表达式“与”或者“或”,再进行逻辑(即if else)判断的用法非常多,譬如if(条件表达式1&&条件表达式2||条件表达式3),开发人员在编写代码时,最好将这些条件表达式的计算在if判断之前完成,以有利于测试用例能够正常覆盖到期望的分支。
(3)依据航天软件工程化标准要求,飞控软件的安全关键性等级一般为A级,单元测试必须满足语句(SC)、分支判断(DC)、修正条件判断(MC/DC)覆盖率均达到100%。MC/DC要求每个判定中的每个条件都曾至少一次独立影响判定结果。由控系统的特殊算法需求,模型中涉及分段函数计算比较多,选择MC/DC覆盖率标准后,某些代码会覆盖不到。代码结构如下,斜体加粗部分为未覆盖到的代码:
if((x1>x2)&&(x1< (x2+const1)))
{
……;
}
else if( (x1>(x2+ const2))&&(x1< (x2+const3))) //注2:0
{
……;
}
else
{
……;
}
分析上述代码,笔者认为由于选择了修正条件判断覆盖率标准MC/DC,Cantata6.2认为第一个判断条件“x1>x2”的假分支不应再包含“x1>(x2+const2)”的判断条件。类似情况,建议控制系统设计师修改模型文件,或者软件开发人员优化程序结构。
(4)通过3.3小节中的实例,建议开发人员应该选择升级版本的编译器作为开发工具。此外,笔者尝试了将ZEROP定义为局部变量0.00001,结果程序无论在CCS2.2还是CCS3.3编译器下,均执行不到期望的正确分支,这对编码质量提出了较高要求。
5 结语
利用Cantata6.2自动生成测试用例的功能能够快速完成单元动态测试,促进开发人员提高编码质量,提高飞控软件的可移植性和可维护性,满足当前航天多型号软件开发和单元测试的工作需求。同时,工具内置的很多规则集能够帮助测试人员快速定位软件编码错误和框架问题,进而帮助开发人员更好的优化程序结构,进一步提高航天软件研制水平。
参考文献:
[1] 张猛,毛亮.航天嵌入式软件的单元测试方法探讨[J].航天器工程,2006(7):32-35.
[2] 陶幸辉,宋志刚.嵌入式飞控软件测试方法研究及实践[J].软件导刊,2011(8):14-16.
篇2
Abstract This paper systematically introduces three EXCEL cell address representation, which is the in-depth study EXCEL EXCEL and expand knowledge base, but also with specific examples illustrate three address representation features and how to use and so on.
Key words EXCEL; address representation methods; example
单元格地址表示方法是为Excel智能运算服务的,这也是Excel不同于计算器和其他电子表格的地方。使用普通计算器时,需针对不同的数据重复进行计算,即浪费时间又不能发现数据的变化规律。而使用Excel进行计算时,对于相同的运算,不需要重复进行,只要针对不同的应用问题写出对应的自变量的地址,就可以通过“拷贝”公式的功能得出其他单元格中的结果。所以说,在EXCEL中对公式或函数的“拷贝”是进行智能运算的助手。为此,先综述一下各种“拷贝”方法。
在EXCEL中“拷贝”操作可以使用通用的拷贝方法,如快捷键方法:Ctrl+C 再Ctrl+V;或人们习惯用的拷贝与粘贴两个图标方法以及右键快捷菜单方法。上述这些“拷贝”方法都需借助剪贴板来进行。若按Ctrl+左键拖被选内容,则不需要将拷贝信息事先注入剪贴板,这也是常用的一种拷贝方法。这些通用的拷贝方法对于EXCEL的计算不很方便,当待拷贝的公式单元格较多时,既浪费时间还容易出错。为此,EXCEL给出一种特殊的拷贝方法:拖公式单元格右下角的(细十字)“填充柄”进行公式或函数的拷贝操作。需要注意的是:这种拷贝方法仅限于相邻单元间的拷贝,而在EXCEL中我们最需要的恰恰就是相邻单元格间的快速拷贝方法。
为了能正确地计算出数据库类型表格中的公式或函数结果,自变量所在的单元格必须使用“相对地址”表示,即用“列标+行号”来表示。如A2表示第一列第二行中的数据,对于一个自变量区域,不必一个一个地写出来,可以用左上角和右下角单元格地址简捷地表示,两者之间用英文的冒号隔开,如A3:D6就表示一个含有16个单元格的矩形区域,在进行公式运算时特别方便。
用“相对地址”表示自变量单元格时的特点是:自变量单元格地址与(因变量)公式单元格的地址在空间布局上看是不变的,不会因为“拷贝”操作而改变。例如,某个单元格中的公式是计算左面3个单元格数据之和,则不论将该公式“拷贝”到哪个单元格中,结果始终是左面3个单元格数据之和。这就是我们在做成绩统计时,只要计算出第一个学生的总成绩,再向下拖动“填充柄”进行拷贝,就会得到其他同学的总成绩的原理。也就是说,用相对地址表示自变量时,自变量的地址始终是跟随因变量变化而变化的,并计算出其他单元中的结果。单元格的相对地址表示方法普遍适用于成绩表、设备表、工资表等数据库形式的表格统计与计算。
EXCEL单元格地址的第二种表示方法是:绝对地址表示法。所谓“绝对”就是永恒不变的意思,即自变量单元格不会跟随因变量变化而变化,形象地说,单元格地址被锁住了。在数据库计算和其他表格制作时均有应用。
绝对地址表示方法是:在自变量单元格的列标和行号前均加$号。如:一个单元格的绝对表示是$B$4,一个区域的绝对地址表示是$B$4:$D$7。
我们在制作数据表格时,有时需要对自变量进行筛选、比较,例如:在对一个班级学生成绩进行排位时,需逐个比较每名学生成绩在班级所有同学成绩中的位置。其中,单个学生的成绩是变化的,须用相对地址表示,而所有学生成绩的单元格区域必须是不变的,不能因为学生变化而改变,在Excel中这种不变的自变量或区域采用“绝对地址表示”。在对公式或函数单元格“拷贝”时,用“绝对地址表示”的区域始终保持不变,与“拷贝”无关。
在前面提到的学生成绩排位问题中,成绩对比区域必须用“绝对地址”表示,与此类似的应用问题很多。虽然我们可以用“排序”图标来进行,但这种排序方法会破坏原有表格行的位置,这恰恰是我们最不希望看到的。为此,用Excel 的排位函数Rank可以实现在不改变原有数据库记录次序的前提下,又能添加一个“排位”字段的功能。应用时的格式为:Rank(变量,变量区域,0或1)。其中,“变量”用相对地址表示,是跟随因变量变化的,第二个参数“变量区域”是变量大小比较的区域,在排序的过程中必须保持不变,须用“绝对地址”表示。第三个参数是可选参数,可以取0或1,取0时,表示第一个参数(变量)的值越大,排位越靠前,省略该参数时相当于取值为0。若第三个参数取1,则第一个参数(变量)值越小,排位越靠前。
该例是按“总成绩”进行排位的,G2中的公式为RANK(F2,$F$2:$F$10)。F列上的数据就是函数中的“变量”,其中F2必须用相对地址表示,在对G2中的公式向下“拷贝”的过程中,F2自动变更为F3、F4、F5一直到F10。第2个参数$F$2:$F$10是“总成绩”字段区域,既所有自变量所在的区域,须用绝对地址表示,以保证在对排位函数“拷贝”的过程中这个区域始终保持不变。此公式仅用了两个参数,省略第三个参数表明:总成绩高的排位号在前。拖G2单元格的“填充柄”向下“拷贝”时,单个学生的总成绩不断在变化,而所有学生的总成绩区域被“锁住”,拷贝到最后一个学生,即可快速得到整个“排名”字段。
另外,在实际工作时,某些公式中的常数有可能发生变化。如请假扣款金额、计件工资金额等,当把这些常数直接写在公式中时,一旦发生金额变化,就需要重新进行计算。最好的方法是在将该常数先放在表格中的某单元格处,而在公式中用该单元格的绝对地址表示,就可以实现在金额变化后,所有应用该金额的地方会自动更新。
EXCEL单元格地址的第三种表示方法是:混合地址表示法。他是介于相对地址和绝对地址表示之间的一种地址表示方法,这种表示方法中的自变量在跟随因变量变化的过程中受到一定的限制,仅能沿行方向变化或沿列方向变化。这种变量地址表示方法主要用于制作类似于九九乘法表的“交叉数据表”。当一个公式或函数中有多个变量时,提取两个相互独立的变量分别放在行和列上,并设定一个变化序列,相当于建立了一个二维的X-Y坐标系。再利用EXCEL的运算特点:相同运算仅计算一次,其他数据通过拷贝得到,就可以快速地制作一个函数F(X,Y)的平面数据表,我们中学用的《常用数学用表》可以利用这种方法快速地制作。
“混合地址”表示方法是仅在列标或行号前加$号。如$D6、A$8。其中,$D6表示Y方向变化的变量,即数据仅限于在D列上变化。A$8表示X方向变化的变量,该数据仅于在第8行上变化。也就是说,前面有$号的行或列,就是被限定变化的区域。
下面以制作两数和的立方表为例,介绍变量的“相对地址”表示方法在制作“交叉运算表”时的应用。图2为一最简单的X-Y 坐标系,自变量分别沿第一行和第一列放置。
篇3
目前行业内对载波通信单元灵敏度的测试方法相当麻烦、简单、粗略,通常使用固定值衰减法测试。固定值衰减法测试时,需要不断跟换不同衰减值的衰减单元,操作不便,且一般衰减值都是10的整数倍,如此一来,只能大概判断载波通信单元接收灵敏度,无法实现精确测试。
程控衰减法就是研究对电力线载波强电信号进行可上位机程控式衰减的一种方法。它的原理就是首先将220V强电与系统隔离开来,提取出被测的载波信号,然后输入衰减电路,通过程控上位机可以设置0-120db,步进≥1db(最小单位1db)的信号值衰减,载波信号被衰减后,再耦合至电力线,输出给载波接收设备。最终通过程控衰减器的具体衰减值以及被测载波接收设备是否正常接收到信号,来计算得载波接收设备的灵敏度。
本文采用的程控衰减法是用来精确测试低压载波通信单元灵敏度测试的一种方法。
1 程控衰减法的电路实现方法
程控衰减法的电路实现就是实现一种程控衰减器,包括了载波隔离滤波电路和通信主板电路、程控上位机,系统框图如图1。
1.1 载波隔离滤波模块电路组成及作用
1.1.1 载波信号隔离电路
通过串联谐振的方法,滤除非载波信号,通过耦合变压器将市电220V与载波通信信号隔离开来,保证整个系统的安全性。
1.1.2 滤波电路
由电阻、电容、电感构成串联谐振以及并联谐振,起到滤波作用,当需要某载波频率f的信号时,则需要计算匹配RLC参数,只有该频率附近的信号可以通过。计算公式是谐振频率
(1),品质因数
(2),在满足其他参数情况下,Q越大越好,通过计算插入损耗值计算电阻R的取值。
1.1.3 过零检测电路
当检测到50Hz市电正弦波经过零点时,将判断信息传送给MCU处理器。因为载波通信是在市电过零点时发送数据,所以过零检测也是十分重要的。
1.2 通信主板
1.2.1 稳压集成电路
为整个系统提供稳定、安全的直流电。
1.2.2 衰减电路
内置各种高精度贴片电阻网络,分别可以实现1db、2db、4db、8db、10db、20db、30db、40db信号衰减,通过不同的电阻网络导通组合,可以实现对载波信号进行0-120db衰减,具体电阻网络组合方式由MCU控制。
0-120db衰减值对应电阻网络选择组合方式如表1。
从表2看出,选择电阻网络的组合方式,可以直接实现0-115db的信号衰减,载加上程控衰减器其他电路固定衰减值5db,通过正确的组合,就能实现0-120db信号衰减。
1.2.3 微型处理器MCU控制电路
地位相当于“大脑”,它处理上位机发送的信息,实现对衰减电路的控制。
程控衰减法的实现依赖上述电路功能的实现。
1.3 程控上位机
通过键盘、鼠标就可以对程控上位机进行各种操作,程控上位机可以直观设置和显示衰减值,操作简便、直观、人性化。
1.4 程控衰减法测试载波通信单元灵敏度框图
程控衰减法的实现需要依靠程控衰减器,程控衰减器与载波通信单元的连接如图3所示。
2 测试载波通信单元灵敏度步骤
以下为使用程控衰减法测试载波通信单元灵敏度的步骤:
第一步:根据已知载波频率,通过计算公式(1)算得出滤波电路中R、L、C具体匹配参数。
第二步:根据匹配参数,做好对应的载波隔离滤波电路模块,并且将模块插入对应的位置中。
第三步:通过程控上位机,设置程控衰减器的衰减值为0db,被测载波发送设备发送符合测试标准的载波信号。
第四步:被测载波接收设备能正常接收载波信号,然后通过上位机不断加大衰减值步进值为-10db。
第五步:假如现在程控衰减值为-70db时载波接收设备能正常接收信号,程控衰减值为-80db时无法接收信号,那么将衰减值从-79db开始按照步进值1db,不断减小,直到载波接收设备能正常接收信号为止。
第六步: 假如当程控衰减值等于-75db时,载波接收设备刚好能正常接收数据,那么载波通信单元的接收灵敏度等于-75db加上程控衰减器其他电路的固定衰减值-5db,最终得到载波接收设备灵敏度等于-80db。
3 案例分析
为了充分说明该方法,以421KHz载波频率的载波通信模块测试为例。根据相关计算公式(1)计算,得出滤波电路中的R、L、C参数如表3。
使用程控衰减法测试421KHz的载波接收设备灵敏度数据记录如表4。
表4中的输出衰减值,可以直接通过程控上位机设置并且显示出来,观察表4记录表,可以得出载波接收设备的灵敏度等于-75db加上电路固定衰减-5db,等于-80db。
4 结束语
要实现对不同载波频率的载波通信单元接收灵敏度的测试,首先通过计算得出载波隔离滤波模块电路中RLC匹配参数,通过该电路,滤除非测试频率的信号。然后通过调节合适的信号衰减值,来确定载波通信单元的灵敏度。本文研究了基于程控衰减法测试载波通信单元灵敏度方法,总结出测试载波通信单元灵敏度的测试步骤。通过对421KHz载波频率的载波通信单元灵敏度测试分析,精确的测试了该模块的接收灵敏度等于-80db,验证了该方法的可操作性和有效性。
参考文献
[1]高锋,董亚波,等.低压电力线载波通信中信号传输特性分析[J].电力系统自动化.2000
[2]戚国光.基于OFDM的电力线载波通信系统的研究[D].长沙:湖南大学,7-35.
[3]Zho Wen.110dB Voltage controlled attenuator.JournalofMicrow aves,1993(3):127
篇4
二、测量单元的设计方法和步骤
对于精密测量行业来说,长度量的测量技术包括气动、电感、光学等主要方向,具体到定心机的测量要求,从空间体积、各种测量技术的优缺点等因素的考虑,现阶段选择气动测量方式比较切合实际。
1)测量原理分析:从零件装配关系上看,可以将装配间隙0.015-0.025分解为图二、图三所示A、B两个尺寸配合的结果。A尺寸由曲轴、滚套两个零件组成,B尺寸由上法兰、缸体两个零件组成。定心机就是利用调整上法兰、缸体两个零件装配关系(同轴或偏心)来改变B尺寸的具体量值的方法达到了整体装配的要求。定心机的测量单元分两部分组成,分别用于检测A、B两个主要尺寸,配用四管(下文解释)气动量仪或气电式电子柱显示各测量结果。如下图四是用于B尺寸的气动测量台示意图,图五是用于测量A尺寸的气动测量装置示意图。A尺寸的气动测量装置采用V型块定位,配用一支接触式气动测量头,装置设计按常规气动测量原理的方法设计,相对比较简单,本文不再赘述。本文重点阐述检测B尺寸气动测量台的检测原理以及各主要参数的计算方法。
2)B尺寸气动测量台的检测原理:气动测量台(见图四)共配置三路气路,分别是B、X1、X2三路气路(另外加上A尺寸的气路,共用4管气动量仪显示)。B气路用于检测图二所示的B尺寸,X1、X2分布于B气路轴截面90°夹角截面的正反两处气路,其作用是为了检测15°截面垂直方向截面的对称度,进而保证曲轴、滚套在旋转状态下15°方向上是最小间隙,保证压缩机装配状态达到设计要求。X1、X2两气路的测量值不具有量值概念,只要求两量值相等,代表对称度达到要求。设计气动测量台的计算过程主要是为了确定上法兰测量段尺寸、缸体测量段尺寸、标准件尺寸三处主要参数。
3)下面我以某型号压缩机的零件具体数据来说明气动测量台各参数的确定:
与要求间隙量0.015~0.025mm取平均值0.02mm比较可以得出A尺寸的最大调整量0.037mm,也就是说上法兰与缸体15°方向装配的理论偏心量为0.037mm
综上所述,我们可以得出以下结论:
因理论上技术得出上法兰相对于缸体的最大偏心量为0.037mm,假设缸体在装配环节位置是固定的,气动测量台上法兰测量段的尺寸理论上应该比上法兰内孔最大实体尺寸小0.037×2=0.074mm,另外考虑到以上理论计算的是各个零件的尺寸同时处于极限状态,这在现实装配中的概率几乎为零,同时考虑到上法兰与曲轴在工作状态也不可能是无间隙接触(中间有剂油膜)。现实应用中,测量台上法兰测量段的尺寸一般取比上法兰内孔最大实体尺寸小0.05~0.06mm范围,新制作测量台时考虑到测量台的使用寿命,建议取0.05mm。这个结论应该引起气动测量台设计人员的充分理解和重视!
结合以上理论计算和实际因素考虑,针对这种型号压缩机定心机气动测量头的主要参数可确定为:
测量台上法兰测量段的尺寸:Φ16.015-0.05=Φ15.965mm,另外根据气动测量原理中初始间隙(包含插入间隙)的概念,最终确定尺寸为Φ15.965(-0.01/-0.015)。
测量台缸体测量段的尺寸:缸体在装配测量时位置相对是固定的,因此只需考虑气动测量原理中初始间隙(包含插入间隙)的概念,最终确定尺寸为Φ45.998(-0.01/-0.015)。
篇5
中图分类号: TP306
文献标识码: A 文章编号 文章编号: 16727800(2017)002001303
0 引言
在计算机编程中,单元测试[1]是针对程序模块(软件设计的最小单位)进行正确性检验的测试工作。程序单元是最小的测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类或者派生类(子类)中的方法。每个理想的测试案例独立于其它案例。为测试时隔离模块,经常使用stubs、mock或fake等测试马甲程序。单元测试通常由软件开发人员编写,用于确保所写代码符合软件需求和遵循开发目标。
运行和调试JavaScript代码[2]的主要工具是Web浏览器,现代的Web浏览器一般包含调试JavaScript代码的控制台。对于JavaScript代码,Mozilla Firefox是最适合运行与调试的浏览器之一。Mozilla Firefox浏览器的插件Firebug是调试JavaScript代码必不可少的,尤其是涉及到Ajax技术的Web应用。在Mozilla Firefox浏览器中安装好Firebug插件后,JavaScript代码运行中的错误信息、Ajax调用、性能分析结果、命令行执行结果都会显示在控制台界面上。Firebug提供了很多手段可以将JavaScript代码运行中的信息输出到Firebug控制台,通过灵活使用控制台语句可以方便实现对JavaScript代码的单元测试。
1 JavaScript代码中控制台语句使用
在JavaScript代码中可以使用console.log()方法向控制台输出信息。实际上,console.log()方法包含在conosle对象中,而console对象则是由浏览器提供的(IE6及以前浏览器不支持console对象)。
除了最基本的console.log()方法外,conosle对象还提供了多种方法以便向控制台输出不同类型的信息和调试JavaScript代码。
(1)不同类型输出方法。
根据信息的不同性质,console对象除了console.log()方法外还有4种输出信息方法:一般信息console.info()、调试信息console.debug()、警告提示console.warn()和错误提示console.error()。
(2)自定义输出格式。
console对象所有的输出方法都可以使用printf风格的占位符对输出内容进行格式化。支持的占位符有字符(%s)、整数(%d或%i)、浮点数(%f)和对象(%o)。
(3)分组输出。
如果在JavaScript代码运行过程中需要输出数据太多,则可以使用分组的方式输出到控制台以便查看和分析。conosle对象中的console.group()和console.groupEnd()方法提供了数据分组输出功能。
(4)输出指定对象所有属性和方法。
console.dir()方法可以输出传入对象的所有属性和方法。
(5)显示页面对象的HTML代码。
console.dirxml()方法可以显示输入的页面对象HTML代码,以便查看和调试。
(6)断言。
console.assert()方法提供了基本的代码测试功能。该方法用来判断一个表达式或变量是否为真,如果不为真,则在控制台输出一条相应信息,并且抛出一个异常。
(7)跟踪方法调用轨迹。
console.trace()方法可以用来追踪方法的调用轨迹,用来对递归方法或调用过程较复杂的方法进行分析。
(8)计时方法。
console.time()和console.timeEnd()方法可以用来记录并输出代码的运行时间。
(9)性能分析方法。
性能分析指分析程序各个部分的运行时间,console.profile()可以用来对JavaScript代码进行性能分析,找出代码瓶颈。
2 JavaScript代码单元测试实现
如果需要测试某些不涉及DOM和CSS操作的JavaScript代码,用Qunit之类的第三方JavaScript单元测试框架[3]略显繁琐,效率不高,这类JavaScript代码最适合用控制台语句做单元测试。
例如某项目需要用JavaScript代a实现快速排序[4],具体实现代码如下:
//swap函数实现元素交换
function swap(list,firstIndex,secondIndex){
var temp = list[firstIndex];
list[firstIndex]= list[secondIndex];
list[secondIndex]=temp;
}
//getMiddle函数获取中轴点
function getMiddle(list,left,right) {
var pivot = list[Math.floor((right + left)/2)];
var i = left;
var j = right;
while (i
while (list[i]< pivot) {
i++;
}
while (list[j]> pivot) {
j--;
}
if (i
swap(list,i,j);
i++;
j--;
}
}
return i;
}
//quickSort函数以递归方式完成快速排序
function quickSort(list,left,right) {
var index;
if (list.length > 1) {
index = getMiddle(list,left,right);
if (left < index - 1) {
quickSort(list,left,index - 1);
}
if (index < right) {
quickSort(list,index,right);
}
}
return list;
}
上述快速排序的实现代码可以使用控制台语句中的断言部分完成测试,具体如下:
//待排序list
var array=[6,2,9,8,1,7];
//预期的结果
var result=[1,2,6,7,8,9];
//测试swap函数
swap(array,1,5);
console.assert(array[1]==7&&array[5]==2,"swap函数错误!");
//测试getMiddle函数
var m = getMiddle(array,0,array.length-1);
console.assert(m==5,"getMiddle函数错误!");
//测试quickSort函数
quickSort(array,0,array.length-1);
console.assert(array.toString()==result.toString(),"quickSort函数错误!");
//单元测试结束
console.info("测试完成!");
通过控制台语句中的console.assert()方法可以分别测试代码中的swap函数、getMiddle函数和quickSort函数。如果测试通过,则会看到在控制台中输出带有信息提示图标的“测试完成!”字样。
如果其中某一个函数出错则会有相应提示,如图1所示。
上述针对快速排序模块的测试很简单,测试结果也没有问题。但是对单元测试来说,这个测试用例太单一和普通了。为了提高测试用例[5]覆盖率,最好写一个辅助函数tester来调用被测试代码和使用控制台语句输出结果,具体做法如下:
function tester(name,result,expect){
//使用分组语句输出测试用例名
console.group(name);
if(result==expect){
//测试通过,信息提示
console.info("通过!");
}else{
//测试失败,警告提示
console.warn("失败");
}
//分组结束
console.groupEnd();
}
如果用上述tester函数测试完成快速排序的quickSort函数,可以这样实现:
//待排序list
var array1=[6,2,9,8,1,7];
//预期的结果
var result1=[1,2,6,7,8,9];
//待排序list2
var array2= [6,2,9,8,1,7,85,12,48,56,78,987,45,
12,-78,45,0,58,96,12.56,12.3,7.36];
//预期的结果2
var result2 = [-78,0,1,2,6,7,7.36,8,9,12,12,12.3,
12.56,45,45,48,56,58,78,85,96,987];
//错误结果测试
tester("测试错误输入",1,0);
//测试快速排序
quickSort(array1,0,array1.length-1);
tester("常规测试",array1.toString(),result1.toString());
quickSort(array2,0,array2.length-1);
tester("包含负数与小数测试",array2.toString(),result2.toString());
代码运行结果如图2所示。
可使用tester函数添加许多测试用例,并且还能为用例命名,在控制台中直接显示每个用例是否通过,同时用不同颜色标记,使结果一目了然。至此一个基本的单元测试就完成了。
3 结语
快速排序算法的JavaScript代码,灵活使用控制台语句可快速完成代码模块的单元测试,比起专业的第三方JavaScript单元测试框架更高效,学习曲线也不那么陡峭。但是,利用控制台语句实现JavaScript代码单元测试主要适用于逻辑代码,而前端开发很多时候要和UI关联,虽然UI相关的代码也可以进行单元测试,但很麻烦,比起逻辑代码难度大得多。随着单元测试的普及,尤其是敏捷开发的推动,涌现了许多优秀的JavaScript单元测试框架,如Qunit和Jasmine等,每个都有各自擅长的领域。对于基于JavaScript语言的前端项目单元测试,结合控制台语句,精心选择框架,综合考虑项目实际情况,一定可以写出合适的测试代码。
参考文献:
[1] 张军,李攀,邢光辉,等.软件测试的认知误区和单元测试实战流程[J].科技创新与应用,2016 (25):120120.
[2] 令芬.JavaScript API自动化测试方案的管理设计与实现[J].电子设计工程,2016,24(2):3537,41.
篇6
(1)建立在标准的基础上,利用黑盒来进行单元测试,来进行测试。
(2)建立在程序主体产生基础上,利用白盒检测系统和程序的逻辑性和合理性。
1 面向程序的单元测试弊端阐述
对于单元测试来说,其自身弊端不能忽视。包括文件性质自身弊端OPEN语句错误CLOSE语句错误,在缓存时,其缓存内存量和记录长度不符合,正文编写错误等等问题,会对整个系统的板块和数据带来影响。其次,测试错误处理现象的发生,也会影响描述正确性无法对错误定位,对板块和系统产生干预。
2 AOP编程阐述
2.1 1AOP编程重要性
AOP编程思想是社会发展的产物,是科学技术和社会经济发展的产物,具有时代性。对AOP编程思想发展背景进行分析和研究,发现AOP编程思想产生于1997年西方国家召开的编程论坛会议上,西方国家的研究人员,在编程会议中给出AOP编程这一理论思想。
单元检测,也被叫做板块检测,其主要服务对象为软件系统中的最小板块,针对系统中最小板块,来判断程序中板块的正确性。软件开发和设计的不断发展,增加了软件的种类和复杂性,增加软件测试的难度,增加单元测试的复杂性。面对这一发展形势,为了保证软件开发有效运作,保证软件的实际应用性,我国开始对软件测试和开发方法进行深入研究和分析,在长久的研究工作中,发现AOP编程思想具有实际应用,可以满足软件开发要求,满足单元测试发展目标。站在世界角度来说,增加AOP编程思想关注,对整个世界经济发展具有重要意义。
3 AOP编程思想在面向对象程序的单元测试应用
AOP编程思想在面向对象程序的单元测试应用,包括在对象程序单元测试应用,在契约的单元测试,独立单元检测应用。
3.1 AOP编程思想在面向对象程序单元测试步骤
对于AOP编程思想在面向对象程序应用来说,主要是对程序系统进行简化,简化为银行板块的模式,来对单元进行测试。AOP编程思想在面向对象程序应用主要包括以下几点内容。
(1)对系统的代码进行测试,对存在的与消费有关的信息和数据进行反馈,保证不同数据和信息积分反馈的真实性和准确性。详细来说,系统代码检测主要包含三个不同性质的对象,存钱、消费和取钱主体等等。系统代码可以对着三个不同主体的信息记录和代码件反馈。
(2)可以利用账户的优势,利用ID对使用账户和新增加的账户展开管库,保证了主体管理的可持续性,保证管理周期最大化。
(3)transfer具有自身的优势,这一方法可以展现不同账户的信息,增加了和账户的联系性,保证服务的完善性。
3.2 契约的单元测试
在对AOP编程思想在面向对象程序单元测试分析后,发现在利用传统的银行代码中,具有自身的便利性,但是也会存在众多问题。例如:BankAccount这一系统中,运作形式类别简单和便捷,但是其却会在应用过程中,出现数据和参数为零的现象,导致不同使用账户的财务为负数形式。面对这一发展现象,可以增加契约检测力度,来避免这一弊端的产生。契约单元测试主要包括以下两种形式。
(1)利用JAVA系统来运作。1.4系列是JAVA具有代表性的系列,其具有断言能力,满足契约检测的要求。
(2)对契约形式再次构建,保证设计的合理性和构建的科学性。这一构建工作,主要是针对技术来说,对服务主体对象应用技术展开设计,可以保证单元测试的完整性,保证软件的实际应用性,提高软件质量。
3.3 独立单元检测
独立单元的检测和测试具有自身的优势,降低了单元测试难度。例如:对于独立单员中存在遗留的代码来说,运作和替代具有自身难度,利用传统的检测方法,无法保证测试的真实性。在面对这一现象,可以利用AOP编程思想优势,对独立单元进行隔离处理,把单元换分为几个系统和板块,在一一处理,在保证单元独立性基础上,增加了对不同板块信息了解。其次,也可以利用Mocks这一方法展开测试,增加测试主体的协作性,对独立单元进行划分,给予隔离层。辩证来说,Mocks这一方法不具有逻辑性,无法满足逻辑需求。总的来看,AOP编程思想在独立单元检测中具有自身的应用优势,可以对系统中代码进行修改,和模仿主体的性能类似,利用ID来查找账户的信息,并把测试结果展现在系统中。
4 结束语
AOP编程思想是社会发展的产物,具有自身特点,可以利用账户的优势,利用ID对使用账户和新增加的账户展开管库,保证主体管理的可持续性,保证了管理周期最大化。
参考文献
[1]楼程伟,陈丽红.关于计算机编程思想与AOP编程思想的研究[J].电脑知识与技术,2015(24):52-53.
[2]谢林.AOP思想在项目中的应用与研究[J].电脑知识与技术,2010(15):4130-4132.
[3]杜玲玲.AOP技术在国库集中支付系统的应用[J].计算机应用与软件,2009(03):190-191+204.
[4]赵艳,刘同明.面向方面软件开发在J2EE企业应用系统中的实现[J].计算机技术与发展,2008(10):225-229.
[5]张永.AOP技术在自助设备运行管理系统中的应用[J].中国金融电脑,2008(08):91.
作者简介
篇7
近几年来,单元测试技术已被软件开发人员应用得十分广泛,研究表明该技术已经成为最流行的测试技术之一。随着测试标准的引入和测试技术的发展,测试操作可以通过测试脚本来实现。在一个项目中,测试脚本可以与测试用例相结合,测试用例则可以通过测试用例集来管理,这种方式贯穿于整个项目过程中,甚至可以在后续项目中重用。通过运行测试脚本可以得到代码覆盖率等数据,这些数据为改进测试用例提供了根据,并且可以指导开发工作。目前已有一些商用的测试工具,比如Visual Test, C++ Test,这些工具实现了单元测试框架。
然而,嵌入式系统的单元测试不同于桌面应用系统的单元测试,难度也更大。目前应用于嵌入式系统中的单元测试可分为两种:运行在目标机上的单元测试和运行在仿真环境下的单元测试。由于目标机中有实时中断、多任务调度等,因此它能为单元测试提供更为真实的测试环境,但同时它也需要开发人员花大量的时间搭建测试环境。而仿真环境下的单元测试主要用于测试系统功能,并且环境相对来说要容易搭建,但它的缺点是它需要随着软硬件的升级而不断的调整。
在嵌入式系统中,由于开发环境的限制,加上缺乏有效的单元测试工具,所以开发者很难进行全面和有效地执行单元测试,只能通过单步调试,断言等手工方式来做有限的单元测试,而且这些手工的单元测试方式没有合适的流程去管理,也没有进入和退出单元测试阶段的标准。
这篇文章提出了一种嵌入式系统下基于自动单元测试工具的单元测试框架。这个框架极大地改善了单元测试效率,主要体现在以下的四个方面:①功能选择策略②定义了单元测试的进入和退出标准③单元测试用例和单元测试用例集的管理④代码覆盖率分析。这种框架已经在基于Linux平台的手机应用Email项目中得到了应用,并发挥了很好的效果,极大的降低了开发成本、有效的缩短了项目开发周期。同时,客户的满意度也非常高。
1 传统的单元测试流程
1所示为传统开发过程中的单元测试流程。当代码准备好后,单元测试就开始了。首先,开发人员要设计测试用例,同时需要搭建测试环境,然后开发人员开始在不同的测试环境(目标机和仿真环境)中运行,并收集运行过程中的输出结果加以分析,以确定是不是所有的测试用例都通过。
由于嵌入式系统的特性,开发人员需要花费大量精力在搭建测试环境上,并且分析测试结果也需要花费很多时间。此外,开发人员也没有办法去评估单元测试的代码覆盖率,因此这种方式不能保证项目的质量。
另外,重用在软件项目开发中经常被使用,因为它能给项目带来很多益处,比较缩短开发周期,降低开发成本等。但是,在传统的单元测试中,开发人员无法重用测试用例,每一次重用都需要花费同样的时间和精力去重新测试。
从很多已经完成项目的历史数据来看,大约30%到40%的问题是属于逻辑问题,而这些问题应该是能在单元测试阶段就可以发现的。随着开发过程的进行,越在后面阶段发现问题,去解决这个问题需要花费的代价(时间和人力)就越大。而且一旦交付给客户后,如果再出现问题,可能需要付出召回等措施,这也会影响到产品的品牌。因此,一个有效的单元测试是非常必要的。
2 基于自动单元测试工具的测试框架
2.1基本框架
本文在传统的单元测试流程的基础上提出一种新的单元测试流程,如图2所示,它可以改善上文中所提到的传统测试流程的不足。新流程极大地提高了以下四个方面: ①定义了功能选择策略,利用最少的资源获得最好的质量;②定义了单元测试的进入和退出标准,把单元测试标准化。③提供了测试用例和测试用例集的管理机制,提高重用的能力。④引入了一个自动单元测试工具,以减少搭建环境和运行测试的代价。
在新的流程中增加了代码覆盖率。借助自动测试工具,在所有测试用例都运行完后,会得到一份关于代码覆盖率的报告,包括代码行覆盖率,路径覆盖率,分支覆盖率等。传统的测试流程只能得到一部分这样的数据,而且需要人工去统计。并且通过对测试用例的管理也实现了重用。
2.2测试功能选择策略
因为单元测试是一种代码逻辑驱动的测试方法,所以理解代码能够有效地进行单元测试。为了更好地进行单元测试,应该从代码分析开始着手,根据代码逻辑和实现来选择相应的测试功能并设计合理的代码覆盖率目标。
新的单元测试流程定义了进入和退出单元测试的标准。进入的基本标准是:代码已经经过团队的检查,一致认为可以开始单元测试。退出的标准包含三个方面:①所有的单元测试用例必须都已执行完毕;②单元测试期间发现的错误需要记录下来,并且与之相关的代码错误应该得到正确地修改;③单元测试报告中应该包含代码覆盖率,并达到之前设定的目标。
利用单元测试工具,可以采用测试脚本来描述测试行为。一个测试用例对应一个脚本,包括全局变量、临时变量以及测试对象所需的类的初始化信息。测试用例由相应的测试项目管理和保存。当代码发生改变,仅仅需要改变对应的测试用例以实现重用。
基于CppUnit框架的自动单元测试工具可以在目标机和仿真环境中运行,并提供了脚本语言的开发接口用于开发者编写可运行的测试用例和测试用例集以及基于代码覆盖率的分析结果。
3 有效性评估
在新的单元测试流程中,重点是测试用例的设计。通过设计更多的测试用例来达到更高的代码覆盖率,这会在很大程度上项目的质量,缩短项目周期。
通过对Email项目的实践应用,并对比同平台的其他项目的实际数据可以得到图3关于在不同开发阶段软件缺陷的分布图。在采用新流程的Email项目中,更多的问题在单元测试就被发现并解决,因而大大降低了开发成本,缩短了开发周期。
4 结束语
没有自动测试和代码覆盖率的数据,就没有办法保证单元测试是否有效。更重要的是现在的单元测试工具已经实现了重复测试,却还没有解决连续测试的问题。如果软件架构通过增量模式进行连续的调整,代码和测试用例就也需要同步进行调整。单元测试的趋势会从单一的静态测试发展为动态的连续测试。
本文提出的新的单元测试流程致力于提高软件项目质量,降低成本。通过使用自动单元测试工具和对传统单元测试流程四个方面的提高,新的单元测试流程有效的实现了上述目标。
虽然嵌入式系统是我们讨论的重点,但是新的单元测试流程也同样适用于普通平台的单元测试,差别只是选择不同的自动测试工具来满足不同的平台。
参考文献:
[1] C. Pacheco, M. D. Ernst. Eclat. Automatic generation and classification of test inputs. In Proc. 19th ECOOP, pages 504-527, July 2005.
篇8
早在20世纪50年代末期,软件领域中就出现了迭代模型。通俗的讲,迭代模型就是将整个软件的开发分解成一个个的子特性开发(阶段),而针对每个阶段内部采用的还是类似瀑布模型的方法。每个迭代是一次完整的经过所有工作流程的过程:需求、分析设计、实施和测试工作流程。每一次的迭代都会产生一个可以的产品,这个产品是最终产品的一个子集。与传统的瀑布模型相比较,迭代过程具有以下优点:(1)由于每个迭代是整个系统的子系统,相对内容比较单一,各个阶段需要传递的信息量较小,不需要通过大量的文档进行传递。(2)由于整个开发过程被拆分为独立的若干阶段,用户在每个阶段结束就可以提前看到开发成果。一方面能够及时对开发中出现的偏差进行纠正;另一方面由于能够及时看到工作成果,有利于开发人员的效率提升。(3)相对于瀑布模型,迭代模型更加关注对软件目标、结果的关注,更加注重和最终用户的互动,以保证开发成果的质量。(4)由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的,而迭代模型更能够适应这种需求的变化。同样,迭代模型也存在其缺点,那就是对于项目经理和开发团队的要求更加高,并且需要团队成员之间更加的信任。因为迭代模型运作对于过程的监控较弱,更加关注面对面的交流与合作。
篇9
软件测试是指利用相关测试工具,按照一定的测试方案和流程对软件系统的功能和性能进行测试,对可能出现的问题进行分析、评估,发现开发错误并跟踪,以确保所开发的软件满足用户需求。软件测试是保证软件质量的主要手段,是根据软件开发各阶段的规则说明和程序内部结构而精心设计的一批测试用例,并利用这些测试用例运行程序以发现软件是否存在错误的过程,软件测试的范围应当包括更广泛些,除了考虑正确性外,还应关心程序的效率、健壮性等因素。
软件测试过程包含单元测试、集成测试、确认测试和系统测试四个步骤:
(1)单元测试:对每一个程序单元进行独立测试,检查各程序模块是否正确地实现了预定的功能。
(2)集成测试:把已通过测试的模块组装起来,对软件体系构造的正确性进行测试。
(3)确认测试:检查已完成的软件系统是否已满足了需求规格说明中的各项需求,软件配置是否完全、正确。
(4)系统测试:将经过确认的软件系统置入实际的运行环境中,与其它系统成份结合在一起进行测试。
2.单元测试
单元测试又称模块测试,是以软件系统设计的最小单位——程序模块为对象,进行正确性检验的测试工作。单元测试常被看作编码的附属品,在代码被开发、编译调试、审查后,单元测试用例设计便开始了。进行充分的单元测试,是提高软件质量,降低研发成本的必由之路。几乎所有的开发人员都会对每一段代码做一定程度的单元测试。如果一个模块要完成多项功能,可以将该模块看成由几个小程序组成,对每个小程序分别进行单元测试。如果是关键模块,往往还要做性能测试。
单元测试以详细设计说明书和源程序清单为依据,常采用白盒测试的用例,辅之以黑盒测试的用例,以寻找模块内部可能存在的错误为目的,主要完成模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试等任务。
(1) 模块接口测试
单元测试开始时,要对通过被测模块的数据流进行测试。包括调用该模块的输入参数的正确性、调用其子模块时提供参数的正确性、全局变量的定义在各模块中是否一致等。
(2) 局部数据结构测试
包括数据类型的一致性、变量名、变量赋值、全局数据对模块影响的正确性等检验。
(3) 路径测试
对基本执行路径和循环进行测试,查找由于错误的计算、不正确的比较或不正常的控制流而导致的错误。
(4) 错误处理测试
检测对错误条件的响应是否正确,错误描述是否与实际的错误是否相符、是否能够对错误定位、是否易于理解等。
(5) 边界测试
通过设定边界值检测数据流、控制流中等于、大于或小于比较值时出错的可能性。
在面向过程编程时代,单元测试所说的单元一般是指函数,而在面向对象编程时代,单元测试所说的单元一般是指类。以类作为测试单位,测试的复杂度相对较高,所以目前通常采用的办法是为软件开发建立对应的测试工程,为每个类建立对应的测试类,为每个函数建立测试函数测试结构化的局部代码。
3.单元测试用例的设计
测试用例是指对某特定的软件系统进行测试任务的描述,它体现了测试的方案、方法和技术,包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。
测试用例的设计也就是测试需求细化的过程,测试需求分析和测试用例设计是密不可分的,前者是后者的依据,后者是前者的体现。测试用例的设计应与复审相结合,根据相关设计信息设计测试数据,以增大发现错误的可能性。
单元测试用例可以选取正确输入、边缘数据和错误输入作为测试数据。以系统用户注册模块中出生年、月、日的设置为例,通过等价类划分法设计测试用例。
篇10
ISO26262标准概述
功能安全标准(ISO26262)是从电子、电气及可编程器件功能安全基本标准IEC61508派生出来的,主要定位在汽车行业定的电气器件、电子设备、可编程电子器件等专门用于汽车领域的部件,旨在提高汽车电子、电气产品功能安全的国际标准。
ISO26262从2005年11月起正式开始制定,经历了大约6年左右的时间,已于2011年11月正式颁布,成为国际标准。中国也正在积极进行相应国标的制定。
ISO26262主要内容包括:
·提供了汽车生命周期(管理,研发,生产,运行,服务,拆解)和生命周期中必要的改装活动。
·提供了决定风险等级的具体风险评估方法(汽车安全综合等级,ASILs)。
·使用ASILs方法来确定获得可接受的残余风险的必要安全要求。
·提供了确保获得足够的和可接受的安全等级的有效性和确定性措施。
功能安全受研发过程(包括具体要求,设计,执行,整合,验证,有效性和配置),生产过程和服务流程以及管理流程的影响。
安全事件总是和通常的功能和质量相关的研发活动及产品伴随在一起。ISO26262强调了研发活动和产品的安全相关方面。
符合性要求
1)如果要宣称符合ISO26262,那必须是符合其每个要求,除非有如下情况之一:
·根据ISO26262-2中,对不适用的要求进行安全行为的裁剪:
·针对不符合项,提出其说明理由,并对理由根据ISO26262-2进行评估:
2)所有安全行为的输出物都在ISO26262中有明确的规定。
3)下文中出现的列举各测试方法的表中,有不同的序号表示方法:
·连续的序号,比如1.2.3:所有的方法应被用于对应的ASIL等级,如果出现所列表中之外的方法背用于测试,则需要进行说明。
·可选的序号,比如1a,1b,1c:可以选择某个或多个方法进行测试,并优先考虑更高推荐指数的方法。如果多个方法被组合选择用于测试,则需要进行说明。
4)针对ASIL的各级,表中的每个方法都有对应推荐指数:
·“++”:最高的推荐指数
·“+”:建议使用
·“0”:不建议使用或不需使用
测试概述
ISO 26262-8中的第9节描述了“Verification”的目标、要求和建议、工作输出等。Verification是用于确保实现与需求的一致性,在安全生命周期的几个阶段中都会用到。包括概念阶段、产品开发阶段、生成和运营阶段。本文主要描述在产品开发阶段中的测试环节中,需要用到的各种测试要求和建议。
测试计划
1)在测试执行前,都需要建立测试计划,其主要包括几部分:
·测试范围:用于测试的产品内容:
·测试方法:用于测试的各种方法:
·测试标准:测试通过或失败的标准:
·测试环境:如果需要用到各种测试环境,比如仿真环境等,需要进行说明:
·测试工具:用到的各种测试工具:
·出现异常后的对策:
·回归策略:在测试对象发生变更时,指定其如何进行回归测试,比如全部回归、部分回归、和其他测试案例一起回归等。
2)测试计划的制定还需考虑到以下几个方面:
·测试方法的完整性:
·测试对象的复杂度:
·测试经验:
·测试技术的成熟性和风险。
测试规格
1)测试规格需要选择和指定用于测试的方法,并包括测试案例、测试数据和测试对象。
2)每个测试案例需要包括:
·序号:唯一的ID
·测试对象的版本号
·测试对象的条件和配置:针对测试对象的不同配置,需要选择合理的测试案例进行测试
·测试环境
·输入值和顺序
·期望行为:报刊输出值、输出范围、功能表现等
3)测试案例需要根据测试方法来分类。针对每个测试方法,除了测试案例外,还需考虑以下几方面:
·测试环境:
·相关性:
·测试资源。
测试执行和测试报告
4)按照上述章节中制定的测试计划和测试规格,进行测试的执行。
5)针对测试结果,其测试报告需包括以下几个方面:
·测试对象的ID:
·测试计划和测试规格的引用:
·测试环境、测试工具、标定数据:
·测试结果和期望值的符合度:
·测试通过或失败的结论,如果失败,还需要指明失败原因和修改建议:
·针对没有执行的测试案例,说明原因。
ISO26262中的测试阶段
ISO26262中涉及到测试的阶段共包括“硬件集成和测试”、“软件集成和测试”、“产品集成和测试”这三部分。下面章节分别介绍这三部分的要求和建议。
硬件集成和测试
ISO26262中“Part 5:ProductDevelopment:HardwareLevel”针对产品开发的硬件部分提出了专门的集成和测试要求和建议。
1 硬件集成和测试需要按照安全计划和验证要求来按计划进行:
2 硬件集成和测试需要按照产品集成和测试计划来进行:
3 针对变更,需要按照标准规定中的变更管理来对测试策略进行影响分析:
4 测试的设备可以按照国际标准(比如ISO17025)或公司标准来进行标定:
5 硬件集成测试的测试案例需要按照表1的方法进行设计:
6 针对硬件安全需求,硬件集成和测试需要对其安全机制实现的完整性和正确性进行验证,其方法如表2所不。
7 硬件集成和测试需要按照表3的方法进行外部压力环境下的鲁棒性测试。
软件集成和测试
软件单元测试
软件单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。ISO26262中规定了其相对应的要求和建议:
1 软件单元测试需按照“ISO26262-8节9中”的验证要求来有计划的定义和执行。软件单元测试的对象是具体的软件实现单元,在基于模型的软件开发过程中,软件单元测试的对象是其单元模型。
2 软件单元测试需要按照表4中列的方法进行,以完成以下目标:
·检查是否符合软件单元设计的具体要求:
·检查是否符合软硬件接口要求:
·检查功能是否正确实现:
·检查是否有异常功能:
·检查软件实现的鲁棒性,比如错误处理效率等:
·检查功能所需资源的完整性。
3 软件单元测试中的测试案例需要按照下表5中的方法进行分析设计。
4 软件单元测试中,对于需求的覆盖度、代码的覆盖度都需要进行衡量,具体方法如表6所示。如果覆盖度不够,还需要增加其他测试案例。
·代码的覆盖度都可以借助一些软件工具来实现:
·如果是基于模型的开发,其软件单元测试需要利用类似的模型的结构化覆盖指标来衡量:
·如果通过代码的打桩来进行测试覆盖度的衡量,必须保证打桩的代码和正常的代码的执行功能是一致的:
·对于覆盖度衡量目标,都需要给出一个合理理由来表示其不同的级别,对于无法覆盖的代码,可以通过检查等其他方法来进行验证。
5 软件单元测试需要尽可能的在真实的目标环境上执行,如果利用其他环境,则需要评估其与真实环境的差异、源代码和目标代码的差异,分析设计测试案例,以便在接下来的测试阶段中得到执行。
·测试环境的不同,会导致源代码或目标代码的不一致,比如不同处理器的位数不一样,会导致编译后的目标代码不一致。
·如果能利用目标环境中的相同处理器来运行软件单元测试案例,那是最有效的,但如果不行,则可以用处理器模拟器来代替,否则软件单元测试只能在开发系统中进行测试。
·软件单元测试可以在不同的环境中执行,比如模型在环测试(MIL)、软件在环测试(SIL)、处理器在环测试(PIL)、硬件在环测试(HIL)等。
·在基于模型的开发系统中,软件单元测试可以在模型级别进行,但模型与代码的执行比较测试必须要做,以保证模型与自动生成的代码的结果一致性。
软件集成和测试
软件集成和测试主要对实现的各软件模块进行集成,并验证其嵌入式软件实现是否符合软件架构设计。该阶段的要求和建议如下:
1 软件集成计划应该描述层次化的集成单个软件单元进软件组件中,直到嵌入式软件完全集成,并且应该考虑如下:
·软件集成功能的相互关系:
·软件集成和软硬件集成的相互关系。
注意:对于基于模型的开发,可以先集成各模型,然后对集成好的模型进行自动代码生成以完成整体软件的集成。
2 软件集成测试根据ISO26262-8:2011,第9节计划,定义并且执行。软件集成测试的测试对象是软件组件。对于基于模型的开发,测试对象可以是和软件组件相关的模型。
3 软件集成测试需要按照表7的方法进行,以完成以下目标:
·检查集成的软件是否和软件架构设计一致:
·检查集成的软件是否满足软硬件接口规格:
·验证功能的正确性:
·检查其鲁棒性,比如错误检测、错误处理机制的有效性:
·检查是否有足够的资源来支持。
4 测试案例需要按照表8中的方法进行分析设计。
5 对于软件架构级别的需求测试覆盖度,可以用来衡量测试的完整性,以及用于证明没有设计之外的功能实现。如果有需要,可以增加新的测试案例,或者提供一个合理的理由说明。
6 为了评估测试案例的完整性,同时确保没有多余的功能,根据表9列出的指标需要衡量出其结构覆盖率。如果覆盖率不够高,要么需要添加额外的测试案例,或者提供一个合理的理由说明。例如,结构覆盖率的分析可以用于发现测试案例的不足、无用代码、无效代码或者多余功能等。
·结构覆盖率可以利用工具计算出来。
·如果是基于模型的开发,结构覆盖率可以通过模型级别的模型结构覆盖率来统一计算。
7 作为产品的一部分,嵌入式软件需要被验证其包含设计的所有功能。如果嵌入式软件包含了设计之外的功能(比如用于调试的代码),则这些功能需要被验证是不影响软件的安全需求的。如果这些设计之外的功能在真实产品中保证不会被激活执行,那也是符合这个要求的:否则删除这些功能,也需要按照需求变更流程来统一处理。
8 软件集成测试需要尽可能地在真实环境中运行,如果不行,则需要评估测试环境与真实环境的差异性,并针对这些差异,在后续的阶段的真实环境的测试中设计专门的案例来执行。
·测试环境的不同,会导致源代码或目标代码的不一致,比如不同处理器的位数不一样,会导致编译后的目标代码不一致。
·针对各种测试,需要建立合适的测试环境。比如目标处理器的测试环境、仿真处理器的测试环境、开发测试环境等。
·软件集成测试可以利用模型在环测试(MIL)、软件在环测试(SIL)、处理器在环测试(PIL)、硬件在环测试(HIL)等测试手段进行测试。
软件安全需求验证
本阶段的目标是验证嵌入式软件符合软件安全需求,其所规定的要求和建议如下:
1 软件安全需求的验证需要制定计划,定义再执行。
2 为了验证嵌入式软件实现了软件安全需求,表10列了所需的测试环境。注意:已有的测试案例,例如在软件集成测试阶段使用的可以重用。
3 对于软件安全需求实现的测试需要在目标硬件平台上完成。
4 软件安全需求验证的结果需要考虑下面这些因素来评估:
·和预期结果一致:
篇11
20世纪50年代开始我国已经将砂石桩技术应用到加固地基的施工中,在实践过程中应用广泛,技术也日趋成熟,但是效果仍然到不到预期的要求,这是因为在施工中不断的遇到新的问题。经过多年的施工和实践积累,今天的砂石桩施工技术已经成为一种相对成熟的地基处理方法。应用的范围是松散砂土、粉土、填土等地基的处理。砂石桩作用的机理是:利用桩体的密度不断增加增加对周围土层的挤压,在辅以机械振动,实际上增加了周围土层的密实度,从而提高了地基的承载力。最终达到降低压缩性,降低、消除液化性的目的。目前,在砂石桩的施工中对于其作用效果的检测技术也随着砂石桩的普及而逐步发展完善。因为,对砂石桩处理地基的效果的检测是保证施工质量的重要手段,如果检测的方案、测试方法、评价标准等出现偏差,将会给后续施工带来潜在的风险,本文将在后面对砂石桩的施工、效果检测、评价等问题进行探讨。
一、检测方法的探讨
1 载荷实验的探讨
砂石桩检测中,载荷试验是一种主要的形式。其主要反应的是地基的承载力。这种方法是比较直观的方法,具体的检测方式通常有三种:一是单桩地基单元测试;二是多桩地基单元测试;三是单桩和桩间土组合单元测试。
(1)单桩地基单元测试
对单桩的单元化测试,具体的操作方法是以一个砂石桩为测试对象,测试处理的单位面积的承载能力。以此反应施工情况。例如,按三角形布桩,一个桩径为500mm的砂石桩,设计桩距是1.2m,置换率m=0.157,一个桩体所代表的地基平面单元面积为1.25m2。砂石桩的作用方式是一种作用力以柱心向四周发散性递减的形式。所以周围的土体密度也是由里向外、由强到弱的规律,因此在单元测试中选用圆形的承载压板,承压板的直径以单桩所代表的单位面积换算出来的。通过换算,上例的等效圆直径de=1.26m。
单桩测试的优点是:测试对砂石桩所增加的载荷总量小,测试的费用较低。同时也有一定的缺陷:所加载的载荷作用深度有限,一般达到的深度是承压板的边长或者直径的2-3倍。所以在实际当中这种方法适用的地基深度一般不超过5米的情况,或者上软下硬的地基类型。
(2)多桩地基单元测试
多桩基础单元测试,就是对多个桩基进行承载测试,具体的就是把多个桩柱连在一起作为一个检测单元。采用的承压板一般是圆形、矩形。承压板的具体尺寸应当根据多桩单元面积进行换算。选择多少桩数为一个单元,主要从一下两个方面来看:第一,处理地基的深度。第二,进行砂石桩施工后地基的变形情况。一般,地基的下部没有软土层的时候,尽量减少测量单位内砂石桩的数量。具体的方法就是在一定程度上减少了砂石桩所承载的单元测试的面积,进一步减轻了荷载体的承压重量,最终达到了降低检测实际成本的目的,
(3)单桩和桩间土组合单元测试
这是一种组合测试的方法,也就是将砂石桩的分布形式、桩径、桩间距和置换率综合在一起,以一个桩体为代表,按照它的基本平面面积为计算单元,通过换算得出复合地基承载特征值,这种形式计算过程比较复杂。实践中,组合测试的承压板面积较小较小,得出的地基处理深度也不大,一般情况下都用最小值来判定地基承载应力值。
2 对分层测试的探讨
(1)标准贯入试验方法测试
标准贯人实验法:分层测试砂石桩对砂土和粉土的挤密效果较好,相对的测试砂石桩对粘性土的挤密效果较差。对埋深不同的同一种土层的挤密效果也不尽相同。应用标准贯人实验方法测试砂石桩对地基的处理效果,首先一定要按照地基土层的分布情况来测试数据,按照不同深度、土层来进行检测。
(2)重型动力触探的分层测试
这种方法测试砂石桩体的密实度和承载力,也要按照地基土层的分布情况进行具体的测试和有效数据的统计。从而给出不同土层、不同埋深的检测结果,然后将结合和标准贯入实验的分层数据进行统计比照,按照土层得出复合地基承载力的最终检测结果。
二、评价方法的探讨
由于地基处理的目的不同,检测评价的侧重点也应有所不同。
1 对提高承载力的评价
对砂石桩承载力较高的工程中,评价要在全面了解砂石桩处理地基的范围和深度,土层的性质和桩的分布情况。在此基础上分析和研究得出地基处理所要达到的承载力指标和变形指标。同时,还要依据载荷试验的可靠性,再结合标准贯入、动态探试,对整个处理地基面积给予全面正确的承载评价。
2 对消除液化的评价
砂石桩应用的一个主要目的是消除液化,所以对地基的液化评价也是重要的一个指标。首先。需要了解施工场地的液化土分布和等级,按照要求进行设计。因为完全消除液化和部分消除液化对于砂石桩的施工要求是不同的。其次,要了解需要处理地基的深度和抗震需求等。最后,还要在测试阶段利用合理的地基测试方法测定地基液化的最终结果。
三、测试评价的实践经验
1 合理地制定检测方案
首先要评价一项工程的质量如何就要选用合理的测定方法,来测量质量是否达标。在砂石桩施工中评定承载力的高低是重要的质量标准,在以承载力为主要指标的工程中,一般依靠载荷测试来作为基础测定,并辅以动探法为测定方案。而在检测消除液化为主的工程中应当以标准贯入法测定消除效果,并辅以桩体重型动力触探和载荷试验,通过综合试验数据来给出最终的结论。不过不论采用什么方案,都要注意合理和经济两个要求。
2 恰当地选择原位测试方法
在地基施工变形要求不高的工程中,尽量采用单桩复合地基载荷测试。在采用载荷和动探对比法或者经验法测试中应当尽可能的多采用原位测试来增加检测样本,减少成本。
3 通过分析给出综合指
在对砂石桩处理地基测定的时候要给出复合的承载力和变形量、桩体承载力值、桩体密实度、桩间土承载力等基本数据,还要对这些指标进行分析,得出所要达到的承载力指标和变形指标以供后续施工参考。
四、结语
在地基处理的施工过程中务必要控制拔管的高度及其继振的时间,并严格按设计要求进行施工,确保砂石桩质量;同时,砂石桩在施工过程中应对周边环境和建筑物进行监测,若发现不良影响,应立即采取相应的补救措施;可根据施工场地的工程地质条件适当增大砂石桩的使用比例,这样既保证了工程质量,进一步缩短了工期,又能取得较好的经济效益和社会效益。
参考文献:
[1]高小旺,建筑结构工程检测鉴定手册[M],北京:中国建筑工业出版社,2008
篇12
基于Java EE架构的多层软件中,WEB服务器充当表示层,由STRUS2.0模式的STRUTS架构来实现,应用服务器主要用来架构业务层,实现事务处理和数据处理,数据库服务器主要实现存储过程。其架构如图1所示。
基于以上模型架构的分工,可分成一下几个步骤:
1)基于WEB服务的测试、应用服务的测试、数据服务的测试,相当与传统软件测试的单元测试。
2)WEB服务与应用服务、数据服务的交互测试,相当于传统软件测试中的集成测试。
3)三层服务器协同工作时的性能测试,更多的是进行稳定性测试。
1 在各层上的单元测试
根据在图1的分层,系统的单元测试分成三个单元:WEB服务单元、应用服务单元和数据库服务单元,其中web服务单元集成了客户端。
集成了客户端的WEB服务单元测试主要从一下几个方面来进行:
1)页面设计测试
一个WEB系统的页面应该从实用性和界面的简洁性两方面进行测试。实用性主要从功能方面出发,每一个页面都应该负责完成相应的任务,功能的承载量不能太多也不能没有;简洁性主要从界面的设计安排来进行测试,页面的版式应该符合WEB系统的性质,色彩搭配突出该系统的主题,数据项应该满足数据收集的需要,同时应该让各类用户很容易的使用该系统。
2)连接测试与功能测试
由于各个页面的连接与页面的功能是相关联的,相互连接的两个页面之间一定有功能的联系和交互。根据页面之间的这种关系,在测试的过程中可采用广度优先遍历和深度优先遍历两种方式,深度优先遍历保证功能的连续性,广度优先遍历保证功能的完整性。由于Struts 2应用中起作用的业务控制器而是系统生成的Action,所以功能测试的主要方法根据拦截器的原理进行测试,也容易实现。
3)语言设置测试
由于在Java EE开发过程中,中文乱码问题比较麻烦,在不同的系统中可能更为突出,所以在测试的时候从各个页面的编码方式入手。Struts2.0采用国际化配置,在不同的系统中采用相同的国际化配置。开发国际化的应用程序时,有一个功能是必不可少的――让用户快捷地选择或切换语言。在测试的时候站在不同语言用户的角度进行测试。
应用服务的单元测试主要是对模型层和spring所负责的事务以及hibernate所负责的ORM进行测试,也就是对class类、接口和ORM的操作测试。对于类的测试除了测试基类以外,继承和多态是测试的重点,其中的关系比较复杂。可以借助JUint工具进行测试。。
数据库服务器的单元测试主要是调用存储过程,测试这些存储是否能够满足功能需求,测试的重点是存储异常的排除,包括字符乱码问题。
2 集成测试
集成测试是将各个服务器的各个模块组装成一个完整的系统或子系统进行测试,测试的重点是服务器之间的接口和服务器内部各模块之间的接口部分。
在各个服务器通过单元测试的基础上,需要将三大服务器按照设计要求组装成系统,在此集成过程中最可能发生的错误有:
1)各个模块、服务器之间的数据传输会产生丢失;
2)各个模块、服务器之间的功能可能产生互相影响;
3)从页面传送到数据库的数据可能产生乱码;
4)单个模块的错误经过积累以后可能会被放大。
基于以上错误的考虑,服务器(三大没有承载功能的服务器)采用一次性集成,因为这事后续所有功能集成的基础,通过一个或几个简单的贯穿所有路线的实例的运行来最大可能的排除服务器的集成错误。对于功能的集成采用增量式集成,从页面的某一个功能为出发点,经过WEB服务器、应用服务器和数据库服务器验证是否得到正确的结果,然后逐一功能的进行测试,直至所有的功能。
特此说明的是,在服务器的一次集成过程中是有先后顺序的,应该是应用服务器和数据服务器集成,然后在和WEB服务器集成的由里到外的顺序,这样一方面保证了应用服务器操作数据库的底层要求,同时也向WEB服务器隐藏了底层的有关数据的操作,突出了应用服务器的“看管”功能。
各个服务器上的集成测试和整个系统的集成测试随功能的要求渐增进行,也就是所谓的增量模型。应用服务器上的集成涉及到Spring的事务管理和hibernate的ORM实现,模型层可通过HttpUnit和JUnit结合测试,逻辑层Spring采用MockObjet t测试框架来完成测试,SSH框架可spring一mock测试框架进行集成测试。
3 性能测试
性能测试是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。
软件的性能性能主要有时间性能和空间性能两种。时间性能主要指软件的一个具体事务的响应时间,空间性能主要指软件运行是所消耗的系统资源。在软件的性能测试中可分为一般性能测试、稳定性测试、负载测试和压力测试。
一般性能测试是指单个用户登录以后,系统主要食物的响应时间和服务器的资源消耗情况。
稳定性测试是指连续运行被测系统,检查系统运行是的稳定程度。稳定性测试方法比较简单,采用7*24(7天*24小时)的方式让系统不间断的运行。
负载测试是让系统在压力忍受极限范围之内连续运行来测试系统的稳定性。它主要测试系统在临界状态下运行是否稳定的一种方法。
压力测试是指持续不断的给系统增加压力直到系统崩溃为止,用来测试系统能够承受的最大压力。主要方法是不断的增加用户数量,20、30、40、……,直到系统崩溃。
根据以上的测试分类原理,可采用LoadRunner性能测试软件来进行测试,这种软件可以预测系统行为和性能,通过模拟成千上万用户实施并发负载及实时性能检测的方式来确认和查找问题,可最大限度地缩短测试时间,优化性能和加速应用系统的周期。
4 结束语
总上所述,基于Java EE架构的多层软件的测试采用传统的原理和面向对象的方法和工具进行测试。在测试的过程中手工测试和工具测试应该结合使用,而且工具测试只能是测试的一个补充,不能过多的依赖于测试工具。
参考文献:
[1] 梅勃.基于J2EE架构的Web应用系统测试方法研究与应用[D].合肥:合肥工业大学,2007.
篇13
单元测试是针对学生在一个单元的知识进行了系统的学习后,进行的一次阶段性的检测。它具有知识范围小,知识内容少的特点。所以说如何从语言学的角度在有限的范围内对学生理解和掌握英语语言的程度进行有效地检测,这是一个技术性的问题。更者,英语单元测试必须在学生已有英语学习的基础上,对“学生巩固、扩大基础知识,发展听、说、读、写的基本技能,培养综合语言运用的能力”的教学目标起到导向作用。同时,现行英语教材的内容的设计注重了话题、功能、结构、技能和知识相结合的体系,这也必须在单元测试中有所体现。因此,英语单元测试的选题策略是在紧紧地围绕各个单元教学目标和遵从英语语言习得规律的前提下,注重学生对所学知识的复习巩固,重视学生如何运用所学的知识。
一、选题要有代表性
在英语教材中,各个单元的知识点是为数不少的,包括语言知识(如词汇、语法、句型等)和文化知识,也包括已知的知识和未知的知识。虽然教材有计划地、相对集中地介绍了相关的语言和文化知识,但是为了检测学生在学习相关的知识后,能否投诸于运用,这就要求命题者在有限的测试题目中容纳尽可能多的信息。因此,命题者可以提出若干个预选命题方案,然后借助预测测试的结果,对不同的方案进行横向或者纵向的比较,再选出具有重点与非重点、能力与非能力、重点与能力等有代表性的题目。通常情况下,代表性的题目包含重点题、典型题以及综合运用题等,它们可以体现在不同的题型中。但是,命题者不能将语言信息或语言信息的测试的代表性建立在超量(如题目长、生词多)观念上。代表性的题目只有在“抓纲务本”的精神指导下,才能作出以点带面,触类旁通的效果,才能体现出语言测试的特点。
二、选题要有针对性
在英语教材中,单元教学内容的安排也体现了“秩序渐进、循环反复”的带有针对性的特点。事实上,对以英语作为第二语言的中学生而言,由于学习策略的效度的差异性,学生往往会对一些知识存在理解上或应用上的缺陷或疑惑,所以命题者的选题要能够让学生在一定程度上能借助于测试的手段观察、发现、探索和研究其自身语言学习上的差异。比如说,当今的中学英语语言测试体系不能体现出学生“说”的能力,所以命题者在选题的过程中,要切合于语用学的实际,参照“任务型”教学活动目标,有意识、有策略地通过单元测试的题型的转变,将“说”的能力测试融于“听”的测试中。这样的单元测试的命题导向就是针对学生之缺,了解学生之愁。还有,命题者要结合教学实际中的学生在平时作业中的“常见病”和“多发病”,选编一些“对症下药”的治病题,这也是具有针对性意义的。比如:feel like与would like的用法的差异性就可以成为测试的内容。
三、选题要有灵活性
在英语单元测试中的灵活性是指在一例的题目中容纳了多个知识点或能力点的考察,并训练了学生运用“一题多思”的思维方式。由于当今的英语教学模式侧重于“任务型”和“交际型”的活动,这就要求学生具备能在不同层次、不同形式的情景中,综合应用语言知识完成语言任务的能力;这也就要求测试题目能体现出不同知识点之间纵横联系,能检测学生的综合分析问题和解决问题的能力。也就是说测试题灵活性要起到影响试题区分指数的作用,这也就有利于指导教师将来的授课行为,有利于培养学生的解题思维。比如说,完形填空的空白就显示了对两种语言模式(一者是作者表达自己的思想的语言模式,另一者是读者根据自己的理解作出的猜测性语言模式)和一种测试意图(命题者的测试目的),避免了就题论题的俗套。当然,命题的灵活性的特征要体现在与教材关联性上,并不是指“难”、“偏”、“怪”。
四、选题要有科学性
一份高质量的英语单元测试试卷并不是题目的堆砌,而是建立在科学性和合理性的基础上的语言信息(包括知识和能力)的检测。它必须达到巩固知识和培养能力甚至引导未来教学活动的目的。一个单元的知识体系,在语言知识上要学生追求多方位,在学习能力上对学生讲究多层次。所以在英语单元测试中,以此为基础的单元测试的选题也要体现出以系统性和整体性为内涵的科学性。命题者只有在熟悉教学大纲和课程标准的双重前提下,才可能使试卷将单元测试的内容有效地包容并形成一定的可行性和可信性的效能,才能促进学生通过英语测试对英语学习的内容进行控制管理,从而有效地学习。同时,科学性也必须体现在量和数的合理分配上。