本主题介绍如何配置 C++test,以推算作者并在团队中分配质量任务。

章节目录:

关于任务分配和作者

通常有许多不同的团队成员在整个 SDLC 中从事开发项目 — 从应用程序逻辑的开发人员到 Web 接口的开发人员,再到验证端到端流程和事务的 QA 测试人员。

利用从同行评审工作流程自动化、静态分析到单元测试、运行时错误检测、SOA 策略执行、单个 SOA 组件功能测试以及端到端测试场景等技术,C++test 为各团队成员生成要执行的质量任务。然后,可以根据手动分配或自动检测到的作者数据将这些任务分配给合适的团队成员。

任务分配功能用于:

  • 使团队成员能够只将分配给自己的任务从命令行测试导入 UI。
  • 为团队成员提供一份仅包含分配给自己的任务的报告。
  • 在管理者报告中指示哪个团队成员负责哪些任务。

开发人员任务分配

对于开发人员,代码作者数据可以影响测试了多少代码,以及每个开发人员的质量任务视图中显示了哪些测试结果。

通过更改测试配置的范围设置,您可以将测试配置为只覆盖您创建的文件或行,或者只覆盖您在指定日期之后修改的文件或行。此外,如果为用于测试的测试配置设置了只测试指定作者的文件/行 [用户名] 范围选项,那么质量任务视图将只显示您所编写的代码中的测试任务,以及重新分配给您的任何其他任务。

QA 人员任务分配

对于 QA 人员,C++test 可以通过多种方式基于源码控制数据分配任务:

  • 如果您打算静态分析源码控制系统中的源文件,或者使用存储在源码控制系统中的测试文件执行功能测试,您可以设置 C++test 通过使用源码控制系统的数据来分配任务。静态分析任务将被分配给引入这些数据的人。测试失败将分配给最后处理相关测试的人员。

如果您在 C++test 环境中将源文件添加到项目中,您可以看到分配到该源文件的特定行中的团队成员,以及关于上次修改的时间信息:

  1. 打开相应文件的编辑器。
  2. 右键点击要查看其作者的行,然后从快捷菜单选择 Parasoft> 显示代码行的作者

注意,如果不使用源码控制数据推断任务所有者,则消息将显示文件的修改信息(而不是所选的特定行的信息)。

了解 C++test 的作者和任务分配

C++test 可以根据源码控制数据(来自支持的源码控制系统)、@author Javadoc 标签、xml 映射文件(文件到作者的直接映射)和/或当前本地用户来判断错误所属。

如果您使用多个源来确定作者,则通过从上到下的顺序读取首选项面板范围和作者页面中的设置来确定作者优先级(首先是源码控制,其次是 @author 标签,接下来是直接映射文件,最后是当前用户)。但是,如果通过所选选项之一无法确定作者(例如,选择了 @author 标签,但是文件没有 @author 标签),则 C++test 将根据所选的下一个选项确定作者。如果 C++test 仍然无法确定作者,则将用户设置为“未知”。同样,如果没有选择这些选项,也会将用户设置为“未知”。

如果您将 C++test 配置为同时使用源码控制和 @author 标签来推算作者,那么将尽可能检查源码控制,而 @author 将用于不受源码控制的项目和文件。

如果您选择使用当前的本地用户,那么本地用户将被视为作者,而本地修改时间将被视为最近一次修改时间。

C++test 分配作者和任务的方式如下:

  • 如果根据源码控制数据确定作者,则 C++test 会读取源码控制数据,以确定谁最后修改了与任务相关的文件/行/方法等,然后将任务分配给相应人员。
  • 如果根据 @author Javadoc 标签确定作者,那么 C++test 将查找与任务关联的代码最近的 @author Javadoc 标签,然后将任务分配给返回用户名的作者。
    • 对于方法级任务,首先检查 Javadoc 中的方法,然后检查封闭类,最后检查文件的第一个类;返回第一个非空作者。
    • 对于类级任务,首先检查 Javadoc 中的类,然后检查文件的第一个类;返回第一个非空作者。
    • 对于行级任务,首先检查 Javadoc 中的方法,然后检查类,最后检查文件的第一个类;返回第一个非空作者。
    • 对于文件和文件级任务,返回文件的第一个类的第一个作者
  • 如果直接指定文件到作者的映射,则根据这些设置分配作者。
  • 否则,本地用户将被视为该任务负责人,并将本地修改时间视为最近一次修改时间。
  • 如果静态分析违规被抑制,则与实施抑制的人员相关。

若要查看分配到某一行源代码的作者,以及关于最近一次修改时间的信息,可执行以下操作:

  1. 打开相应文件的编辑器。
  2. 右键点击要查看其作者的行,然后从快捷菜单选择 Parasoft> 显示代码行的作者

注意,如果不使用源码控制数据推算作者,则消息将显示整个文件的修改信息(而不是所选特定行的信息)。

更改推算作者的方式

可以指定作者的推算设置:

  • 通过 C++test GUI 中的范围和作者首选项页面。
  • 通过设置。

若要使用 GUI 控件更改作者推算方式,可执行以下操作:

  1. 选择 Parasoft> 首选项,打开首选项对话框。
  2. 在左侧窗格中,选择 Parasoft> 范围和作者分类。
  3. 使用可用控件指示您希望 C++test 如何计算范围和作者。
    • 使用源码控制(修改作者)来计算范围:源码控制数据将用于推算作者。
    • 使用文件系统(xml 映射)来计算范围:您将直接指定如何为特定文件或文件集分配任务(例如,您希望开发人员 1 负责一组文件,开发人员 2 负责另一组文件,等等)。详细信息请参阅指定文件到作者映射
    • 使用文件系统(当前用户)来计算范围:本地用户名将用于推算作者。
  4. 点击确认,保存设置。

有关如何通过设置指定作者的详细信息,请参阅配置设置

指定文件到作者映射

直接指定如何分配特定的文件或文件集的步骤:

  1. 指示您将按以下方式直接输入映射:
    1. 选择 Parasoft> 首选项,打开首选项对话框。
    2. 在左侧窗格中,选择范围和作者分类。
    3. 选择使用文件系统(xml 映射)来计算范围
  2. 按以下方式输入文件到作者映射的详细信息:
    1. 在首选项对话框中选择范围和作者> 作者的映射分类。
    2. 在作者的映射表中指定映射。注意,允许使用通配符;例如:
      • ?oo/src/SomeClass.java - 分配所有以任何字符(除 /)开头并以 "oo/src/ 结尾的所有文件
      • **.cs - 分配任何目录中的所有 *.cs 文件
      • **/src/** - 分配路径中包含“src”文件夹的每个文件
      • src/** - 分配位于目录“src”中的所有文件
      • src/**/Test* - 分配“src”目录中名称以“Test”开头的所有文件(例如,“src/some/other/dir/TestFile.c”)

        映射的顺序问题

        将最泛的路径放在映射的末尾。例如,在这里 /ATM/** 路径是最后一个,因为它是最泛的路径:
        /ATM/unittests/**  user 1

        /ATM/other/**       user 2

        /ATM/**                user 3

        这表示将 unittests 文件分配给用户 1,将 other 文件分配给用户 2,将所有其他 ATM 文件分配给用户 1。如果颠倒顺序,所有 ATM 文件将分配给用户 3。

    3. 点击保存更改
  3. 如果您还没有在整个团队中共享这些首选项,可点击导出将映射导出为 XML 文件,然后让团队成员导入映射文件。

或者,您可以通过以下方式让 C++test 使用导出的 XML 文件:

  • GUI - 在首选项对话框的范围和作者> 作者的映射分类(使用共享文件选项)中指定该文件的路径。
  • 命令行 - 使用 scope.xmlmap=true、scope.xmlmap.file=[file]scope.mappings.location 属性指定该文件的路径(通过在配置设置中说明的 -settings 选项以及 [Parasoft 产品名] 用户指南> 设置和测试指南> 运行测试> 从命令行运行测试。请注意,这将覆盖 GUI 中指定的任何作者设置。

下面是一个 XML 作者映射文件示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE authorship (View Source for full doctype...)>
<authorship>
  <!-- assigns all files named: "foo/src/SomeClass.java" to "author1" -->
  <file author="author1" path="foo/src/SomeClass.java" />

  <!-- assigns all files whose names starts with any character (except /) and ends with "oo/
src/SomeClass.cs" to "author2" -->
  <file author="author2" path="?oo/src/SomeClass.cs" />
  <!-- assigns all *.c files in any directory to "author3" -->
  <file author="author3" path="**.c" />
  <!-- assigns every file whose path has a folder named "src" to "author4" -->
  <file author="author4" path="**/src/**" />
  <!-- assigns all files located in directory "src" to "author5" -->
  <file author="author5" path="src/**" />
  <!-- assigns all files in directory "src" whose name starts with "Test" i.e. "src/some/
other/dir/TestFile.java" to "author6" -->
  <file author="author6" path="src/**/Test*" />
</authorship>

从源码控制生成 XML 映射文件

您可以使用脚本从源码控制系统中生成 XML 映射文件。下面的 Perl 脚本示例展示了如何从 Git 生成作者映射文件。如果使用不同的源码控制系统,则进行相应的修改。

#!perl
 
############################################################
# GetAuthors.pl
# Sample script to generate file --> author mapping.
# Note that this is usually run only once, when you first
# deploy C++test .
#
# This script assumes that you have a list of all the files in the
# project. For example, such a list can be obtained on windows
# by using "dir /s/b *.c" for c files.
############################################################
 
sub GetAuthor
############################################################
# Gets the author (person who last modified the file) for
# the input file.
############################################################
{
   my $fileName = shift(@_);
   return `git log --pretty=format:"%an" -1 $fileName`;
}
 
print "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print "<mapping>\n";
 
############################################################
# AllCFiles.txt has a list of all the c files in the
# project. The following loop iterates through all the
# files and assigns owners to each.
############################################################
open(FILELIST, "<AllCFiles.txt") || die "Could not open AllCSFiles.txt";
while (<FILELIST>)
{
    chop;
    my $fileName = $_;
    my $author = GetAuthor($fileName);
    if ($author eq "")
    {
        $author = "DontKnow";
    }
    print "<file path=\"$fileName\" ";
    print "author=\"$author\" />\n";
}
 
print "</mapping>\n";

指定作者到作者和作者到电子邮件地址的映射

默认情况下,C++test 将检测到的每个用户名值(例如,基于源码控制数据、系统的本地用户设置、@author 标签、直接映射文件、导入的 scanner.properties 文件)视为代码作者的用户名,相关开发人员的电子邮件为 [username]@[mail_domain]。

但是,在某些情况下,您可能希望将检测到的用户名映射到另一个用户名和/或电子邮件地址。例如:

  • 如果您想将一个开发人员的所有任务重新分配给另一个开发人员(例如,如果用户 1 离开了小组,而您希望用户 2 负责分配给用户 1 的所有任务)。我们将这种类型的映射称为“作者到作者的映射”。
  • 如果开发人员的用户名与其电子邮件地址不匹配(例如,检测到的用户名是 john,但是相应的电子邮件地址是 [email protected])。  我们将这种类型的映射称为“作者到电子邮件的映射”。

这些作者设置可以自动配置一次,然后按照 C/C++test 配置概述中的说明使用自动配置过程在整个团队中共享。

如果尚未从自动配置过程中设置相应的作者设置,或者希望更改/覆盖导入的设置,则可以将检测到的默认用户值映射到其他用户名和/或电子邮件地址,步骤如下:

  1. 选择 Parasoft> 首选项
  2. 打开 Parasoft> 作者选项卡。
  3. 确保没有启用使用 DTP 设置
  4. 如果要指定“作者到电子邮件地址”的映射:
    1. 进入登录 / 邮件 / 全名表。
    2. 点击添加
    3. 在表中指定所需的映射
  5. 如果要指定“作者到作者”的映射: 
    1. 进入重新分配来自作者的任务...给这个作者表。
    2. 点击添加
    3. 在表中指定所需的映射。
  6. 点击应用按钮,保存更改。

在 UI 中指定作者 - 与 DTP 集成

如果您的 C/C++test 安装程序与 DTP 连接,当您开始键入团队成员的姓名或电子邮件地址时,C/C++test 会自动显示建议列表。例如,当您键入“a”来指定作者的姓名时,您可以从以“a”开头的用户名列表中选择作者。这适用于能够输入团队成员姓名或电子邮件地址的所有 UI 元素(例如,电子邮件通知、重新分配任务等)。

如果 DTP 数据库中不存在用户名或电子邮件地址,C/C++test 会显示警告消息。

在设置中指定作者映射

您还可以在设置文件中指定作者映射(通过命令行或存储在 DTP 上的 C++test 首选项)。

操作步骤:

  1. 使用 authors.mapping 指定映射。
  2. 使用 authors.user 指定邮箱设置。

例如:

authors.mapping1=baduser,gooduser

authors.mapping2=brokenuser,fixeduser

authors.mapping3=olduser,newuser

authors.user1=gooduser,[email protected],Gooduser Stowe

authors.user2=fixeduser,[email protected],Fixeduser White

...

区分大小写模式

您可以决定作者值是否区分大小写。区分大小写设置适用于以下部分的作者值:

  • 质量任务
  • 报告
  • 范围和作者
  • DTP 任务
  • 测试配置

这里的区分大小写设置应与 DTP 中的区分大小写设置匹配。默认情况下,DTP 区分大小写。有关如何在 DTP 中配置区分大小写设置的详细信息,请参阅 DTP 用户指南。

区分大小写详细信息

区分大小写设置决定同一用户名的多个变体是被视为一个用户还是多个用户,例如:

  • 区分大小写:David 和 DAVID 将被视为两个不同的用户。
  • 不区分大小写:  David 和 DAVID 将被视为同一个用户。

在团队使用的外部数据库中用户名大小写无关紧要的情况下,不区分大小写模式就十分有用。如果用户名 david 作为 DAVID 存储在数据库中,并且您使用的是区分大小写模式,那么为 DAVID 导入的任务将无法与 david 匹配。

区分大小写配置

您可以在首选项面板中进行区分大小写的设置。要禁用区分大小写设置,可前往 Parasoft> 作者并启用忽略 Parasoft Test 平台中用户名称的大小写选项。启用此选项后,C/C++test 会将只有大小写不同的用户名视为相同的用户名(例如,“John”和“john”将被视为同一用户)。

还可以使用 authors.ignore.case=true|false 设置选项来配置此模式。有关设置选项的详细信息,请参阅配置设置

  • No labels