狄喜凤
(江南机电设计研究所 贵州省贵阳市 550000)
随着计算机技术的不断发展和成熟,软件产品已经逐渐应用于社会的各个领域,从日常的手机APP 软件、银行系统办公软件、政府办公软件到人工智能机器人、航空航天软件,均体会到软件给日常生活和经济发展带来了很大的便利性。但是随着软件的功能越来越复杂,伴随着一些软件的问题出现,暴露出来的有些问题甚至影响到了人类的生命安全,因此人们逐渐意识到需要对软件进行测试,逐渐提出了软件测试的概念。
在整个软件开发过程中,软件测试作为最后一道防线,软件测试是保证软件可靠性的主要方法之一,其目的是发现软件错误,提高软件产品质量[1,2]。在上世纪80年代IEEE 给出的定义是:“使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别[3]”。然而随着社会的不断发展,人们对于软件功能的需求越来越多,软件迭代的周期逐渐缩短导致留给软件测试的时间越来越少,如何能够在短时间内进行详细的测试是值得我们思考的问题。
目前的文献多是关于自动化测试工具方面的介绍,郝彦文曾提出基于遗传算法的测试用例自动生成方法[4],方巍提出了借助Selenium 工具对Web 类型软件进行自动化测试[5],孙宝云构建了基于UML 活动图的测试用例自动生成软件系统,实现基于分支覆盖准则的单元测试用例生成[6],张帆利用基于Eclipse 平台的自动化测试软件,进行基于RFT 软件的Web 界面自动化测试设计及实现[7],基于魏雪卉通过分析嵌入式软件测试常出现的问题,提出了基于嵌入式软件配置项测试技术及策略[8],而对界面类软件测试策略介绍较少,软件测试的重点在于提高软件的质量,工具只是辅助测试工作的,因此掌握不同类型软件的测试功能点是极其重要的。本文以学生信息管理系统为例,介绍界面类软件的测试策略及着重测试功能点。
学生信息管理系统主要应用于教育系统,针对学校人事处的大量业务处理工作开发设计的管理软件,用于完成对日常的教育工作中学生成绩档案的数字化管理,是一个教育单位不可缺少的部分,能够为用户提供充足的信息和快捷的查询手段,对于学习的决策者和管理者来说至关重要。随着国家政策的调整,高等院校不断进行学生的扩招,给学校的教学管理、学生管理带来了很大的影响,使用计算机管理学生的信息有着手工管理不可比拟的优点:快速检索学生信息、存储量大等,风险也同样存在,软件的功能是否正确实现同样受到了极大的挑战,当由于软件的一部分功能出现问题同样影响其他功能模块,会导致数据库内容错乱、学生信息丢失等,因此对于学生信息管理系统的测试是极其重要的。
软件的主要功能包含学生信息管理、课程信息管理、学生成绩管理、系统权限管理、学生信息查询、学生成绩统计。详细功能见表1。
为了更好的保证软件质量和完成软件测试,在测试过程中要注意几点原则:
(1)软件测试的理念应该贯彻在整个软件的开发过程中,尽可能早的发现和修复软件缺陷,缺陷发现的时间越晚,耗费的时间和人力成本越高,为了提高软件的质量,应尽早的对软件进行测试,降低成本。
(2)将软件需求作为测试大纲编写依据和测试用例的设计依据。测试用例通过的标准是预期结果与实际测试结果一致。在测试过程中,要明确预期输出结果的含义,综合软件的各个功能来分析实测结果的正确性,以防漏掉隐藏的软件错误。
(3)要重点考虑异常输入、非法操作的测试,一般软件的正常功能测试覆盖较全,往往忽略异常测试的功能项。一般不熟悉软件的用户进行非法操作,如果软件不能正确处理,轻则导致软件崩溃,重则导致整个通信的系统崩溃,有时会带来不可预料的灾难,因此测试过程中要充分考虑异常输入或非法操作测试。
(4)正式测试之前制定测试计划,避免测试的随意性。根据被测软件的功能项、测试环境的稳定性、测试人员、异常用例的实现情况,制定合理的测试计划,以防盲目测试。
(5)测试过程文档以及软件的规范性。测试提交的需求文档、设计文档、通信协议版本应为固定版本,测试过程中不再进行变更,当测试人员提出问题后才能进行版本的升级,一方面有利于测试过程的规范性,另一方面保证测试过程中不会因为其他因素而影响到软件测试的充分性。目前尤其是军工行业,软件开发周期较短,时间节点都压在测试方,软件边测边改已经成为常态,为了保证软件的质量,本末倒置是不合理的,软件测试遵循一定的规范性原则是很有必要的。
软件测试的目的是尽可能发现最多的错误。总的来说,软件测试的流程主要包括静态测试和动态测试。静态测试是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,主要分为文档审查、静态分析、代码审查,动态测试主要是指通过设计输入输出用例运行被测程序,检查运行结果是否与预期结果一致,分析性能指标、容量指标是否满足文档需求,主要是根据需求规格说明、研制任务书、软件设计说明通信协议等相关文档进行测试大纲的编写、用例设计及实现。通用的测试策略方法主要为:
(1)文档审查主要审查软件需求规格说明、软件研制任务书、软件设计说明文档之间描述的一致性,文档功能内容描述的准确性和完整性。
(2)静态分析主要根据编程语言的规则要求,利用工具检查代码的控制流分析、数据流分析、接口特性分析、表达式分析是否符合编程规则要求,并逐一确认问题。静态测试结果可以用于进一步的查错,减少和避免出现严重影响动态测试的问题。
(3)程序度量属于静态分析的一部分,一般对最终版本的代码进行统计,主要是对源程序文件个数、代码的总行数、空行数、总注释行数以及注释率、模块圈复杂度的平均值和最大值以及圈复杂度过大的比例、函数模块的平均行数和最大行数以及模块规模过大的比例进行统计,方便用户了解代码的整体情况,对于圈复杂度过大的模块、模块规模过大的函数进行调整,以免影响软件的可读性,修改部分代码影响范围较广。
(4)代码审查主要是依据需求文档,检查代码设计结构的合理性、文档与代码实现的一致性、代码逻辑表达的正确性、代码对国军标标准的遵循及可读性。
(5)动态测试是在静态分析的基础上进行的,通过分析软件的功能需求,编写测试功能点,一个正常用例至少对应一个异常用例,涉及到边界测试的内容需要考虑当输入的变量为边界上、边界内、边界外时,软件的处理情况;涉及到性能时间指标的测试需要考虑进行至少10 次的测量,多次测量求取平均值;涉及到余量指标测试,需要考虑软件的最大负荷下运行,查看软件的运行余量;涉及到数据处理测试时,需要考虑软件计算的结果是否与标准解一致。
(6)回归测试主要针对动态测试中发现的问题及由于软件需求更改的部分进行用例的设计,要充分考虑软件出现的问题位置所影响的测试项,适当的进行用例的增加或重用。回归测试中修改文档的问题通过文档审查的方式实现,修改程序的问题通过动态测试实现。
针对学生信息管理系统界面类软件的详细测试策略主要包括:
(1)测试当增加或修改学生的学号重复时,软件提示错误信息;
(2)测试对界面输入的参数进行限制,年龄、学号、入学年份、课时、学分、成绩只能输入数字,学生信息参数、成绩信息、课程信息参数不能为空;
(3)测试当登录界面的用户名正确,密码多字符、密码少字符、密码为空时,用户不能正常登录。
(1)测试软件能够通过界面输入增删改学生的基本信息、成绩信息、课程信息、登录使用账号和密码,并保存到数据库中;
(2)测试当增删改数据库表中的参数时,软件能够读取并显示学生的基本信息;
(3)测试当增加或修改数据库表中的学生信息参数为非法字符时,软件读取的信息参数为空;
(4)测试软件对学生的成绩总分、平均分、绩点统计的结果与标准解一致;
(5)测试软件能够通过关键字查询并从数据库调出并输出学生基本信息和成绩信息,并按照Excel 表格式导出;
(6)测试学生、教师、用户能够通过输入用户名和密码进行登录,退出系统;
(7)测试用户具备能够通过界面修改密码的功能;
(8)测试软件能够设置用户权限,实现各自的功能。
(1)测试当数据库未启动或突然故障,重新启动软件能够保存之前的学生信息;
(2)测试界面按钮误操作、快速点击,不会导致软件崩溃;
(3)测试同一个学生账号不能同时登陆两台电脑;
(4)测试学生信息管理系统软件能够在搜狗、UC 浏览器、360 浏览器、百度、Goole 浏览器使用;
(5)测试软件能够登陆的用户最大人数。
目前不论是生活中、工作中使用到的计算机相关的软件大部分都有界面显示,通过界面按钮操作及界面框输入实现软件的功能。目前的界面类软件不仅仅包括学生信息管理系统软件,还有一些银行系统软件、政府管理软件、显示控制软件、场景设置软件、军工软件等,其他类型的界面软件测试策略还要考虑以下几点:
(1)涉及到界面输入参数进行模型计算时,要考虑与标准解计算的一致性;
(2)局域网软件之间的信息交互要考虑接口信息是否与协议一致,以及当软件接收的接口信息报文头异常、多字节、少字节、校验和错误时,软件丢弃该数据;
(3)测试软件的性能时间指标时,多次测量求平均值,作为测试结果;
(4)测试软件的运行余量指标时,考虑在软件的最大负荷情况下进行测量;
(5)当软件包含三维地图显示时,要考虑地图显示点、线是否与操作一致;
(6)当涉及到导入XML 文件的软件时,要考虑导入的文件内容为空、后缀错误、文件不存在、文件内容的格式错误情况;
(7)安全性要求高的军工界面软件,要考虑不能同时启用两个软件。
表1:学生信息管理系统功能表
综上所述,本文针对界面类的软件测试提出一些着重考虑的测试策略:界面输入合法性、数据库读取、软件的正常功能、模型计算标准解、地图视图显示轨迹点和线、界面操作保存到数据库、导入导出文件的格式、接口内容的一致性。不同的界面软件虽然功能不同,但测试的着重点具有共性,细节需要根据具体的软件再详细考虑,尽可能的考虑软件的异常情况是每一个测试人员的职责。本文提出的测试策略可以适用于航天航空、船舶、学校、政府系统、财务系统以及常用的APP 界面软件测试,具有一定的应用前景。