bugzilla 缺陷报告功能改造

本文介绍如何在Bugzilla中实现自定义报告,包括缺陷趋势数据、生命周期、原因统计等功能。通过编写Perl程序,每当创建或更新BUG时自动更新统计数据,以网页形式展示。同时,代码示例展示了如何按日期、原因、模块和严重级别进行统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在bugzilla中,由于要用到一些自定义报告的方式,如缺陷生命周期、缺陷趋势数据 ...,,这两种报告bugzilla工具没有提供此报告,所以想办法写了写,实现统计数据方法,并用网页形式出

1.自定义了一张表,来记录缺陷趋势数据,写了一个程序,来实现数据统计功能;

2.修改bugzilla的页面程序,使之每当新建BUG,或bug属性变化时,就自己动更新一次统计数据;

3.缺陷报告,实现了数据的统计,缺陷趋势数据、缺陷生命周期、缺陷原因、按模块统计、按严重级别等几个功能;

the last ,用perl实现图形报表时,一直没有做出来,知道是不是模块的与操作系统的原因,我已经安装过图形包,而bugzilla自己的图形报告也出不来, so,就只能是数据报表输出,再放到excle表中,就出图了:)

 

此程序的完成得感谢谢杨明同志的辛苦,哈哈,杨明是好同志啊 ~!~

 

 

下面是两个程序的代码:

==================================== 报表程序 ======================================

#!/usr/bin/perl
###############################################################
# Author           :  liulin
#
# Last Edit date   :  2010-11-18
#
# change comment   :  统计方法有BUG,BUG的生命周期方法修正
################################################################
use strict;
use warnings;
use Switch;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use DBI;

my $bugzillaDBaddr="localhost";
my $bugzillaDBdatabase="bugs";
my $bugzillaDBusr="bugs";
my $bugzillaDBpwd="123123";

# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:".
    "database=".$bugzillaDBdatabase
    .";host=".$bugzillaDBaddr,
    $bugzillaDBusr ,
    $bugzillaDBpwd ,
    {'RaiseError' => 1});
# test mysql conn
eval { $dbh->do("SET NAMES gbk;") };
print "Set chareset failed: $@/n" if $@;

 

############################################################
# function : 主执行函数
# parameter:
# return   :
############################################################
sub main{
   print header(-charset => 'gb18030');
    print start_html('statistic bugs data ....');
   printHead();
   do_work();
   print end_html;
}

############################################################
# function : Statistic bugs total trend
# parameter:
# return   :
############################################################
sub statisticTrend{
   #sql statement handle
   my $sth = $dbh->prepare("select substr(bug_time,1,10) as date,bug_sum as bugs_total, bug_close_sum as bugs_closed_total,bug_open_sum  from bug_sum_data");
   $sth->execute();

   print "<table border=/"1/">";
   print "<tr><td>日期</td><td>BUG总数</td><td>关闭总数</td><td>打开总数</td></tr>";

   while (my $ref = $sth->fetchrow_hashref()) {
       print "<tr><td>$ref->{'date'}</td><td>$ref->{'bugs_total'}</td><td>$ref->{'bugs_closed_total'}</td><td>$ref->{'bug_open_sum'}</td></tr>";
   }
   print '</table>';
}


############################################################
# function : Statistic bugs reason
# parameter:
# return   :
############################################################
sub statisticReason{
   # sql statement handle
   my $sth = $dbh->prepare('select cf_bugwhen,count(*) as bugNum  from bugs group by cf_bugwhen;');
   $sth->execute();
    print "<table border=/"1/">";
   print "<tr><td>bugcause</td><td>bugnum</td></tr>";
   while (my $ref = $sth->fetchrow_hashref()) {
           print "<tr><td>$ref->{'cf_bugwhen'}</td><td>$ref->{'bugNum'}</td></tr>";
   }
   print '</table>';
}


############################################################
# function : 按模块统计  每个模块的bug数
# parameter:
# return   :
############################################################
sub statisticModel{
   # sql statement handle
   my $sth = $dbh->prepare(' select comp.name as compname,count(*) as bugnumbycomp from components comp inner join bugs  on comp.id = bugs.component_id group by comp.id order by comp.id;');
   $sth->execute();
    print "<table border=/"1/">";
   print "<tr><td>compname</td><td>bugnumbycomp</td></tr>";
   while (my $ref = $sth->fetchrow_hashref()) {
          print "<tr><td>$ref->{'compname'}</td><td>$ref->{'bugnumbycomp'}</td></tr>";
   }
   print '</table>';
}

 

############################################################
# function :  按严重级别统计
# parameter:
# return   :
############################################################
sub statisticSerious{
   # sql statement handle
   my $sth = $dbh->prepare('select bug_severity,count(bug_severity) as bugNum from bugs  group by bug_severity;');
   $sth->execute();
    print "<table border=/"1/">";
   print "<tr><td>bugseverity</td><td>bugnum</td></tr>";
   while (my $ref = $sth->fetchrow_hashref()) {
         print "<tr><td>$ref->{'bug_severity'}</td><td>$ref->{'bugNum'}</td></tr>";
   }
 &n

Bugzilla的详细使用说明 目 录 简介: 2 Bugzilla处理流程: 2 常用的一些操作: 3 登陆Log in: 3 Preferences: 3 提交新bug New: 7 Search: 8 Reports: 11 Bugzilla简明使用手则 简介:   Bugzilla是Mozilla公司向我们提供的一个开源的免费缺陷跟踪工具。作为一个产品缺陷的记录及跟踪工具,它能够为你建立一个完善的Bug跟踪体系,包括报告Bug、查询Bug记录并产生报表、处理解决、管理员系统初始化和设置四部分。并具有如下特点: Bugzilla处理流程: 常用的一些操作: 首先打开IE在地址栏里输入:http://172.18.11.154/bug,正常情况下应该显示如下界面 登陆Log in: 用户名密码初始状态是姓名的汉语拼音,同公司邮箱的拼写。如果登陆不成功的可以发邮件给我。登陆后可修改密码。如果忘记密码可点击“Forgot Password”进行找回或直接联系管理员。 登陆成功后可以进入最开始的界面了,这里可以看到我的账户了,并且以管理员账户登陆后与普通用户界面有些差异,先不关注。 Preferences: 修改密码 主要是设置账户信息,修改密码。 General Preferences 这里设置一般参数。例如CVS文件的分割,bug查看的顺序,可以根据自己的需要做更改 Email Preferences 这里设置E-mail收发的。选择什么情况下收到邮件通知。 Assignee:分配人 Reporter:报告人 CCed:抄送人 Saved searches 察看保存的查询 Permissions 察看权限 Flags:管理员操作 在这里你可以新建Flags(标记),标记的意思就是表明一个bug或附件是否通过或是被拒绝(+表示通过,-表示拒绝,?表示被用户请求)。 比如我在附件中设置一个标记:review,用来标记用户复查他的补丁,如果一个开发者要求review,则状态会置为review?,如果补丁通过则状态为review+,如果没通过review- 添加bug标记: 添加详细的Flag: 这里需要我们把每个字段说明一下: Name:简单指明flag的类型 Description:详细说明这个类型 Category:那些必须包含或必须排除bug的产品、组件,应可以由用户为它们设置标志 Sort Key:从1到32768的一个数字,这个类型将被存储并在列表中显示给用户,如果你不在乎类型显示的顺序或者你想让它们以字母顺序显示则在这里选择“忽略”   Active(默认勾选,这个类型的标志显示在用户界面并可以设置)   Requestable(默认勾选,用户可以要求这个类型的标志被设置) CC List:如果要求谁应该得到一份通知拷贝则在这里写下Email地址全称,用逗号分割,不必登陆bugzilla   Specifically requestable(默认勾选,用户可以让其他特定的用户设置类型标记)   Multiplicable (多个类型标志可以在一个bug上设置) Grant Group:允许一个组同意/拒绝这个类型的标志(如果想要所有有哪个户都可以同意/拒绝这些标志,则保持这里设置为空) Request Group:如果这个类型的标志是被要求的,组可以允许要求(如果想要所有有哪个户都可以同意/拒绝这些标志,则保持这里设置为空)注意,要求如果Grant Group没有定义那么Request Group是没有作用的 添加Attachments标记:内容与添加bug标记一样 提交新bug New: 提交新bug,首先选择产品(product):如果只有一个product直接进入提交界面 主要字段: 版本号(version):软件版本 组件(component):产品(product)中细分的组件 平台(hardware):硬件平台 操作系统(os):软件操作系统 优先级(priority):bug的优先级 严重级(severity):bug的严重级别 分配给谁(assign to):这个主要由你选则的模块(component)自动决定, 也可以自己输入 抄送给谁(CC):可以选择同时把这封提交bug的邮件抄送给谁 概要(summary):类似于标题 描述(discription):具体的bug描述 选择框让哪个组可见,如果都不选的话则都可看见这个bug 如上图中我所设置,点击提交bug(commit),这时bug应该以邮件方式发送成功。我们还可以设置其他的一些参数,如添加附件,添加评论,更改bug状态,打印,复制bug等。我们这里暂时只关注常用到的内容。 Search: 在这里我们可以设置查询并保存: Find a Specific Bug: 找到一个特定的bug,在这里可以选择bug状态,产品,和关键字(在summary中查找)不过这个功能无效—bugzilla的bug? Advanced Search: 高级查询,可以根据不同bug参数结合来进行查询,这个就比较复杂了,但也不是很难理解,因为多数参数我们在new一个bug的时候已经都看到怎么设置了,相应的在这里我们设置查询条件即可。 以列表列出的条件都是可以多选的,如product,status,priority等。 这里的查询很全面,其中的组合操作还需要根据个人的期望来设置,经过几次简单的试验发现summary中输入单个字对bug的搜索将会更好一些,而输入词则不能正确搜索出bug,也许这个和字符编码有关吧? 设好条件,点击search,会出现搜索结果的页面。如果要保存当前的Search,在右下方Remember search中输入一个保存查询的名称,比如:buglist,保存之后会出现在页脚的位置与My Bugs并排。 BugList:设定任何条件搜索之后会出现一个搜索结果,将符合条件的bug以列表列出来,系统默认有个My Bugs,通过点击它可以看到当前用户提交的所有处理中bug。 结果显示界面: 针对搜索出来的buglist,我们可以做以下操作: CSV 导出cvs格式的表格,通过excel打开时,中文会显示乱码,因为bugzill是utf8的编码,在excel中不支持,就是把csv文件转成ascii码就能正常显示的,具体是将cvs文档用记事本或utraledit打开,另存为,格式中选择"ANSI/ASCII"。重新用excel打开就能正常显示了 Change Columns 更改及重排列表中显示的字段。 Change Several Bugs at Once 批处理选中的多个bugs,如图 SendMail to bug Assginee 将mail给任务指派人,点击后会弹出邮件客户端,将assignees设为收件人。 直接简单的bug查找: 我们可以直接在下面输入bug号进行查询 Reports: 这里面主要是使用表格和图表来统计显示bug信息,如bug走向,按版本或修改人显示bug数等 Current state: Search:跟前面讲的相同 Tabular reports: 表格报告。通过设置横、纵轴和高级搜索中的一些条件来组合出表格形势的bug报告:比如设置x轴为assignee,y轴y为产品product,multiple tables为状态status,Multiple Tables选项意思是多表格显示。搜索统计wrm1,wrm1_ts两个产品的New,assigned,reopened,resolved,verified这四种状态的结果。 结果会分别生成指定五个状态的五个表,每个表都是以人员为X轴,产品名称是Y轴,内容是bug数量。如图: 这里是网上的另一个例子。图示:查看GBQ3.0产品版本于分配人的表格报告: 点击生成报告: 其他不同条件的报告生成就根据要求自己设置,这里不做详细说明了。 Graphical reports:暂不能显示生成的图表。 图表报告。可以生成线性图,柱状图和饼图。 设置条件与上一个表格报告类似,这里我们就简单举出几个常用的例子。 查看不同版本bug严重级别的走向: 显示Line Graph
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值