掌桥专利:专业的专利平台
掌桥专利
首页

一种软件开发测试方法、系统、设备以及介质

文献发布时间:2023-06-19 11:42:32


一种软件开发测试方法、系统、设备以及介质

技术领域

本发明涉及软件领域,具体涉及一种软件开发测试方法、系统、设备以及存储介质。

背景技术

现有技术中,一种快速设计开发的方式是部署一个仿真环境,在仿真环境上进行开发和调试,然后将之部署到真实系统(控制器)上。由于仿真环境是对真实系统的一种简化抽象,因此可以快速开发软件,但是对于真实系统的描述性往往不够完整,功能不如真实系统更复杂,所以在仿真环境上进行验证后,在真实系统中往往依然会存在很多bug为被检测出。但是又由于仿真环境和真实环境的侧重点不一样,有时真实环境也无法复现仿真环境的一些bug。

因此,急需一种软件开发测试方案。

发明内容

有鉴于此,为了克服上述问题的至少一个方面,本发明实施例提出一种软件开发测试方法,包括以下步骤:

利用仿真环境下的硬件模型运行软件并在预设时间后将所述软件的内部状态进行序列化处理;

将序列化处理后的内部状态导出到文件;

利用嵌入式环境中的硬件运行软件并获取所述文件,以根据所述文件中的内部状态对所述软件进行初始化;

利用所述硬件模型和所述硬件分别执行相同的操作命令以分别得到数据结构;

每隔预设时间段将所述仿真环境和嵌入式环境得到的数据结构进行一致性验证以判断当前的所述嵌入式环境是否出错。

在一些实施例中,还包括:

利用所述仿真环境进行所述软件的源代码开发。

在一些实施例中,利用所述仿真环境进行所述软件的源代码开发,进一步包括:

响应于在所述仿真环境中对所述源代码的开发达到开发节点,利用所述硬件模型执行验证命令以对当前的所述源代码进行验证。

在一些实施例中,还包括:

响应于达到的所述开发节点为单元节点,利用所述嵌入式环境对所述当前的所述源代码进行验证。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种软件开发测试系统,包括:

仿真模块,所述仿真模块配置为利用仿真环境下的硬件模型运行软件并在预设时间后将所述软件的内部状态进行序列化处理;

导出模块,所述导出模块配置为将序列化处理后的内部状态导出到文件;

嵌入式模块,所述嵌入式模块配置为利用嵌入式环境中的硬件运行软件并获取所述文件,以根据所述文件中的内部状态对所述软件进行初始化;

测试模块,所述测试模块配置为利用所述硬件模型和所述硬件分别执行相同的操作命令以分别得到数据结构;

验证模块,所述验证模块配置为每隔预设时间段将所述仿真环境和嵌入式环境得到的数据结构进行一致性验证以判断当前的所述嵌入式环境是否出错。

在一些实施例中,还包括开发模块,所述开发模块配置为:

利用所述仿真环境进行所述软件的源代码开发。

在一些实施例中,所述开发模块还配置为:

响应于在所述仿真环境中对所述源代码的开发达到开发节点,利用所述硬件模型执行验证命令以对当前的所述源代码进行验证。

在一些实施例中,所述开发模块还配置为:

响应于达到的所述开发节点为单元节点,利用所述嵌入式环境对所述当前的所述源代码进行验证。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机设备,包括:

至少一个处理器;以及

存储器,所述存储器存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时执行如上所述的任一种软件开发测试方法的步骤。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时执行如上所述的任一种软件开发测试方法的步骤。

本发明具有以下有益技术效果之一:本发明提出的方案可以对仿真环境和嵌入式环境得到的数据进行比对,并对真实环境的运行进行现场保存,这样可以提高开发效率,增加测试的覆盖能力,降低系统设计的风险。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明的实施例提供的软件开发测试方法的流程示意图;

图2为本发明的实施例提供的软件开发测试系统的结构示意图;

图3为本发明的实施例提供的计算机设备的结构示意图;

图4为本发明的实施例提供的计算机可读存储介质的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

根据本发明的一个方面,本发明的实施例提出一种软件开发测试方法,如图1所示,其可以包括步骤:

S1,利用仿真环境下的硬件模型运行软件并在预设时间后将所述软件的内部状态进行序列化处理;

S2,将序列化处理后的内部状态导出到文件;

S3,利用嵌入式环境中的硬件运行软件并获取所述文件,以根据所述文件中的内部状态对所述软件进行初始化;

S4,利用所述硬件模型和所述硬件分别执行相同的操作命令以分别得到数据结构;

S5,每隔预设时间段将所述仿真环境和嵌入式环境得到的数据结构进行一致性验证以判断当前的所述嵌入式环境是否出错。

本发明提出的方案将软件部署到嵌入式系统上进行运行,定期或者不定期的将内部数据结构导出,将其引入到仿真环境中,由于仿真环境和嵌入式环境使用的Firmware代码相同,因此可以顺利的读取识别这些内部数据结构,由这些数据结构为基础进行仿真运行,并进行验证。同时仿真环境也可以独立运行测试,在测试过程中,也可以定期或者不定期的将内部数据结构导出,将其引入到嵌入式环境中,嵌入式环境可以以此数据结构作为初始状态进行功能验证。这样可以对仿真环境和嵌入式环境(真实环境)得到的数据进行比对,并对真实环境的运行进行现场保存,这样可以提高开发效率,增加测试的覆盖能力,降低系统设计的风险。

在一些实施例中,进行软件开发测试前,预先搭建仿真环境和嵌入式环境。其中,嵌入式环境有三大要素:①开发对象,即开发产出的源代码,编译之后即成为相应的软件,例如Firmware(在控制器上运行的嵌入式软件)等。②嵌入式环境所需要的工具,例如编译工具等。由于受限于使用的硬件系统,工具往往没有太多选择,需选用与硬件系统相匹配的特定的工具链。③嵌入式环境系统量身定做的配置参数。而仿真环境有以下要素:①开发对象,这个与嵌入式环境为同一对象。②硬件平台的软件模型,可以根据待开发的软件种类确定,例如Firmware,由于固态硬盘的高并发特性,firmware的操作往往是异步的,即需要处理的IO请求往往分为多个步骤,需要同时处理的IO数量非常大。因此Firmware往往在处理完一个IO的一个步骤之后,就会处理另外一个IO的另外一个步骤。因此在仿真环境中,也需要硬件的模型来处理每个步骤中Firmware之外的其他处理单元的工作。③在仿真环境中,还需要开发主机的模型。例如,针对Firmware,因为真实Firmware是一个固态硬盘,挂载到系统之后,由主机的软件发出读写管理命令。但是仿真环境为了与真实固态硬盘一样进行读写功能的触发,需要开发主机的软件模型,让这个软件模型通知仿真环境进行读/些/管理操作。

在一些实施例中,还包括:

利用所述仿真环境进行所述软件的源代码开发。

在一些实施例中,利用所述仿真环境进行所述软件的源代码开发,进一步包括:

响应于在所述仿真环境中对所述源代码的开发达到开发节点,利用所述硬件模型执行验证命令以对当前的所述源代码进行验证。

在一些实施例中,还包括:

响应于达到的所述开发节点为单元节点,利用所述嵌入式环境对所述当前的所述源代码进行验证。

具体的,在软件开发过程中,开发者可以在仿真环境内进行源代码的开发,每到一个开发节点,可将它的代码在仿真环境上进行验证。例如可以调用主机的模型,发出读/写/管理等操作请求,使得开发的代码进行执行状态以验证代码是否正确。并且在软件开发过程中,开发者可以随时在真实环境中进行验证。由于开发的源代码可以在嵌入式环境中编译执行,因此在开发者进行仿真验证的同时,随时可以在真实环境上进行验证。但是由于此时功能可能没有完整到处理全部用户读/写/管理命令,因此可能进行的是单元验证。

在一些实施例中,当软件的源代码在仿真环境中开发完毕后,可在仿真环境与嵌入式环境中同时展开测试,定期(例如每秒钟)交换和互相验证一部分数据结构(由于全部导出耗时较长,这样只比较一部分,每次比较的都不同,逐步可以覆盖全部内容)。

在一些实施例中,步骤S1,利用仿真环境下的硬件模型运行软件并在预设时间后将所述软件的内部状态进行序列化处理中,具体的,在仿真环境下进行系统测试时,软件(例如firmware)内部的管理的数据结构和状态会发生变化。firmware通过数据通路可以将这些内部数据结构和状态,进行序列化处理和导出。

同样的,在步骤S5中,在嵌入式环境下进行系统测试时,软件(例如firmware)内部的管理的数据结构和状态会发生变化。firmware通过数据通路可以将这些内部数据结构和状态,进行序列化处理和导出。

这样,通过在仿真环境和嵌入式环境中,发送相同的主机请求,即可比较导出的数据结构,判断在两个环境下产生的数据结构是否一致。例如,仿真环境可以读入这些序列化的数据结构,仿真环境从读入数据结构的时间点开始进行运行。在仿真环境内可以对嵌入式环境下产生的数据结构进行校验,包括数据一致性的比较,由于firmware的数据结构有冗余性,多个表之间可以互相对应,因此通过比对这些表检查当前嵌入式环境是否已经出错。在仿真环境内,还可以对嵌入式环境下产生的数据结构进行风险测试。由于真实环境无法对系统内的各个硬件模块施加随机扰动。将数据结构导出后。可以在仿真环境内对硬件加速单元进行扰动,测试当前的数据结构是否已经存在出错的风险。扰动可以包括:某些硬件单元的返回时间会过长或者过段、硬件单元出现可纠正错误硬件单元的返回顺序与请求顺序不一致等。出错的风险可以包括经过扰动后,数据会存在内部比对不一致的结果。

在一些实施例中,还可以利用嵌入式环境读取软件在仿真环境下产生的数据结构,并与自身已存在的数据结构进行比对,与前面不同,这是将仿真产生的数据结构和状态在嵌入式环境的内部进行比对校验。这样,嵌入式环境下的系统可以用这种数据结构和状态进行性能差异比较,从而给出性能优化的参考目标。

在一些实施例中,由于嵌入式环境下的系统在bug出现之后,可能不会立即出现异常,会逐步累积错误才会异常。因此当系统异常时,导出的数据结构,往往不是出错的现场。因此,将在嵌入式环境下进行测试得到的数据结构进行序列化处理并定期导出,可以逐步回溯到系统出错点,进行重复测试验证。

在一些实施例中,S3,利用嵌入式环境中的硬件运行软件并获取所述文件,以根据所述文件中的内部状态对所述软件进行初始化中,具体的,在仿真环境下进行测试时,可以定期或者由测试向量触发,将仿真环境的内部状态序列化导出,然后引入到嵌入式环境内。嵌入式环境读入此内部状态之后,可以将其作为测试的开始点(即初始化),然后进行读/写/管理操作。这是由于真实系统内运行一定时间之后,内部状态变得不可控,而导入一个受控的内部状态,对测试有一定价值。

本发明提出的方案通过在软件(例如firmware)内部设置一个数据通路,允许将内部状态和数据结构导出到主机,以便进行保存和比对。并且在软件的各个模块设计序列化功能,使之可以将当前的状态和数据结构存储成文件,同时在软件的各个模块设计反序列化功能,使之可以将文件转换为当前状态。这样,在仿真环境和嵌入式环境下进行测试时,可以定期进行序列化操作和数据导出,即在仿真环境导出的数据引入到嵌入式环境内,在嵌入式环境导出的数据引入到仿真环境,以实现交换并测试验证。同时,嵌入式环境定期将导出的内容存储在主机端,如果需要进行回溯,可以将之前的文件加载。

基于同一发明构思,根据本发明的另一个方面,本发明的实施例还提供了一种软件开发测试系统400,如图2所示,包括:

仿真模块401,所述仿真模块401配置为利用仿真环境下的硬件模型运行软件并在预设时间后将所述软件的内部状态进行序列化处理;

导出模块402,所述导出模块402配置为将序列化处理后的内部状态导出到文件;

嵌入式模块403,所述嵌入式模块403配置为利用嵌入式环境中的硬件运行软件并获取所述文件,以根据所述文件中的内部状态对所述软件进行初始化;

测试模块404,所述测试模块404配置为利用所述硬件模型和所述硬件分别执行相同的操作命令以分别得到数据结构;

验证模块405,所述验证模块405配置为每隔预设时间段将所述仿真环境和嵌入式环境得到的数据结构进行一致性验证以判断当前的所述嵌入式环境是否出错。

在一些实施例中,还包括开发模块,所述开发模块配置为:

利用所述仿真环境进行所述软件的源代码开发。

在一些实施例中,所述开发模块还配置为:

响应于在所述仿真环境中对所述源代码的开发达到开发节点,利用所述硬件模型执行验证命令以对当前的所述源代码进行验证。

在一些实施例中,所述开发模块还配置为:

响应于达到的所述开发节点为单元节点,利用所述嵌入式环境对所述当前的所述源代码进行验证。

基于同一发明构思,根据本发明的另一个方面,如图3所示,本发明的实施例还提供了一种计算机设备501,包括:

至少一个处理器520;以及

存储器510,存储器510存储有可在处理器上运行的计算机程序511,处理器520执行程序时执行如上的任一种软件开发测试方法的步骤。

基于同一发明构思,根据本发明的另一个方面,如图4所示,本发明的实施例还提供了一种计算机可读存储介质601,计算机可读存储介质601存储有计算机程序指令610,计算机程序指令610被处理器执行时执行如上的任一种软件开发测试方法的步骤。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。

此外,应该明白的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

相关技术
  • 一种软件开发测试方法、系统、设备以及介质
  • 软件开发测试方法、装置、设备及介质
技术分类

06120113023179