defect-density-heatmap 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module Heatmap
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/readme.markdown ADDED
@@ -0,0 +1,36 @@
1
+ Defect Density Heatmap - Visualizing Code Churn
2
+ -----------------------------------------------
3
+
4
+ This is the defect density heatmap and it is used to identify files in your codebase that change often as a result of working on features and fixing defects. Before using the heatmap generator some background information is needed.
5
+
6
+ In our day to day development efforts we often commit code to our repository and give it a commit message. What if we add an additional piece of information to our commit message, such as a discriminator, identifying whether this change was related to a feature or defect? It can be anything, like starting the commit message with an 'F' or 'D'. If you're in corporate IT, your auditors would love it if you put ticket numbers in your commits (such as FEA-1234, DEF-1234)
7
+
8
+ Take a simple example:
9
+
10
+ # ListController.java, ColumnSorter.js, ListView.jsp, ListRepository.java
11
+ git commit -m 'f Adding clickable column headings for sorting'
12
+
13
+ # ListController.java, ColumnSorter.js
14
+ git commit -m 'd Prevented NPE when invalid product code filter entered'
15
+
16
+ # ListController.java, ListView.jsp
17
+ git commit -m 'd Fix spelling error'
18
+
19
+ This simple practice can give us some interesting insights into our code. Doing a bit of log crunching we can end up with a list of total changes and total defects a given file is associated with:
20
+
21
+ # change-data.csv
22
+ 1,0,src/main/java/com/example/ListRepository.java
23
+ 3,2,src/main/java/com/example/ListController.java
24
+ 2,1,src/main/webapp/ListView.jsp
25
+ 2,1,src/main/webapp/js/ColumnSorter.js
26
+
27
+ In this example, the first column is the total number of changes and the second column is the number of defects this file was involved with.
28
+
29
+ Using the heatmap generator, we can create a tag cloud giving us a visualization of our code over time. The heatmap can be invoked in the usual ways:
30
+
31
+ cat change-data.csv | heatmap > results.html
32
+ heatmap -f change-data.csv -o results.html
33
+
34
+ The command renders a tag cloud formatted as HTML. The larger the text, the more that source file has changed. The text color changes from black to red based on the ratio of defects to changes. The more defects, the more red you see. Big + Red = Bad
35
+
36
+ ![Heatmap Screenshot](./screenshot.png)
data/screenshot.png ADDED
Binary file
@@ -1,42 +1,42 @@
1
- 21,21,src/main/java/com/example/File1.java
1
+ 21,15,src/main/java/com/example/File1.java
2
2
  8,2,src/main/java/com/example/File2.java
3
3
  3,0,src/main/java/com/example/File3.java
4
4
  23,10,src/main/java/com/example/File4.java
5
5
  22,17,src/main/java/com/example/File5.java
6
6
  21,13,src/main/java/com/example/File6.java
7
7
  20,12,src/main/java/com/example/File7.java
8
- 16,16,src/main/java/com/example/File8.java
8
+ 16,8,src/main/java/com/example/File8.java
9
9
  20,12,src/main/java/com/example/File9.java
10
10
  15,9,src/main/java/com/example/File10.java
11
11
  3,1,src/main/java/com/example/File11.java
12
12
  3,3,src/main/java/com/example/File12.java
13
- 11,11,src/main/java/com/example/File13.java
13
+ 11,1,src/main/java/com/example/File13.java
14
14
  9,7,src/main/java/com/example/File14.java
15
15
  9,6,src/main/java/com/example/File15.java
16
- 15,11,src/main/java/com/example/File16.java
16
+ 15,1,src/main/java/com/example/File16.java
17
17
  4,4,src/main/java/com/example/File17.java
18
18
  2,0,src/main/java/com/example/File18.java
19
19
  20,20,src/main/java/com/example/File19.java
20
20
  4,0,src/main/java/com/example/File20.java
21
21
  1,0,src/main/java/com/example/File21.java
22
22
  11,0,src/main/java/com/example/File22.java
23
- 21,11,src/main/java/com/example/File23.java
23
+ 21,6,src/main/java/com/example/File23.java
24
24
  8,5,src/main/java/com/example/File24.java
25
25
  20,2,src/main/java/com/example/File25.java
26
26
  11,8,src/main/java/com/example/File26.java
27
27
  1,0,src/main/java/com/example/File27.java
28
28
  22,14,src/main/java/com/example/File28.java
29
- 22,16,src/main/java/com/example/File29.java
30
- 17,10,src/main/java/com/example/File30.java
29
+ 22,0,src/main/java/com/example/File29.java
30
+ 17,5,src/main/java/com/example/File30.java
31
31
  17,8,src/main/java/com/example/File31.java
32
- 24,16,src/main/java/com/example/File32.java
32
+ 24,7,src/main/java/com/example/File32.java
33
33
  8,4,src/main/java/com/example/File33.java
34
34
  9,0,src/main/java/com/example/File34.java
35
35
  1,0,src/main/java/com/example/File35.java
36
- 14,8,src/main/java/com/example/File36.java
37
- 12,6,src/main/java/com/example/File37.java
38
- 24,6,src/main/java/com/example/File38.java
39
- 11,10,src/main/java/com/example/File39.java
36
+ 14,1,src/main/java/com/example/File36.java
37
+ 12,3,src/main/java/com/example/File37.java
38
+ 24,5,src/main/java/com/example/File38.java
39
+ 11,2,src/main/java/com/example/File39.java
40
40
  8,4,src/main/java/com/example/File40.java
41
41
  10,10,src/main/java/com/example/File41.java
42
42
  19,4,src/main/java/com/example/File42.java
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defect-density-heatmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70219516054120 !ruby/object:Gem::Requirement
16
+ requirement: &70118248598580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70219516054120
24
+ version_requirements: *70118248598580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: guard
27
- requirement: &70219516053700 !ruby/object:Gem::Requirement
27
+ requirement: &70118248598160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70219516053700
35
+ version_requirements: *70118248598160
36
36
  description: Generates a tag cloud based on project file churn.
37
37
  email:
38
38
  - bcarlso@gmail.com
@@ -52,6 +52,8 @@ files:
52
52
  - lib/heatmap.rb
53
53
  - lib/heatmap/version.rb
54
54
  - lib/heatmap_formatter.rb
55
+ - readme.markdown
56
+ - screenshot.png
55
57
  - spec/example-data.csv
56
58
  - spec/heatmap_formatter_spec.rb
57
59
  - spec/spec_helper.rb