嵌入式软件测试与一般软件测试之异同研究

简介:

摘要:随着计算机技术的普及,软件系统已经深入到生活的各个方面,从普通的计算机软件,到银行或超市的终端系统,甚至到手机的软件系统。对软件的质量要求也在不断提高,软件测试及其技术也有了飞速发展。在对软件测试技术相关基本概念研究解析的基础上,分析软件测试起源与发展,保证软件产品的质量、提高产品的可靠性。对于嵌入式软件系统,因其多样性,基于操作系统,使用的开发环境,微控制器都是日益繁多的,所以嵌入式软件测试与普通软件测试相比有其自身的特点。

  关键字:软件测试;嵌入式测试;软件质量

  1、引言

  嵌入式软件的开发和测试也就与普通软件的开发和测试策略有了很大的不同,嵌入式软件系统是一种针对特殊任务、特殊环境而进行特殊设计的定制产品,有其专门的开发环境、软硬件紧密结合、严格的实时要求等特点。使得嵌入式软件测试与普通软件测试虽有相似之处,但有也有其自身独特的特点。

  2、软件测试和嵌入式软件测试

  2.1 软件测试的定义及目的

  软件测试,即Software Testing。软件测试的定义有很多,在1979年出版的一本经典著作《软件测试艺术》(The art of software testing)中,GLEMFORD

  J.MYERS曾经对软件测试下过如下定义:软件测试就是为了发现错误而执行程序或系统的过程。虽然它不太完善,但放在当时的情况下是可以说的通的。

  随着计算机和软件技术的发展,软件应用的复杂性和规模的不断扩大,软件测试技术的研究也取得了很大的突破。早期的定义已经不适用了,许多专家对软件测试提出了各种各样的定义。综合起来,我们可以定义“软件测试是由一个程序的行为在有限测试用例集合上,针对期望的行为的动态验证组成,测试用例是从通常的无限执行域中适当选取的”。

  长期以来对软件测试存在着两种不同的认识。一种观点认为,软件软件测试的目的是证明 软件的正确性;而另一种观点则认为,软件测试的目的是尽可能寻找软件中隐藏的错误和缺陷。

  2.2 软件测试的特点

  1)大多数硬件实验失败的方式和方法是固定的,而软件测试失败则是毫无规律的,探索所有软件测试失败的模式是不可能的。

  2)软件方面的许多缺陷都源于设计和实现上的错误,而不是源于生产制造方面的缺陷。

  3)软件质量保证的关键在于我们如何让避免产生错误和消除已经产生的错误,是程序中的错误密度达到尽可能低的程度。

  4)软件测试是一个动态的执行过程,体现在输入、行为和行为的输出结果上。

  5)软件测试是一个有限的集合。

  2.3 嵌入式软件测试的定义及目的

  嵌入式软件是一种比较特出的软件,软件经过分析,设计,编码后只有烧入硬件环境中才可以看见,比如数字电视的中间件软件,洗衣机的自动控制软件,手机游戏软件等等。嵌入式软件测试/嵌入式测试或叫交叉测试(cross-test)的目的与普通软件测试是相同的,都是为了发现软件缺陷,而后修正缺陷以提高软件的可靠性。嵌入式系统安全性的失效可能会导致灾难性的后果,即使非安全性失效,由于其应用场合特殊也会导致重大经济损失。因此,往往嵌入式软件对可靠性的要求比普通软件高。这就要求对嵌入式软件进行严格的测试、确认和验证,以提高产品的可靠性。

  2.4 嵌入式软件测试的特点

  嵌入式软件测试与普通软件测试相比,有其自身的特点:

  嵌入式软件测试是在特定的硬件环境下才能运行的软件。

  嵌入式软件测试除了要保证嵌入式软件在特定环境下运行的高可靠性,还要保证嵌入式软件系统的实时性。

  嵌入式软件产品为了满足高可靠性的要求,不允许内存在运行时有泄漏等情况发生,因此嵌入式软件测试除了对软件进行性能测试、GUI测试、覆盖分析测试是同普通软件测试一样都不可或缺之外,还要对内存进行测试。

  嵌入式产品不同于一般软件产品,在嵌入式软件和硬件集成测试完成之后,并不代表测试全部完成,在第一件嵌入式产品生产出来之后,还需对其进行产品测试。

  嵌入式软件测试的最终目的是使嵌入式产品在能够满足所有功能的同时安全可靠的进行。

3、嵌入式软件测试与普通软件测试的异同点

  3.1 嵌入式软件测试与普通软件测试的相同点

  嵌入式软件测试作为一种特殊的软件测试,它的目的和原则与普通软件测试是相同的,都是为了发现软件缺陷,而后修正缺陷以提高软件的可靠性。它们的中心任务都是验证和确认其实际实现是否符合需求要求,在验证过程中发现系统缺陷。

  嵌入式软件测试与普通软件测试具有相同的信息流,如图3-1。

图3-1 软件测试信息流

  嵌入式软件测和普通软件测试对象相同,包括软件中所有内容,贯穿软件定义与开发的整个过程。也就是说,需求分析、概要设计、详细设计、程序编码等各阶段所得到的文档及源程序,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都应当称为软件测试的对象。

  3.2 嵌入式软件测试与普通软件测试的区别

  由于嵌入式系统的自身特点,如实时性(Real-timing),内存不丰富,I/O通道少,开发工具昂贵,并且与硬件紧密相关CPU种类繁多,等等。嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。

  嵌入式系统由于自己本身的特点,如实时性强、内存不丰富、I/O通道少、开发工具昂贵并且与硬件紧密相关、CPU种类繁多等等,决定了不同的嵌入式系统必须有不同的测试方法。

  3.2.1 嵌入式软件测试的各个阶段测试的环境是不一样的

  嵌入式软件开发和运行的环境是分开的,嵌入式软件开发环境往往是交叉开发环境。因此,各个阶段测试的环境是不一样的。

  单元测试阶段:所有的单元测试都可以在宿主机环境下进行,只有个别情况下会特别指定单元测试要直接在目标机环境下进行。应该最大化在宿主机环境下进行软件测试的比例,通过尽可能小的目标单元访问其指定的目标单元界面,提高单元的有效性和针对性。

  在宿主机平台上运行测试的速度比在目标机平台上快得多,当在宿主机平台上完成测试后可以在目标机环境下重复做一次简单的确认测试,确认测试结果在宿主机和目标机上没有不同。在目标机环境下进行确认测试将确定一些未知的、未预料到的、未说明的宿主机与目标机的不同之处,例如,目标机编译器可能有缺陷,但在宿主机编译器上没有。

  集成测试阶段:软件集成也可在宿主机环境下完成,在宿主句平台上模拟目标环境运行,在此级别上的确认测试可以确定一些与环境有关的问题,比如内存定位和分配方面的一些错误。

  在宿主机环境上的集成测试的使用,依赖于目标系统的具体功能有多少。有些嵌入式系统与目标机环境耦合的非常紧密,这种情况下就不适合在宿主机环境下进行集成。对于一个大型的软件开发而言,集成可以分几个级别。低级别的软件集成在宿主机平台上完成有很大优势,级别越高,集成越依赖于目标环境。

系统测试和确认测试:所有的系统测试和确认测试必须在目标机环境下执行。当然在宿主机上开发和执行系统测试,然后移植到目标机环境重复执行是很方便的。对目标系统的依赖性会妨碍将宿主机上的系统测试移植到目标系统上,况且只有少数开发者会卷入系统测试,所以有时放弃在宿主机上执行系统测试可能更方便。

  确认测试最终必须在目标机环境中进行,因为系统的确认必须在真实系统下完成,而不能在宿主机环境下模拟,这关系到嵌入式软件的最终使用。

  3.2.2 嵌入式软件测试的复杂多样

  因为嵌入式系统的一个突出的特点,是其专用性,即一个嵌入式系统只进行特定的一项或几项工作,嵌入式软件运行的平台都是为进行这些工作而开发出来的专用硬件电路,他们的体系结构、硬件电路,甚至所用的元器件都是不一样的,所以嵌入式软件运行的平台也是复杂多样的。

  由于开发平台的复杂多样性,使的嵌入式软件的测试从测试环境的建立到测试用例的编写也是复杂多样的。与不同的开发平台对应的嵌入式软件是肯定不相同的。嵌入式软件测试在一定程度的上并不只是对嵌入式软件的测试,很多情况下是对嵌入式软件在开发平台中同硬件的兼容性测试。因此,对于任何一套嵌入式软件系统,都需要有其自己的测试、创建其自己的测试环境、编写其自己的测试用例。

  3.2.3 嵌入式软件测试中对实时性有严格要求

  由于嵌入式系统的实时性,决定了嵌入式系统的运行时间也是受严格限制的。嵌入式软件在测试时应当充分考虑系统实时响应的问题,很多嵌入式系统会要求系统的响应时间应在多少毫秒之内。在测试有严格响应时间要求的嵌入式系统时要做负载测试。

  3.2.4 嵌入式软件测试需要进行插桩测试

  嵌入式软件最终的测试需要在目标机平台上进行,在对目标机进行测试时,我们需要对在宿主机上编译通过的代码进行插桩处理。插桩完成之后,需要重新对代码进行编译,如果编译通过,就可以将编译好的代码下载到目标机上执行。在目标机执行程序的时候,需要将插桩时预测好的数据返回到宿主机上,因此,宿主机和目标机上要有能够相互传递数据的网线或者串口线,宿主机上同时要有能够处理返回的数据的处理程序或软件

  3.2.5 嵌入式软件对系统的可靠性和安全性要求比一般的软件系统高

  因为嵌入式软件对系统的可靠性和安全性要求比一般的软件系统高,所以还需要进行系统的可靠性测试。对于不同的嵌入式系统,需要制定相应的符合系统需求的可靠级别,在进行可靠性测试时应该将系统的可靠性级别考虑进去。

  一些嵌入式系统,比如工厂车间的某些控制系统,他们要在电磁很强的恶劣的环境下可靠的工作,而且要保证操作人员的安全。但是对于手机软件来说,他的可靠性和安全性就不如工厂车间的车床控制系统要求的高。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
5天前
|
测试技术 数据库连接 数据库
【测试开发】基础篇 · 专业术语 · 软件测试生命周期 · bug的描述 · bug的级别 · bug的生命周期 · 处理争执
【测试开发】基础篇 · 专业术语 · 软件测试生命周期 · bug的描述 · bug的级别 · bug的生命周期 · 处理争执
12 0
|
5天前
|
自然语言处理 安全 Java
【软件测试】教你如何写一份软件测试报告
【软件测试】教你如何写一份软件测试报告
|
5天前
|
安全 Java 测试技术
【软件测试】测试工具推荐
【软件测试】测试工具推荐
|
5天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
21小时前
|
机器学习/深度学习 人工智能 测试技术
提升软件测试效率:智能化测试工具的应用与展望
【5月更文挑战第19天】 在快速发展的软件行业中,保证产品质量的同时提高测试效率已成为一个关键挑战。传统的手动测试方法由于其耗时且易出错的局限性,逐渐不能满足现代软件开发的需求。智能化测试工具的出现为解决这一问题提供了新的思路。本文将探讨智能化测试工具如何通过自动化和人工智能技术优化测试流程,减少重复性工作,并预测未来测试工具的发展趋势。我们将分析这些工具在实际应用中的表现,以及它们对提高软件测试效率和准确性的潜在影响。
17 8
|
4天前
|
自然语言处理 测试技术 程序员
软件测试-----黑盒测试与白盒测试
软件测试-----黑盒测试与白盒测试
13 0
|
5天前
|
架构师 安全 Java
【测试开发】答疑篇 · 什么是软件测试
【测试开发】答疑篇 · 什么是软件测试
6 0
|
5天前
|
前端开发 测试技术 数据安全/隐私保护
软件测试 —— 测试用例设计报告
软件测试 —— 测试用例设计报告
17 1
|
5天前
|
敏捷开发 机器学习/深度学习 Java
Java中的异常处理机制深入理解与实践:持续集成在软件测试中的应用探索自动化测试在敏捷开发中的关键作用
【4月更文挑战第29天】在Java编程中,异常处理是一个重要的概念。它允许开发者在程序执行过程中遇到错误或异常情况时,能够捕获并处理这些异常,从而保证程序的稳定运行。本文将详细介绍Java中的异常处理机制,包括异常的分类、异常的处理方式以及自定义异常等内容。 【4月更文挑战第29天】 随着敏捷开发和DevOps文化的兴起,持续集成(CI)已成为现代软件开发周期中不可或缺的一环。本文将探讨持续集成在软件测试领域内的关键作用、实施策略以及面临的挑战。通过对自动化构建、测试用例管理、及时反馈等核心要素的详细分析,揭示持续集成如何提高软件质量和加速交付过程。 【4月更文挑战第29天】 在当今快速发
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率:智能化测试用例生成策略
【4月更文挑战第28天】 随着软件开发的复杂性不断增加,传统的软件测试方法面临巨大挑战。为了提高测试覆盖率并确保软件质量,需要投入大量的时间和资源去设计、执行和维护测试用例。本文探讨了一种基于人工智能(AI)技术的智能化测试用例生成策略,该策略能够自动识别关键的测试路径,动态调整测试用例,并优化测试集合。通过引入智能化工具和算法,显著提升了软件测试过程的效率和有效性。

热门文章

最新文章