嵌入式星载软件单元测试方法探讨
2014-03-12曹斌
曹斌
摘 要 软件测试是软件质量保障的基础,而单元测试是软件测试的重要阶段,单元测试用例的设计是软件测试的重要环节。文章重点结合xx型号嵌入式星载软件的一个模块,详细介绍并论述单元测试的方法。
关键词 软件质量;单元测试;测试用例设计;安全性措施
中图分类号:TP311 文献标识码:A 文章编号:1671-7597(2014)02-0026-03
YingHuo-1 Mars Probe Embedded software unit testing methods
CAO BIN
Abstract:Software testing is the key to software quality assurance. Unit testing is an important stage of software testing. The design of the unit test cases is an important part of software testing. This article focuses on combination of YingHuo-1 integrated electronic system software introduces and discusses the test case design methods, and provide an idea for the design of test cases.
Key words: Softeware quality; Unit testing; Design of test cases; Security measures
随着计算机技术的不断发展,软件质量成为产品质量的一个不可或缺的组成部分。尤其对于航天型号来说,软件的可靠性安全性设计更加重要。为保障软件质量,软件测试则是关键的技术环节。软件测试是软件测试人员或者软件测试工具来测试或者运行特定的系统过程,它的目的是验证它本身是否满足需求规定的要求、预期设计结果与世界结果的差异。
在软件开发过程中,单元测试是最低级别的测试活动。单元测试是将独立的单元模块与其他部分分离的情况下来测试的。单元测试作为编码的一种辅助手段,无论在程序修改、移植在新的环境中,它都应该具备可重复性。因此,所有版本的单元测试都应该是在软件的开发生命周期中进行的。
根据航天飞行器软件的设计开发特点,其需要较高的软件可靠性、健壮度、以及无错的设计要求。本文针对这类软件的单元测试进行测试流程以及用例设计方面的描述。
1 嵌入式航天飞行软件单元测试流程
图1 软件单元测试测试内容
Fig.1 Test content of software unit test
单元测试是测试人员设计的一个代码模块,用来验证被测试代码的一个明确的功能的正确性。一般来说,一个单元测试的用例设计是用来判断一个特定条件背景下的某个特定函数的逻辑。
单元测试针对每个程序的模块,主要测试5个方面的问题:模块接口、局部数据结构、边界条件、独立的路径和错误处理,如图1所示。
1.1 文档审查
检查文档的流程如图2所示,文档检查主要包括文档内容的完整性、一致性。同时度量文档编写的质量。
图2 文档审查工作流程
Fig.2 Document review workflow
图3 代码审查
Fig.3 Code review workflow
1.2 代码审查
代码审查如图3。代码审查是审查代码的设计与文档描述之剑的一致性,还有代码逻辑正确性、程序的结构和代码的可阅读性。
1.3 动态测试过
动态测试即测试模块能否正确地运行需求中所描述的内容,还有在极限条件、边界条件、溢出条件下的健壮度。在动态测试过程中,应该对被测试模块给出执行路径、语句覆盖率、分支覆盖率等一些量化的数据。
在进行对xx型号应用软件的单元测试中,主要的测试流程如图4所示。
2 测试用例设计实例
2.1 需求分析测试
根据动态测试中的要求,本节用实例演示,对一个被测模块的覆盖率统计。
实例是XX型号软件中某判断电池是否正常的函数。
function IsBatteryTempNormal return Boolean is
TempVolt1:Float;
TempVolt2:Float;
result:Boolean:=False;
begin
TempVolt1:=GetEffectValue(16);
TempVolt2:=GetEffectValue(17);
if (a > TEMP1 and a < TEMP2) or
(b > TEMP3 and b < TEMP4) then
result:=True;
end if;
return result;
end IsBatteryTempNormal;
上述程序模块,a/b变量在不同值的情况下,模块返回不同的计算结果。软件流程图如图5所示。
图5 软件逻辑流程图
Fig.5 Software logic flow chart
根据需求分析,该程序单元包含两个判定,即a∈(TEMP1,TEMP2)和b∈(TEMP3,TEMP4)。endprint
2.2 测试用例设计
在本函数中,共有两种判断条件,单一判断和组合判断,根据流程图的分支结构,设计可以用来覆盖所有分支的测试用例,满足分支覆盖率的测试指标。
满足全语句覆盖需要3个用例,见表1。
满足全分支覆盖需要9个用例,见表2。
边界测试用例设计需要4个用例,见表3。
3 利用工具进行单元测试
Adatest95是一款支持M1750 Ada程序的单元和集成测试工具,由英国的IPL公司开发。
AdaTest95支持采用Ada83、Ada95编写的程序的单元测试,包括桩函数的定义、单元模块的输入设定、单元模块涉及全局变量的设定以及返回值检测、全局变量检测、语句覆盖率分析、分支覆盖率分析等单元测试功能。
在AdaTest95测试工具的帮助下,无需考虑驱动模块,驱动模块由该测试软件缺省完成。桩模块是额外的开销,虽然在单元测试中必须编写,但并不是作为最终的结果。
被测模块、驱动模块和桩模块共同构成了一个如图6所示的单元测试的测试环境。
软件使用归纳起来一共分成九步,具体流程如图7所示。
4 测试结论
按照测试计划中各个用例的要求,一共进行了16个用例的测试。测试用例输出都满足期望输出要求,测试结果正确;各被测模块的语句覆盖率、分支覆盖率、错误路径覆盖率均达到100%。
5 结束语
通过对软件进行单元测试,确保了软件在编码上的逻辑正确性、验证了软件功能与文档设计的一致性。降低了软件开发风险以及开发成本,更是对航天飞行器软件的高可靠性、安全性提供了保障。
参考文献
[1]易海胜.单元测试用例设计方法初探[J].武汉科技学院学报.
[2]张巍,尹海波,孙立财.软件的单元测试方法[J].光电技术应用.
[3]中国航天科技集团公司软件专家组.航天软件工程实施技术指南及范例(修订版)[M].
[4]姜静波,蔡建平,郭勇.Ada程序设计语言高级教程[M].
[5]Myers,G,J.,张晓明,黄琳.软件测试的艺术[M].
[6]马瑟,王峰,郭长国,陈振华.软件测试基础教程[M].
[7]徐宏革.白盒测试之道[M].endprint