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.
- data/lib/heatmap/version.rb +1 -1
- data/readme.markdown +36 -0
- data/screenshot.png +0 -0
- data/spec/example-data.csv +12 -12
- metadata +7 -5
data/lib/heatmap/version.rb
CHANGED
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
|
data/spec/example-data.csv
CHANGED
@@ -1,42 +1,42 @@
|
|
1
|
-
21,
|
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,
|
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,
|
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,
|
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,
|
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,
|
30
|
-
17,
|
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,
|
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,
|
37
|
-
12,
|
38
|
-
24,
|
39
|
-
11,
|
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.
|
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: &
|
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: *
|
24
|
+
version_requirements: *70118248598580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: guard
|
27
|
-
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: *
|
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
|