Redmine Redmine 入门五——Redmine 中生成 smi

bernardlai · 2016年04月15日 · 9 次阅读

[align=center] Redmine 中生成 smi [/align]

SMI 是使用数据来评价软件质量的一种方法。 在 Redmine 中使用 SMI 需要三个步骤,首先完成 SMI 的评价标准,其次定期存储 smi 在数据库中,最后选择合适的方法进行展示。 一、SMI 的评分标准 通常 smi 的评价有两个维度,问题的状态和严重度。例如:打开 10 分,修复 5 分,验证 3 分;严重 4 分,普通 3 分,轻微 2 分,体验 1 分。完成评价量表。 打开 10 分 修复 5 分 验证 3 分 合计 严重 4 分 1 0 2 64 普通 3 分 0 1 1 24 轻微 2 分 1 2 1 36 体验 1 分 0 0 1 3 合计 127 二、系统中定期生成 smi 2.1 Rails 中有 gem rufus-scheduler 可以进行执行定期任务。 rufus-scheduler 要去必须有一个活动线程,因此如果使用 Apache 配置 redmine 需要添加如下配置。 [code] PassengerMaxPreloaderIdleTime 0 PassengerMinInstances 1[/code] 2.2 在数据库中创建表 redmine_smis 用来存储定期数据,结构可以参考: [code] DROP TABLE IF EXISTS redmine_smis; CREATE TABLE redmine_smis ( id int(11) NOT NULL AUTO_INCREMENT, due_date date DEFAULT NULL, project_id int(11) NOT NULL, status_id int(11) NOT NULL, severity varchar(30) NOT NULL DEFAULT '', issue_count int(11) NOT NULL DEFAULT '0', weight float(13,1) NOT NULL DEFAULT '0.0', PRIMARY KEY (id), KEY issues_project_id (project_id), KEY index_issues_on_status_id (status_id) );[/code] 2.3 编写定期统计方法 [code] def CalculationSmi() status_weight = {“打开”=> 10, “修复” => 5,” 验证”=> 3} severity_weight = {"严重" => 4 ,"普通" => 3, "轻微" => 2, "体验" => 1, }

@projects = Project.all if !@projects.nil? @projects.each do |project| @query = IssueQuery.new(:name => "_", :filters => filters ,:group_by=>"") if @query.issue_count>0 # 系统 {“打开”=> 10, “修复” => 5,” 验证”=> 3}.each do |status|

@query ||= IssueQuery.new(:name => "_") @query.filters = filters @query.group_by = "严重度"

if @query.issue_count>0 @issue_count_by_group = @query.issue_count_by_group if !@issue_count_by_group.nil? Rails.logger.info @issue_count_by_group @issue_count_by_group.each do |k,v| @smi = RedmineSmi.new @smi.project_id = project.id @smi.status_id = status @smi.severity = k @smi.issue_count = v @smi.due_date = Date.today @smi.weight = (status_weight[status] * severity_weight[k]).round(1) @smi.save! end end end end end[/code] 2.4 定期调用 [code] schedulersmi = Rufus::Scheduler.new cronStsmi = '00 00 * * 6' schedulersmi.cron cronStsmi do begin scheduler = Object.new.extend(Scheduler) scheduler.CalculationSmi() rescue Exception => e Rails.logger.info "Scheduler failed: #{e.message}" end end[/code] 三、数据显示 可以通过趋势图、统计表来显示数据。 画图的 JavaScript 库有很多这里推荐 highchart 和 echart

小赖,给力

后悔了没?

后悔啥???

错过这么帅气的小伙伴

需要 登录 后方可回复。