测试驱动开发在星载软件开发中的应用

时间:2022-06-21 10:08:06

测试驱动开发在星载软件开发中的应用

【文章摘要】

本文介绍了一种测试驱动开发的软件开发方法,在设计测试用例的基础上完成软件设计实现的过程,继而通过重构代码来优化软件,分析了这种方法的优缺点,结合星载软件开发的工程要求,在传统瀑布模型中加入测试驱动方法,用结对编程和完善测试环节的方法弥补测试驱动开发的缺点,在工程实践中取得了提高程序编写质量和减少开发时间的效果。

【关键词】

测试驱动开发;结对编程;星载软件

1 概述

自20世纪60年代以来,人们发现了“软件危机”带来的巨大危害,于是在软件工程领域做了大量研究工作,逐渐形成了一整套软件生命周期的开发理论,随着软件规模越来越大,项目周期缩短,而用户的需求快速变换,传统的开发方法已不能适应软件开发的需要,而测试驱动开发(简称TDD),是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

2 测试驱动方法的优缺点分析

2.1 测试驱动的优点

测试驱动开发相对于传统的软件开发方式,具有以下特点:

1)测试驱动开发根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化;

2)出于易测试和测试独立性的要求,测试驱动开发促使开发者实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性,从而明显地缩短了设计决策的反馈循环;

3)测试驱动开发将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量;

4)测试驱动开发提供了持续的回归测试,便于开发者对代码进行重构,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此可以避免一些软件潜通路问题;

5)系统可以与详细的测试集一起,从而对程序将来版本的更改和扩展提供方便;

6)由于编写测试用例和代码过程上统一,降低了测试人员理解代码所花费的成本。

2.2 测试驱动存在的问题

根据已采用测试驱动开发的人员评价,测试驱动方法也存在以下问题:

1)开发者可能只完成满足了测试的代码,而忽略了对实际需求的实现;

2)会放慢开发实际代码的速度,特别对于要求开发速度的原型开发造成不利;

3)对于图形化用户界面(GUI)、资料库和Web应用而言。构造单元测试比较困难,如果强行构造单元测试,反而给维护带来额外的工作量;

4)使得开发更为关注测试用例,而不是设计本身;

5)单纯的测试驱动开发会导致单元测试的覆盖度不够,比如可能缺乏边界测试。

3 某星载管理软件开发过程

3.1 测试驱动思想的引入和改进

针对测试驱动开发方法的优缺点,根据航天嵌入式软件开发的行业要求,在充分继承航天软件原有V型瀑布模型开发模式的基础上,不改变原来开发模式的主体结构,在软件需求分析阶段引入测试驱动开发的思想,提前到需求阶段就同步开展测试用例和测试计划的编制工作,由面向用户的系统分析员直接设计测试用例。由于星载嵌入式软件对于软件可靠性要求较高,因此在开发测试过程中,在代码完成后还是需要补充单元测试和组装测试,以保证测试的覆盖性,单元测试用例要覆盖详细设计中描述的每个子程序,语句覆盖率、分支覆盖率均要达到100%,加强对边界点的测试以及边界外的测试。

软件开发组采用双人双岗制,用结对编程的方式弥补测试驱动开发可能忽略实际需求的不足之处,在两人结对编程中,一个人负责输入代码,称为“驾驶员”,另一个人负责审查代码,称为“观察员”,在同一个软件开发过程中,两者的角色可以经常互换,观察员主要考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理,而驾驶员专注于当前任务的“战术层面”,两人的协调工作则带来纪律和时间管理的提升。

在操作层面上,观察者编写可能导致当前程序出错的测试用例,驾驶者修改代码以通过该用例,观察者编写新的测试用例,以此类推。这个循环持续到观察者不能写出失败的测试用例。显然,结对编程要花较多的时间,但航天软件研制周期相对较长,可靠性要求较高,因而采用这种方式进行补充是合理的。

3.2 项目策划和需求分析

在某试验卫星中,需要搭载一台国产SM1750计算机验证国产元器件及软件的工作情况,这类软件属于嵌入式实时软件,规模估计在4000行左右的小型软件,开发团队共4人,设置项目经理1人,开发人员2人(结对编程,互相测试),质量过程管理人员1人。

3.3 测试用例设计

项目经理在需求分析的同时,也针对性地设计出各个需求项对应的测试用例,用自然语言来描述。

如CAN数据接收的功能,项目经理无需考虑软件如何实现,参考用户给出的协议,编制若干组数据,这些数据一部分是符合协议的,也包括一些杂乱无意义的数据。对应前述各功能项,项目经理设计测试用例,选取典型的测试用例,见表3:

显然,项目经理是站在用户的角度设计出上述测试的,如果测试能够通过,也就能满足用户将来验收时的要求,至于三个性能需求,是用户提出的强制性的约束条件,但都是可以通过仪器或代码走查验证的,项目经理如果发现生成的目标代码有任何一条性能指标不满足要求,即要求开发人员通过优化设计来重构代码。

4 采用测试驱动开发的效果

以往航天型号软件的研制流程是基于体系结构驱动,先做设计,再做测试。设计是根据需求导出,有时会偏离用户需求,在实际工程中,用户也会经常改变已有需求,会新增需求,也会废弃已有的需求,每次更改代码都带来巨大的工作量和风险。而在这个项目中采用了测试驱动开发方式后,对照以前未采用测试驱动开发的同等软件,在缩短软件开发周期和减少软件潜在缺陷方面取得了一定进展

【参考文献】

[1]刘赟.测试驱动开发探讨[J].电脑开发与应用,2006年,第19卷第8期:P12-16

【作者简介】

朱琦,1978年生,男,汉族,浙江绍兴,上海航天技术研究院工作,工程师,主要研究为嵌入式软件开发。

上一篇:浅谈电力企业管理中的绩效考核 下一篇:VPN技术在企业信息管理中的应用研究