本文通过讨论地磅软件开发过程中各阶段不同关注点,提出了同步测试的方 法,即针对软硬件选型、概要设计、详细设计、编码和集成和释放等各阶段,运用合理的测 试评价方法,帮助项目评估设计风险、确保设计质量。
一、前言
随着信息技术发展和客户需求复杂度的提高, 地磅领域的软硬件平台已经跨入了复杂嵌入式甚 至工业PC阶段。同时,计量产品国际标准 (OIMQ对衡器软件的要求也不断提高。为此在 衡器软件开发中,软件测试的重要性日益突显。 通过在软件开发和测试管理实践工作中的摸索, 作者整理出了 一套同步测试管理的方法,除了确 保软件质量之外,可以提高开发效率,避免设计 返工。
二、地磅产品软件开发的流程
地磅产品软件开发的流程通常包括以下几个 阶段:需求分析和需求确认,核心架构设计,概 要设计,核心功能开发,详细设计,详细功能开 发,系统集成和产品释放。通常的做法是在详细 功能开发结束后引入单元测试、集成测试,并最 终做用户测试。这种做法的弊端是,一旦在集成 测试中发现结构性问题,会导致项目回到前面的核 心架构设计阶段,导致项目资源浪费和时间推迟。 为此,在产品开发过程中,必须考虑尽可能在设计 的早期通过测试发现问题。在项目管理领域有一个 普遍认同的数学模型: QL = StdCost x exp k/T,即 质量损失与错误发现的时机成指数关系。越早发现 设计失误,质量损失越小。
为了提高开发效率,提出的同步测试管理流 程图,如图1所示。
(一)架构确认测试
在需求确认后,测试人员需要与项目经理明 确核心参数,比如:称重数据更新速率、通讯响 应最大延时、显示速率和数据库查询效率等,在 核心架构设计过程中,通过构造PC仿真系统或者 在嵌入式开发板上构造最基本系统,模拟测试相 关核心参数是否达到要求。对于易受其它条件影 响的不确定量,通过改变条件进行多次仿真,然 后采用统计方法确定参数分布,以确保核心架构, 满足设计要求。
(二)核心功能测试
对于一款地磅产品,基于计量认证的要求, 通常需要在上市前至少提前六个月向国家计量管 理机构申请样机型式试验,同时需要根据有关法 制要求通过法制计量软件认证。为此,需要提前 完成与计量相关的核心功能测试主要指计量相关软件测试。在核心功能开发完成后,需要根 据法制要求,制定计量相关软件测试计划并实 施。这方面的测试包括OIML相关要求(如清 零、去皮、零跟踪、标定、量程及分度值、过载 和欠载等,以及法制软件安全合规性测试如 按照」」F 1182测试计量数据流安全性,标定参 数修改记录等。核心功能测试完成后,可以确 保核心计量软件功能合规、完整和可靠,不影响 CMC、OIML、NTEP等国内、国际计量产品认证 的时间安排。
㈢代码走查
详细设计通常伴随一些接口和模块的定义。 在每个模块完成后,有必要进行代码走查(code walkthrough)。代码走查的目的交换有关代码是如 何书写的思路,并建立一个对代码的标准集体阐 述。在代码走查的过程中,开发人员都应该有 机会向其他人来阐述他们的代码,即便是简单的 代码阐述也会帮助开发人员识别出错误并预想出 对以前麻烦问题的新的解决办法。
除了帮助发现错误外,经过走查的代码应该是 参加成员大部分能认同的,并且参加者是每个人 都能读懂的逻辑清晰的代码,并且通过交流提高 项目成员的凝聚力,提高其业务认知度,最后能 形成不同产品之间可以共同使用的模块级代码,实现设计复用。
(四)单元测试
单元测试应该贯穿于每个软件程序员编程过 程的始终,在任何代码完成后都需要进行单元测 试。单元测试是指程序员编写的一小段代码,用 于检验被测代码的一个很小的、很明确的功能是 否正确。如果是C语言,那么每个函数都需要被 覆盖到。如果面向的对象是C++或者C#,那么每 个类都应该被覆盖到。
单元测试可视作是程序员编码工作的一部分, 没有通过单元测试域者单元测试覆盖率较低 的代码,往往会在后续的集成测试和可靠性测试 中暴露出大量错误(BUG。那时候,对这些BUG 的定位会带来极大的工作量,因为可能发生错误的范围太广了。
(五)集成测试
当所有的模块代码全部完成,并融合到一起 联调成功后,需要进行集成测试。单个模块具有 高质量但不足以保证整个系统的质量。有许多隐 蔽的失效是高质量模块间发生非预期交互而产生 的。集成测试中包括:
1)功能性测试。使用黑盒测试技术针对被测 模块的接口规格说明进行测试。
2)非功能性测试。对模块的性能或可靠性进 行测试。
另外,集成测试的必要性还在于一些模块虽 然能够单独地工作,但并不能保证连接起来也能 正常工作。程序在某些局部反映不出来的问题, 有可能在全局上会暴露出来,影响功能的头现。 由于现代衡器软件越来越多地应用到无线通讯、 现场总线、一维/二维条形码打印和关系数据库等 对CPU、内存、数据总线等资源消耗型的功能模 块,当单独测试某一模块功能时,不一定会暴露 缺陷。当系统集成完成后,所有的功能模块会在 资源竞争中暴露有关冲突防范机制在架构设计和 代码实现中的有关设计缺陷。
㈥系统测试
系统测试的目的是验证最终软件系统是否满 足用户规定的需求,所以系统测试需要针对软件 需求逐一验证其功能是否符合要求,同时需要考 虑安全测试与系统健壮性测试。
系统功能测试与集成测试中的功能测试基本 类似,不再赘述。
随着法定计量器具新的国际软件要求的明确 和细化,安全测试成为衡器产品软件开发过程中 极其重要的一部分。在衡器产品软件中重点需要 关注的是法制相关数据的存储、读写安全性,以 及其在通讯传输过程中的可靠性。在安全测试中, 通常可以采用让不了解该项目情况的专业软件工 程师扮演黑客的角色,采用专业手段设法侵入系 统,例如:读取EEPROM数据私图分析并破解标 定参数位置、格式和校验码;或者通过内部通讯 口截取数据流分析、破译计量数据格式并试图修 改等。从理论上说,没有任何一个软件系统是绝 对安全的,假以时日,总可以破解。因此软件系 统测试中安全性测试的准则是要想方设法使侵入 系统所需的代价更加昂贵,在项目起始就要明确 要求例如,破解计算量超过3个月,超过这一 标准,即视作符合设计安全性要求。
系统健壮性测试也就是我们常说的压力测试 (Stress teSt。指在正常资源下使用异常的访问量、 频率或数据量来执行系统。对于常见的衡器产品, 在压力测试中可执行以下测试。
1)环境压力膜拟电压极限、温度极限网络 拥堵等状况,测试在硬件和软件处于临界状态 下,产品的表现。通常,在这种情况下,最低的 要求是产品的误动作不应对安全、贸易结算数据 造成影响。例如在控制用称重设备遇到临界状 态时,不应使I/O 口处于允许外部电气设备工作状 态;在商用条码秤处于临界状态时,不应允许进 行交易一打印标签或记录交易数据。
2)增加输入量及频率,比如采用网络数据轰 炸技术提高数据输入量,或者是模拟多个键盘命令 同时或者相近时间产生。看产品是否仍能正常工作。
3)大量分配、占用内存,看在内存不足的情 况下,产品如何表现。
在笔者参与的几个地磅产品项目中,尝试运用 了以上软件开发与同步测试方案,并在测试过程中 引入了自动化测试手段,在项目完成时间和项目总 的人力资源投入以及上市质量等方面均取得了较好 的效果。但也遇到了一些操作层面的问题,例如: 如何选择测试工具简化并规范单元测试,如何定义 不同场合地磅产品的健壮测试标准等……但,从总 体而言,同步测试方案的确比先开发再测试的传统 方法有极大的改善,随着软件复杂度的提高,这一 方法的优越性将进一步体现。