元模型

K近邻检测(KNN)

拉丁超立方体抽样

模型度量

高斯过程回归模型

自适应采样

信息熵(信息的不确定性越大 熵也越大)

摘要

我们提出了一种用于为黑匣子自治系统生成测试场景的新颖方法,该方法演示了其性能模式中的关键转换。在复杂的环境中,即使自治系统符合所有子系统的要求并且没有引发任何故障,它也有可能在其分配的任务中失败。当自治系统可能必须在多个排他目标之间进行选择时,尤其如此。通过故障检测来测试鲁棒性的标准方法是直接激励系统并检测违反系统要求的情况。我们的方法有所不同,相反,它是在模拟环境中通过完整任务运行自主系统,并根据高级任务标准评估性能。结果是一种为行使各种性能模式的被测自治系统搜索具有挑战性的方案的方法。我们利用自适应采样来智能搜索状态空间 测试场景存在于不同性能模式之间的边界上。 此外,使用无监督的聚类技术,我们可以按方案的性能模式对方案进行分组,并按对诊断自治系统行为的变化最有效的方案对其进行排序。

一,引言

自动驾驶车辆的有效测试和评估(T&E)仍然是测试界的一个开放问题。传统测试集中在系统的物理组件上,以确保安全可靠的运行。但是,自治系统的本质决定了系统的推理组件(即“大脑”)也必须得到有效测试。最近的大量工作集中于将软件测试技术应用于具有大量输入的自治系统,例如底层决策引擎的故障检测[1]或模型检查。这可以为软件的健壮性提供一些运行时保证,但不能提供有关自治系统在执行任务时将如何执行的信息。此外,这些测试技术无法深入了解有助于自治系统决策过程的环境因素。
例如,考虑执行调查任务的无人水下航行器,多个子系统在存在相互竞争的优先事项时,UUV的行为模式必须协同工作。例如,当需要通过GPS定位自身时,它必须抵消检测的风险。它还必须确定它是否有足够的燃料来完成调查,或者其环境中的不确定因素使工作风险太大,因此必须尽早返回基地。对于长时间任务,车辆必须在多个任务目标之间进行转换[3],这尤其值得关注。因此,如果无法在各种具有挑战性的情况下进行广泛的测试,就很难保证系统的决策能力。这既需要能够现实地行使自治系统的仿真框架[4],也需要提供覆盖任务空间的一系列测试[5]。
为此,我们将注意力集中在配置空间中的区域,在这些区域中方案中的微小变化会导致性能模式之间的转换。一个典型的例子是,障碍物位置的微小变化如何导致车辆走不同的路径而无法达到目标了解这些过渡发生的位置是预测自动驾驶汽车性能的关键,并且对于系统的设计和验证都是有用的。它们对于识别特定行为的触发因素特别有用,例如可以克服障碍物避免策略的电流强度。然后可以将这些用于修复错误或简单地了解针对配置空间的该区域触发某种行为的可能性。立即遇到的一个问题是,在尝试捕获现实任务时,方案的配置参数数量迅速增加。动静 障碍物,潮汐和恒定电流,物镜的时间窗以及其他环境因素只是工程师可能希望测试UUV的几个不同参数中的几个。 随着参数数量的增加,保持相同分辨率所需的样本数量呈指数增长。 此外,如果要测试的软件不能以比实时运行快的速度运行,则单个方案要花费数小时才能完成。 考虑到计算资源的限制和测试空间的巨大性,我们需要一种采样方法,该方法可以在有限的运行次数下最大化返回的信息这倾向于从性能边界区域优先返回样本并沿整个性能边界进行探索,而不是花费资源探索性能稳定的区域。 此策略类似于使用主动学习训练分类器,
其中最高的信息案例位于决策边界,因此算法将优先在这些区域中进行采样[
6]。此外,考虑到运行测试受时间而不是查询数量的限制,这种搜索技术不会导致超出模拟所需的大量开销。这意味着我们需要一种能够同时根据样本数量和维度数量进行适当缩放的方法,以便正确地捕捉现实任务的复杂性。在本文中,我们介绍了一种新颖的自适应搜索技术,旨在发现系统的性能边界,该系统的可扩展性比以前采用样本数和维数的方法更好我们还介绍了一种通过无监督的聚类和邻接测试来确定性能边界的技术。在本文中,我们将参数空间中发生行为转变的区域称为性能边界。 自治系统。 我们的目标是利用主动学习方法来有效地采样场景参数空间并自动识别性能边界案例。 在本文中,我们讨论了学习过程的两个部分-首先,使用自适应采样来搜索参数空间,然后使用无监督学习来确定性能模式和构成性能边界的情况。 我们的方法概述如图1所示。

图1:具有连续未标记输出的系统的测试生成周期的概述。
adaptive sampling自适应采样
surrogate model 代理模型、被测系统
用新数据更新代理模型、submit new queries to SUT(给待测系统提供新的查询)

结果样品集-> 边界识别

二 相关工作

在过去的几年中,自主系统的验证和验证一直是研究中非常活跃的领域,尤其是在将主动学习用于测试用例生成方面。类似地,复杂系统的替代优化已成为用于实验设计的越来越流行的工具。在这里,我们讨论了在自治系统验证和代理模型生成方面的最新工作,以及它与本文工作之间的关系。测试场景生成一直是软件测试领域研究的活跃领域。当前的重点是生成测试以进行需求验证,确保软件不会引发故障,并确保硬件满足其可靠性规格一种测试方法是简单地使用大量输入进行故障检测以刺激系统,通常利用基于优化的组合测试[9]来最小化测试套件的大小。 同时扩大覆盖范围。 此外,基于采样的方法已被用于发现汽车控制系统的不同性能模式[10]。 所有这些测试方法都为软件的健壮性提供了运行时保证,但它们未提供有关自治系统在执行任务时将如何执行的信息。 换句话说,当前的软件测试可以验证系统可以适应接收不良输入或发送不良输出;它不一定验证底层算法做出的实际决策。
过去已经成功地探索了生成和评估强调模拟中的自治系统的测试场景[11]。例如,[12]中的工作使用这种策略来查找强调自主系统的冲突解决算法的多无人机攻击的类型。进化生成技术经常用于此目的[13],其目标函数专门针对被测试域而设计。还基于3D环境中的地面车辆导航,探索了根据其难度发现模拟案例的概念[14]。这些结果令人鼓舞,并证明了测试生成技术可以应用于各种领域。尚待解决的挑战是,确定哪种搜索策略在提供所需的模拟需求最少的相关测试用例时最有效。随着关键任务的自主系统验证越来越重要 机器人在弹药处置,搜索和救援以及其他对故障的容忍度非常低的应用中变得越来越普遍[15]。 特别令人感兴趣的是基于模型检查和形式化方法提供性能保证的方法[2] [16]。 这些方法要求可以生成一个完全描述自治系统性能的模型,并针对破坏规格的异常进行详尽的测试。 过去使用的模型包括有限状态机[1]和过程代数[16]。 这些技术的缺点在于,生成的模型必须完全描述自治系统,而测试工程师必须拥有对模型的完全访问权限。 鉴于自治系统的复杂性和专有软件的黑匣子性质,这些限制使得这些方法无法应用于许多系统。

三,问题公式化

我们的流程与以前的作品不同的是性能边界的概念。如前所述,性能边界是测试空间中不确定被测系统(SUT)性能的区域,即,对方案配置的微小更改可能会导致SUT行为发生转变,从而导致性能大幅度变化。在本节中,我们将正式定义搜索和边界标识问题以及整篇论文中使用的术语。

A.被测系统

我们的目标SUT(不确定被测系统)是用于在模拟环境中执行任务的自动驾驶汽车的决策软件。它以方案配置作为输入,并返回其任务绩效的一组得分指标作为输出。该分数基于与任务要求相关的外部可观察属性,例如经过的时间,采用的路径和目标的完成。虽然系统的输出是一组连续值,但是这些值可以映射到自治系统的离散行为或性能模式。我们认为最有用的测试用例是发生在性能模式之间的过渡区域上的那些,以前称为性能边界。该主张背后的理由是,在性能恒定且已知的区域(即系统几乎肯定会成功的情况下或相反,系统几乎会成功的情况下)测试系统是无效的 肯定会失败。 通过在必须由自治系统做出导致可变性能的关键决策的区域中进行测试,可以获得有关该系统的更多信息。 此外,在最坏情况下进行测试的传统策略无法完全表征系统的性能范围-除最坏情况无法立即发现之外,其他地区可能会出现故障模式或性能边界

B. SUT的定义

(i)场景配置状态空间X ^n = n个元素的[X1,…,Xn]。
状态空间向量中的每个元素代表环境,任务或车辆参数中的变量,并具有一系列可能的值(障碍物位置,时间窗,任务优先级等)。在这种情况下,状态空间与测试空间同义,即可以根据测试工程师指定的参数执行的所有可能测试的空间。

(ii)场景输入状态定义为向量X = [x1,x2,…xn],其中∀i∈n:xi∈Xi。该场景是每个参数从其对应的状态空间范围开始的特定实例化。因此,状态空间由可以测试的所有可能的方案配置组成。 N个场景状态的样本集定义为XN = [X1,…,XN]。每个x∈i∈[0,1]的归一化状态向量定义为X。

(iii)m个参数的性能得分空间Ym 输出分数定义为向量Y = [y1,y2,…ym]。 得分向量中的每个元素代表一个性能指标,通过该指标可以评估自治系统,例如消耗的燃料百分比或到达的路点数量。 N个得分向量的样本集定义为Y N = [Y1,…,YN]。 将每个y∈[0,1]的归一化分数矢量定义为Y。

(iv)黑匣子被测系统(SUT)函数F(XN)= Y N。 它接受一组N个输入状态XN = [X1,…,XN],并返回N个得分矢量的样本集Y N = [Y1,…,YN]。 为了我们的目的,这提供了一个方案配置作为输入,运行模拟直到完成,并接收针对模拟历史的评分指标作为输出。

(v)性能模式定义为P PYm,其中∪iPi= Y m,andi = j,Pi∩Pj =Ø。 换句话说,性能模式是分数的类别,代表了被测系统的不同性能类型。
问题陈述1)
搜索问题:给定一个SUT函数以及定义其输入的状态空间和得分空间,搜索函数的定义如下:Γ(F,X n,Ym,N)= LN。

D.方法概述

本文介绍的方法分为两个主要阶段:搜索和识别
在搜索阶段,我们利用自适应采样或主动学习方法来选择由自主系统仿真运行的新测试用例。该过程利用高斯过程回归[17]来建模自治系统的性能,并优先选择可能指示性能边界的区域。用于测试的自治系统的状态空间的高维性使得仅执行详尽的仿真扩展变得很困难。因此,我们将搜索状态空间的问题主要集中在边界区域的适当覆盖率上,同时将模拟次数降至最低。
在识别阶段,使用无监督聚类算法将在搜索阶段生成的样本用于识别结果数据中的性能模式一旦测试用例被分类 它们的性能模式,性能模式之间的边界被识别,并且与边界相邻的被测试场景可用于辅助实时测试设计

IV。搜索策略

A.自适应采样

自适应采样是一个迭代过程,包括向SUT提交查询,使用返回的分数生成元模型然后将信息度量应用于元模型以生成新的查询集。这是诸如拉丁超立方体(LH)或Sobol序列之类的空间填充设计的替代方法,后者试图优化均匀的覆盖范围和密度,并根据状态空间的大小进行预先计算。在本文中,我们利用一种通用的自适应采样方法,该方法可以更改底层的元模型和信息度量。这在算法1中有更正式的定义。自适应算法使用归一化的单元状态X′和Y′作为信息度量。

B.边界信息度量

有多种查询策略可用于自适应采样,包括熵,模型改进,不确定性和密度。我们的目标是将搜索推向性能边界。因此,我们将指标设计为寻找尚未采样的高梯度区域这类似于LOLA-Voronoi算法的探索开发方法[18],因此我们将其作为基线比较之一。但是,存在于LOLAVoronoi中的Voronoi镶嵌化在样本数量和输入维数方面都无法很好地缩放。对于Rd中的n个点,其取值为O(nlogn + n [d / 2]),因此对于较大尺寸的问题不可行。因此,可以通过采样数量和输入参数提供更好的缩放比例的技术
为了发现性能边界,我们引入了两个新的元模型度量:
一个使用高斯过程回归(GPR)元模型
另一个使用k最近邻技术进行密度和方差估计。
随着高斯过程的缩放比例为O(n3)和k最近邻算法的比例缩放比例为O(knlogn),我们相信随着维数和所需样本数的增加,它们可以提供更好的缩放比例。这些元模型评估器定义为M(X)-它们将现有样本作为输入,并返回建议查询的质量作为输出。
对于每个查询**,GPR元模型都会返回平均值μ,平均值μ的一阶梯度和估计协方差σ。该协方差与到最近样本的距离成正比;因此,在这种情况下的差异使其可以适当反映查询距训练样本之一有多远。** GPR元模型评估器使用梯度的大小和不确定性,如下所示:MGP R(X)=(μ(X))g·(σ(X))v其中g和v是调整参数以平衡对高能量的勘探高梯度区域的不确定区域。
最近邻密度和方差(NNDV)元模型使用其最近邻来估计查询的大小和梯度。对于给定的查询状态,它返回其k个最近邻居的分数和距离。然后,它计算得分的方差σK和其邻居的平均距离dK。然后,按如下方式计算NNDV评估器:MNNDV(X)=​​(σK(X))g·(dK(X))v其中g和v是GPR元模型评估器中使用的相同调整参数。

表示被测系统F,方案状态空间X n,元模型评估器M和所需样本数N的函数

一组标记样本L选择一个查询批次大小L和一个初始批次的随机选择的查询状态XL 0。另外,选择许多建议的查询p来执行每次迭代。

自适应搜索(SUT,X n,M,N)
输入:代表被测系统的函数,场景状态空间X n,元模型评估器M和所需样本数N
输出:一组标记样本L选择一个查询批次大小L和一个初始批次的随机选择的查询状态XL 0。另外,选择许多建议的查询p来执行每次迭代。

V.边界标识

A.识别性能模式
黑匣子测试的问题之一是,我们无法查看决策引擎内部的内容以确定自治系统正在执行哪种行为。相反,我们必须使用外部可观察的状态,并根据系统性能的变化来推断行为的变化。我们当前的方法是应用无监督的聚类技术来识别系统的性能模式。在使用离散值对自治系统进行评分的情况下,例如任务成功和安全成功的二进制标准,从结果得分中识别出不同的性能模式是微不足道的。为了将我们的技术应用于提供连续未标记输出的系统,我们利用分数空间上的均值漂移[19]聚类来识别性能模式并对样本进行分类。一旦根据性能模式对样本进行了分类,就可以对其进行DBSCAN聚类[20] 在太空中找出不同的兴趣区域。 我们选择这两种聚类算法作为分类方法,因为它们不需要先验知识即可了解类之间的边界形状或类数。

B.集群拼接
为了从这些集群中获取边界,我们在具有不同性能模式的每个群集之间执行成对比较。我们利用k最近邻检测算法来确定每个样本在相邻群集中的最近邻。在相反簇中距离其最近邻居B距离之内的所有样本都将添加到最终边界集中。然后使用边界集中的对距离确定样本与性能边界的距离。该方法在算法2中进一步定义。

t:一组包含输入状态XN和输出得分Y N的标记样本L
一组确定的性能模式,边界B的集合和距离估计向量D令λP是平坦核均值漂移函数的阈值距离,C和nmin是DBSCAN函数的半径和最小成员参数。设D为要视为边界一部分的两个样本之间的最大距离

VI 结果

A.测试系统

开发了几种候选系统来评估自适应搜索和边界识别算法。第一类候选系统由数学测试函数组成,这些函数具有先验已知的性能边界。第二类包括简单的无人海底飞行器(UUV)场景
1)综合测试函数:开发了三个综合测试函数,以便针对已知的数学曲面评估算法。设计自定义测试函数的目的是模仿自治系统的性能环境中可能存在的多种特征和边界。这三个函数如下:
•Custom 2D(自定义2D)-二维输入尺寸和一个连续的未标记输出。它包含峰,谷,高原和悬崖等重要特征,其功能如图1所示。
•plates 2D-二维输入尺寸和一个离散输出。有5个得分类别。
•plates 3D-具有一个离散输出的三个输入尺寸。有5个得分类别。
这些低维测试功能的优点是易于可视化,并具有先验已知的性能边界。性能边界定义为测试函数的一阶导数的局部最大值。

图2:具有真实边界轮廓的合成2D函数的俯视图:(a)Custom2d(b)Plates2d

B.综合功能的搜索性能
我们根据第IV节中介绍的搜索算法识别测试功能中的功能并在性能边界附近采样的能力来评估其性能。为了进行比较,我们选择了Sobol序列设计作为基线空间填充方法。为了与当前的自适应采样技术进行比较,还包括了带有盲Kriging模型的LOLA-Voronoi顺序设计方法进行比较。可使用MATLAB中的SUMO软件工具箱[21]访问LOLAVoronoi代码。我们将这些方法与基于GPR和NNDV信息功能的自适应搜索算法进行了比较。我们为每个数学测试功能使用以下指标:精度,覆盖率,收敛性和运行时。精度定义为在性能边界0.01个单位的距离内,整个样本集中的百分比。覆盖率是性能边界的百分比,该边界在0.01个单位距离内具有样本。融合是达到90%覆盖率所需的样本数量已知边界。运行时间就是收集规定数量样本所需的秒数。这个这些试验的结果汇总在表一中。
在我们选择的所有指标中,本文介绍的搜索方法均优于空间填充方法以及流行的LOLA-Voronoi自适应搜索。如我们的Plates2d测试功能中那样,在严格定义边界的情况下尤其如此。如图4所示,基于GPR的搜索几乎将其所有样本集中在边界附近的区域中,而在小梯度的无用区域中选择的案例最少。更重要的是,在不到一半的拉丁语案例中,它也设法获得了对边界的几乎完全覆盖。超立方体方法。对于NNDV搜索算法,结果甚至更为明显,同时还具有运行时间更短的优点。在Plates2d和Plates3d函数之间的性能比较中立即显而易见的一件事是,增加的维数大大增加了获得边界覆盖所需的案例数。

图4:GPR搜索与Custom2d(顶部)和Plates2d测试功能(底部)的拉丁超立方体采样的散点图。所采集的样本为蓝色,边界的真实位置为红色。

2)UUV方案:除了测试函数外,还在自动驾驶汽车仿真中评估了搜索和识别算法。对于自动驾驶汽车,我们选择了在多目标导航场景下运行的模拟UUV。任务的目的是从起点到目标航路点,然后返回到单独的位置 电池耗尽之前的恢复点(所有这些点都是固定的)。 目标航路点放置在距起点和恢复点2公里的运营区域的相对侧。 此外,作战区域内还有三个方形障碍物,它们在向东和向北可能变化的一侧为400m。 因此,三个障碍物的中心形成了我们的六个输入状态维度,X = [E1,N1,E2,N2,E3,N3]。 图3中说明了这种情况。UUV情况的分数空间由两个二进制性能标签组成:任务成功和安全成功。 如果UUV实现了将其带入路口的目标,则该场景被标记为任务成功。 如果UUV使用足够的电池返回到恢复点,则该场景被标记为安全成功。 因此,该框架中存在四种性能模式,包括任务成功和安全成功标准的不同组合

图3:第VI-A.2节中描述的自主UUV场景的图示。

在我们选择的所有指标中,本文介绍的搜索方法均优于空间填充方法以及流行的LOLA-Voronoi自适应搜索。如我们的Plates2d测试功能中那样,在严格定义边界的情况下尤其如此。如图4所示,基于GPR的搜索几乎将其所有样本集中在边界附近的区域中,而在小梯度的无用区域中选择的案例最少。更重要的是,在不到一半的拉丁草立方体方法案例中,它也设法获得了对边界的几乎完全覆盖。 对于NNDV搜索算法,结果甚至更为明显,同时还具有运行时间更短的优点。在Plates2d和Plates3d函数之间的性能比较中立即显而易见的一件事是,增加的维数大大增加了获得边界覆盖所需的案例数

C. UUV仿真的评估
尽管测试功能可用于针对先验真值边界评估搜索和识别算法的性能,但它们不能代替被测自治系统的性能空间。本部分将基于GPR的搜索算法和群集拼接边界识别算法应用于UUV仿真,其中实际性能边界未知。使用拉丁超立方体采样方法运行第二个数据集,并使用相同的边界标识算法标识边界。

图5:为UUV仿真确定的两个性能边界示例。边界1(a)和(b)说明了安全成功与安全失败之间的边界,而边界2说明了任务成功与任务失败之间的边界。

图6:上面的直方图显示了从UUV模拟收集的所有样品到边界的距离

使用GPR搜索和拉丁超立方体搜索执行7500次运行后,所有4种潜在性能模式都有足够的情况来执行边界识别步骤。均值漂移识别方法的边界距离阈值设置为0.1个单位。在这种情况下,“精度”指标也设置为0.05个单位。由于未知边界的真实位置,因此未应用覆盖率指标。当每个边界在边界距离阈值内至少有10个案例时,确定系统已收敛。
从表二可以看出,GPR搜索几乎在所有方面都优于拉丁超立方体搜索。图6所示的直方图还显示了案例的分布如何趋向边界。 GPR搜索样本集包含0.1个单位的边界阈值内的所有6个可能边界的示例,而拉丁超立方体集仅包含边界阈值内的3个可能边界的示例。 GPR总共总共确定了每个边界250个案例,而拉丁文超立方体仅确定了每个边界20个案例。收敛测试表明,GPR能够从3000个样本中的所有6个边界中查找病例,而Latin hypercube方法需要大约12000个样本。图5显示了两个性能边界的示例,一对测试用例代表了边界的每一侧。在第一种情况下,障碍物的轻微变化会导致UUV尝试导航到 左,而不是右,因为它会猜测较短的路径并无法达到恢复点。

七。结论和未来的工作

在这项工作中,我们介绍了一种智能地发现和识别自治系统性能边界附近的测试用例的过程。这些边界定义为方案配置中的微小更改会导致系统性能发生较大变化的位置。通过利用自适应采样方法,我们能够减少找到感兴趣特征所需的样本数量。我们还引入了一种对所得样本进行无监督聚类的方法,以识别描述性能边界的查询。通过组合这些技术,我们能够为多目标UUV任务生成测试用例集,该任务执行了自治系统的不同基础决策过程。这项研究仍在进行中,还有许多途径尚待探索。特别是,我们对用于扩展系统以处理更多测试用例和方法的方法感兴趣。 更高的尺寸。 一种方法是利用局部GPR技术加速模型生成,以及研究非平稳协方差函数以处理特征的不同分辨率。 另一个特别令人感兴趣的途径是灵敏度分析,以确定某些状态对系统性能的影响。 另外,我们正在研究更复杂的异常检测方法,以作为对当前边界检测方法的一种可能的增强。 最后,我们正在为自主的UUV开发更现实的测试方案,以包括诸如洋流,其他类型的目标以及更多种类的障碍物之类的参数。

自动生成用于测试和评估自动驾驶汽车的各种挑战性场景相关推荐

  1. java 日志 生成器_自动生成 java 测试 mock 对象框架 DataFactory-01-入门使用教程

    项目简介 Data-Factory 用于根据对象,随机自动生成初始化信息,避免了手动创建对象的繁琐,便于测试. 特性 8 大基本类型的支持 String.Date.金额,日期等常见类型的支持 java ...

  2. [PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】

    2019独角兽企业重金招聘Python工程师标准>>> 场景 在编写PHPUnit单元测试代码时,其实很多都是对各个类的各个外部调用的函数进行测试验证,检测代码覆盖率,验证预期效果. ...

  3. php自动生成phpunit,[PHPUnit]自动生成PHPUnit测试骨架脚本

    场景 在编写PHPUnit单元测试代码时,其实很多都是对各个类的各个外部调用的函数进行测试验证,检测代码覆盖率,验证预期效果.为避免增加开发量,可以使用PHPUnit提供的phpunit-skelge ...

  4. [快速入门]Spring Boot+springfox-swagger2 之RESTful API自动生成和测试

    Swagger是自动生成 REST APIs文档的工具之一.Swagger支持jax-rs, restlet, jersey.springfox-swagger是Spring生态的Swagger解决方 ...

  5. IntelliJ IDEA快速自动生成Junit测试类

    1.背景 测试是保证代码必不可少的环节,自己构建测试方法太慢,并且命名也不规范,idea中提供了,一键构建测试结构的功能...废话不多说,直接写步骤 2.步骤 1.在需要做测试的类的当前窗口,直接按快 ...

  6. 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]

    前言 宏的定义:是组合到一起形成一个命令以自动完成某项任务的一系列命令和指令.(MSDN) 在使用Visual Studio宏实现JS折叠功能的时候就想过用它来实现代码自动生成,有了前面的基础,实现起 ...

  7. eladmin代码自动生成_如何让 Mybatis 自动生成代码

    1 创建代码生成器 1.1 创建Maven项目 1.2 配置 generator.xml 1.3 配置 pom.xml 1.4 使用及测试 2 XML 配置详解 2.1 优先 2.2 官网没有的 &l ...

  8. eladmin代码自动生成_如何让Mybatis自动生成代码

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:阿进的写字台 cnblogs.com/homejim/p/9782403.html ...

  9. IDEA自动生成类注解,IDEA作者信息自动生成,IDEA类信息自动生成

    在新建类文件的时候自动生成注解,诸如我们常见的那些 作者,创建时间,TODO 等等 将以下格式的代码放在Settings -> File and Code Templates -> Inc ...

最新文章

  1. 安卓取map集合转换为json_android json解析成map格式
  2. [YTU]_2640(编程题:运算符重载---矩阵求和)
  3. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出
  4. P7988-[USACO21DEC] HILO G【set,线段树】
  5. puppet php,puppet入门实践
  6. 百度测试新搜索结果页面 改进灵感来自谷歌?
  7. 微型计算机的现状历史未来,微型计算机的发展历史、现状和未来
  8. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
  9. SpringCloud学习5-如何创建一个服务提供者provider
  10. 2021-05-19 退役啦
  11. 毕业设计-仓库管理信息系统设计与实现(论文+源码+ppt答辩+开题报告+任务书)
  12. 虚拟机VirtualBox中Ubuntu和windows共享文件夹访问权限问题
  13. Typora免费版(Typora最后一个版本下载)
  14. C语言编写函数求字符串长度的几种实现方法
  15. CMOS搭建反相器、与非门和或非门以及OD和三态门
  16. Linux iptables MASQUERADE的作用
  17. netty的异常分析 IllegalReferenceCountException refCnt: 0, decrement: 1
  18. 苹果蕉文案:水果店苹果蕉推广文案
  19. Win7 共享打印机脱机解决
  20. dlib疲劳检测_dlib库检测人脸使用方法与简单的疲劳检测应用

热门文章

  1. 简单使用循环打印菱形小星星
  2. 网上银行系统1:系统分析
  3. 使用openlayers加载地图行政区域(结合百度云地图)
  4. 嵌入式设备时间同步管理
  5. 终于被我搞掂了 Vue3 + Element 的正确打开方式(直接拿来就用)
  6. 什么是导数和切线?以及他们的关系?
  7. PgAdmin3 F7
  8. 八问顺丰,被你们偷的iPad究竟何时能赔?
  9. 计算机怎样禁止再添加新用户,Win10如何添加新用户?
  10. 基于levy飞行改进的麻雀搜索算法-附代码