电子计价秤软件测试关键技术研究

类别:公司新闻 时间:2018-03-26 点击:54 次

本文从静态测试方法和动态测试方法两个方面对电子计价秤软件测试中的关键技术进行了研究和总结,包括代码检 查、等价类划分测试、控制流测试、数据流测试等,能够为电子计价秤软件测试领域的研究提供参考,同时可以为相关计量器具软件 的测试提供借鉴。
0.引言
在我国经济迅速发展和商品交易日益频繁的社会背景下, 电子计价秤以其称量快速、清晰,相对比较准确和价格低廉的 优点,在超市、农贸市场、五金百货店、零售专卖店等各种需要 进行计重计价的领域得到了大量的应用,逐步替代了传统的杆 秤、台案秤及弹簧度盘秤。
虽然绝大多数电子计价秤的生产厂商都能遵守职业道德, 生产符合国家计量标准的产品,但是仅仅依靠生产厂商的自律 显然无法保证电子计价秤的质量。随着电子计价秤的广泛应 用,目前市面上出现了一些利用硬件或软件进行作弊的现象, 损害了贸易公平和社会诚信,破坏了计量管理秩序,给人民群 众的生活带来了困扰。因此,对电子计价秤软件进行测试,以 发现软件中存在其中的缺陷和后门,对于规范电子计价秤市场 具有十分重要的意义。
在国际上,已经出台了一些关于电子计价秤软件的标准或 意见,而国家质量监督检验检疫总局也正在编写电子计价 秤软件相关的国家标准m。这些标准和意见为电子计价秤软件 的质量提供了明确的度量指标和度量算法,但是它们对这些指 标的测试方法并没有进行详细明确的规定。因此,对电子计价 秤软件测试技术的研究就成为了迫切的需求。
本文在对市面上一种常见型号的电子计价秤软件的实际 测试工作的基础上,从静态测试方法和动态测试方法两个方面 对电子计价秤软件测试中的关键技术进行研究和总结,包括代 码检查、控制流测试、数据流测试等,能够为电子计价秤软件测 试领域的研究提供参考,同时可以为相关计量器具软件的测试 提供借鉴。
1.电子计价秤软硬件结构介绍
电子计价秤通常采用单片机CPU作为处理核心,其输入 包括两部分称重信息和按键信息,其输出是数码管的显示。虽 然电子计价秤的软硬件结构各不相同,但是其基本原理一致, 即获取压力传感采集的称重信息和用户输入的按键输入,经过 计算后,将计算结果输出到数码管上进行显示。下面从硬件和 软件两个方面对电子计价秤的基本原理进行介绍。
1.1硬件介绍
电子计价秤的硬件以CPU为核心,外围硬件主要包含三 部分:称重部分、键盘输入部分和显示部分。其硬件结构图通 常如图1所示。

称重部分通常由压力传感器和A/D转换模块组成。压力 传感器负责获取托盘上物体称重的模拟信号再传输给A/D转 换模块,A/D转换模块负责将压力传感器获取的模拟信号转 换成数字信号再传输给CPU。通常使用专门的A/D转换芯片 进行A/D转换,以保证足够的精度。
键盘输入部分主要是键盘驱动电路。用户的键盘输入将 通过键盘驱动电路转换成CPU的预设输入接口信号。因而对 于不同厂商和不同型号的电子计价秤而言,其键盘驱动电路以 及键盘输入接口也会有所差异。
显示部分通常由LED数码管和数码管显示驱动芯片组成。 LED数码管通常会显示称重信息,单价信息,金额信息等,由数 码管显示驱动芯片控制,而数码管显示驱动芯片又由CPU发 送指令进行控制。
CPU负责所有的逻辑计算部分,包括称重的计算、单价值 的获取、计算金额等,同时CPU还负责控制A/D转换芯片以 及数码管显示驱动芯片。这是整个电子计价秤的核心部件,其 中的软件正是本文所讨论的主体。
1.2软件介绍
电子计价秤软件通常包含了两个部分,中断处理程序部分 和主程序部分。中断处理程序负责获取压力传感器的输入和 用户的按键输入,主程序负责主体的逻辑计算以及结果的显 示。主程序通常需要包括6个模块主要的模块,它们分别是:
(1)初始化模块该模块负责对程序的部分变量进行赋值, 同时对A/D转换芯片以及数码管驱动显示芯片等进行初始化 设定。
(2)重力传感器数据平滑模块该模块负责对A/D转换芯 片获取到的数据进行平滑处理,例如对多次连续数据取平均值
(3)称重和金额计算模块:该模块获取重力传感器数据平 滑模块的计算结果,再根据称重与电压之间的计算关系计算称 重,同时再由称重信息和单价信息计算金额,此时需要考虑去 皮和累计等情况。
(4)标定处理模块该模块负责电子计价秤的标定,即将一 些重要的数据写入e2prom,作为以后计算的依据。这些重要 的信息包括电压与称重之间的线性关系,最大量程,最小分度 值等。
(5)按键处理模块该模块通过轮询按键的输入端口来确定 用户的按键输入,再对按键进行相应的处理。
(6)数码管显示模块该模块负责将称重、单价以及金额等 信息显示到数码管上。
这6个模块之间的调用关系如图2所示。

2.静态测试方法
根据是否执行被测试程序,软件测试可划分为静态测试方法和动态测试方法。静态测试方法是对被测软件进行特性分 析的方法的总称,是指不运行被测软件程序本身,仅通过分析 或检查源程序以及软件文档来检查程序的正确性。
代码检查是一种最常见的软件静态测试方法。代码检查 通常采用人工阅读代码的方式,人工模拟程序在计算机中的执 行,检验程序中每一条语句的运行结果,进而判断程序的正确 性,找出软件内部的编程问题和详细设计问题。相比动态测试 方法,代码检查在错误发现上效率更高,对中小规模的实时嵌 入式软件测试统计数据表明,70%〜80%的软件错误可以被代 码检查所发现。然而,代码检查非常依赖检查人员的专业知识 和经验的积累,不同知识水平经验水平的人员在进行代码检查 时效率差距会非常大。同时代码检查非常消耗时间,特别是当 软件规模十分庞大同时又缺少相关文档资料时,进行完整的代 码检查几乎是不可能。对于电子计价秤而言,其软件规模通常 并不大,因而很适合使用代码检查的方法进行软件测试。
对汇编程序进行代码检查比对使用面向对象语言编写的 程序进行代码检查更加复杂,因为汇编程序的主程序与子函数 通常混在一起,这增大了汇编程序的理解难度,因而需要将汇 编程序的主程序与子函数人工进行分离。
在8051汇编指令中调用子函数的指令是ACALL指令和 LCALL指令,其格式为ACALL/LCALL A,从子函数返回的 指令是RET指令。当程序执行到ACALL/LCALL A指令 时,程序会跳转到标号A继续执行,当程序继续执行到RET指 令时,程序会从子函数中返回,跳转到上一条ACALL/LCALL
A指令的下一条指令继续执行。因而以标号A为起始,以 RET指令为结尾,中间的代码均为子函数代码,每个子函数均 可看作一个功能独立的代码段。
以市面上一种常见型号的电子计价秤软件为例,经过主程 序与子程序的分离,其3744行的汇编代码中主程序的行数约 为1500行左右,而总共存在67个子函数。在此基础上,再对 分离出来的主程序进行子功能模块的划分,从而构造出软件的 流程图,如图3。

3.动态测试方法
动态测试方法是指通过运行被测试程序,输入相应的测试 用例,检查运行结果与预期结果的差异,从而测试出被检软件 的正确性。动态测试方法通常由三部分组成:设计测试用例, 执行被测程序,比较输出结果与预期结果。而根据是否针对系 统的内部结构和逻辑过程,动态测试方法又可划分为白盒测试 和黑盒测试。
3.1黑盒测试
黑盒测试也称功能测试,是指从用户的角度出发,在完全 不考虑程序内部结构和内部特性的情况下根据程序的需求规 格说明书,检验软件的功能是否符合用户需求。等价类划分测 试是最常用的黑盒测试方法,是指把程序的输入域划分成若干 等价的子集,然后从每个部分中选取少数代表性数据作为测试 用例。
对大部分的电子计价秤而言,其输入包括两部分,压力传 感器的输入以及按键的输入。使用等价类划分的方法,压力传 感器的输入可以划分为超重,正常重量,过小重量以及负重量 四种等价类,而按键的输入情况较为复杂,但是从基本的称重 功能来看,可划分为单次金额计算,累计金额计算两种等价类。
3.2控制流测试
白盒测试也称结构测试,是指依据程序内部逻辑结构相关 信息来进行测试用例的设计。在对市面上一种常见型号的电 子计价秤的测试中,白盒测试是在仿真平台上进行的。白盒测试又可细分为控制流测试以及数据流测试。
控制流测试与程序的控制流图密切相关。控制流图(Con- tro丨Flow Graph)是指用图的方式来表现程序执行过程中所 有的可能执行路径。在控制流图中只有两种图形符号节点代 表了程序中的语句以及语句块,其中矩形表示普通语句,菱形 表示分支语句;控制流线通常是箭头,它代表了程序的执行顺 序。控制流测试旨在覆盖程序中的所有语句和语句块,通常使 用判定/条件覆盖率作为测试充分性的标准。
以市面上一种常见型号的电子计价秤软件的一个子函数 S01FB为例分析控制流测试的基本方法。如图4所示,左边为 子函数S01FB的代码,中间为该子函数对应的流程图,右边为 流程图中各个编号所实际对应的代码或代码块。

该子函数的作用是:若1DH位为0时则将内存地址单元 (6FH)(6EH)(6DH)的值加上内存地址单元(6CH)(6BH)(6AH) 的值再赋值回(6FH)(6EH)(6DH);若1DH位为1时且1EH位 为0时将内存地址单元(6FH)(6EH)(6DH)的值减去内存地址 单元(6CH)(6BH)(6AH)的值再赋值回(6FH)(6EH)(6DH);若 1DH位为1时且1EH位为1时将内存地址单元(28H)、(6DH)、 (6EH)、(6FH)全部赋值为#00H。由图中可以看出,对于该函 数,要达到判定/条件完全覆盖,需要执行3条路径1-2-3-4, 1_2-3-5-7,1-2-6-7。因而测试可以设计3个测试用例:(1) 1DH位为1且1EH位为1 (2)1DH位为1且1EH位为0 (3) 1DH 位为 0。
3.3数据流测试
数据流测试指关注变量接受值的点和使用(或引用)这些 值的点的结构性测试形式。定义/使用测试是一种最常见的 数据流测试方法。使用定义/使用测试进行数据流测试时需 要首先了解如下一下几个概念。
(1)定义:节点n e G(P)是变量v G V的定义节点,记做 DEF(v, n),当且仅当变量v的值在对应节点n的语句片段处定义。
⑵使用:节点n e G(P)是变量V G V的使用节点,记做 USE(v, n),当且仅当变量v的值在对应节点n的语句片段处使 用。
(3)定义-使用路径:关于变量v的定义-使用路径(记做 du-path)是PATHS(P)中的路径,使得对某个v e V,存在定 义和使用节点DEF(v, m)和USE(v, n),使得m和n是该路径 的最初和最终节点。

⑷定义-清除路径:关于变量v的定义清除路径(记做 dc-path),是具有最初和最终节点DEF(v, m)和USE(v, n)的 PATHS(P)中的路径,使得该路径中没有其他节点是v的定 义节点。
(5)全定义-使用路径准则集合T满足程序p的全定义- 使用路径准则,当且仅当所有变量v e V, T包含从v的每个 定义节点到v的所有使用,以及到所有USE(v, n)后续节点 的定义清除路径,并且这些路径要么有一次的环经过,要么没有环路。
然而在汇编程序中,通常并不存在显示的变量声明,程序 的计算逻辑使用寄存器和内存地址作为操作数。在汇编程序 中,寄存器经常被当作临时变量进行使用,同时汇编程序中对 寄存器的定义和使用的次数会非常多,如果对所有的寄存器均 进行定义使用覆盖的话,测试用例数量将会十分巨大,因此在 电子计价秤软件的实际测试中,可以在代码理解的基础上对所 有的内存地址以及部分的寄存器进行定义/使用测试。
以市面上一种常见型号的电子计价秤软件的一个子函数 S0C88为例分析控制流测试的基本方法。如图5所示,左边为 子函数S0C88的代码,右边为与汇编代码作用相同的高级语 言的程序。图中介绍了高级语言程序中的变量与会汇编程序 中的寄存器以及内存地址之间的关系,同时图中也包含了变量 的定义/使用覆盖覆盖分析。用图5可知,针对此子程序要达 到全定义-使用路径覆盖,需要覆盖7条路径1-2、1-3、1-4、 1-6、1-7、3-5、4-5,而仅仅需要两个测试用例即可做到完全覆 盖:1) R7R6R5 >= R4R3R2 (2) R7R6R5 < R4R3R2。
4.结论
本文以市面上一种常见型号的电子计价秤软件作为实例, 从静态测试方法和动态测试方法两个角度对电子计价秤软件 的测试进行了分析,其中静态测试方法主要包括代码检查,动 态测试方法主要包括等价类划分测试,控制流测试和数据流测 试。文中对汇编程序如何进行代码检查以及数据流测试进行 了初步的探讨,能够为电子计价秤软件测试领域的研究提供参 考,同时可以为相关计量器具软件的测试提供借鉴。

上一篇:上一篇:电子皮带秤软件设计
下一篇:下一篇:美国制造的可靠性和耐用性俱佳地磅

中国领先的称重软件技术提供商

The Leading Provider of Geomatic Solutions in China

展开收起网站地图