Unifying Artifacts and Activities in a Visual Tool for Distributed Software Development Teams Jon Froehlich and Paul Dourish Interactive & Collaborative Technologies Group School of Information and Computer Science University of California, Irvine
2 Overview Software development is complex –Involves dealing with complexity of source code (artifact) Distributed software development is even more complex –Involves dealing with both complexity of artifact and` activities around that artifact These two sources of complexity are not independent –Our approach seeks to combine them in a familiar visual frame
3 String.java class String implements Comparable } String substring(int index){ } } String(char value[]){ } public int compareTo(Object o){ Example Amy Frank Daniel Jan ‘04 March ‘04 Feb ‘04
4 String.java class String implements Comparable } String substring(int index){ } } String(char value[]){ } public int compareTo(Object o){ Artifact-Based Tools Amy Frank Daniel Jan ‘00 March ‘04 August ‘02 July ‘02
5 String.java Activity-Based Tools Amy Frank Daniel Jan ‘00 March ‘04 August ‘02 July ‘02 class String implements Comparable } String substring(int index){ } } String(char value[]){ } public int compareTo(Object o){
6 Separation This separation makes it difficult to see elements that involve both artifact and activity: –Who has been working on new sections of code? –Which developers have worked together recently and on what functions/files? or more complicated questions like –What modules depend on those recently updated
7 Our Approach To address this separation, we’ve developed a visualization tool called Augur. –Augur uses the source code itself to reveal information about development activity The source code becomes a unifying principle with which to reveal information about its development
8 Our Approach Augur relies on existing configuration management systems for its activity data –Currently supports CVS Augur performs language/structural analysis to better understand semantics of code
9 Visualizations Visualizations shift load from cognitive system to perceptual system –Leverage visual system’s ability to perceive patterns and structures Visualizations allow user to process large amounts of information in a consumable way
10 SeeSoft
(edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * This is a test class to demo Augur! 1.3 (edward 11-Mar-04): Jon, Sandy, Edward 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public class HelloWorld { 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Default constructor 1.3 (edward 11-Mar-04): */ 1.2 (sandy 06-Mar-04): public HelloWorld(){ 1.2 (sandy 06-Mar-04): Log.println(“Constructor called"); 1.2 (sandy 06-Mar-04): } 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Prints HelloWorld msg & logs call 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public void printMessage(){ 1.2 (sandy 06-Mar-04): Log.println("printMessage called"); 1.1 (jon 02-Feb-04): System.out.println("HelloWorld"); 1.1 (jon 02-Feb-04): } 1.1 (jon 02-Feb-04): }//end HelloWorld class SeeSoft Date Legend Mar 11 Mar 06 Feb 02 Date Legend Mar 11 Mar 06 Feb 02 HelloWorld.java Temporal Activity Date Legend Mar 11 Mar 06 Feb 02 Date Legend Mar 11 Mar 06 Feb 02
(edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * This is a test class to demo Augur! 1.3 (edward 11-Mar-04): Jon, Sandy, Edward 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public class HelloWorld { 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Default constructor 1.3 (edward 11-Mar-04): */ 1.2 (sandy 06-Mar-04): public HelloWorld(){ 1.2 (sandy 06-Mar-04): Log.println(“Constructor called"); 1.2 (sandy 06-Mar-04): } 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Prints HelloWorld msg & logs call 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public void printMessage(){ 1.2 (sandy 06-Mar-04): Log.println("printMessage called"); 1.1 (jon 02-Feb-04): System.out.println("HelloWorld"); 1.1 (jon 02-Feb-04): } 1.1 (jon 02-Feb-04): }//end HelloWorld class SeeSoft HelloWorld.java Author Legend Sandy Edward Jon Author Legend Sandy Edward Jon
(edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * This is a test class to demo Augur! 1.3 (edward 11-Mar-04): Jon, Sandy, Edward 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public class HelloWorld { 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Default constructor 1.3 (edward 11-Mar-04): */ 1.2 (sandy 06-Mar-04): public HelloWorld(){ 1.2 (sandy 06-Mar-04): Log.println(“Constructor called"); 1.2 (sandy 06-Mar-04): } 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Prints HelloWorld msg & logs call 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public void printMessage(){ 1.2 (sandy 06-Mar-04): Log.println("printMessage called"); 1.1 (jon 02-Feb-04): System.out.println("HelloWorld"); 1.1 (jon 02-Feb-04): } 1.1 (jon 02-Feb-04): }//end HelloWorld class Augur HelloWorld.java Structure Legend Constructor Comment Method Structure Legend Constructor Comment Method
14 Augur 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * This is a test class to demo Augur! 1.3 (edward 11-Mar-04): Jon, Sandy, Edward 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public class HelloWorld { 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Default constructor 1.3 (edward 11-Mar-04): */ 1.2 (sandy 06-Mar-04): public HelloWorld(){ 1.2 (sandy 06-Mar-04): Log.println(“Constructor called"); 1.2 (sandy 06-Mar-04): } 1.1 (jon 02-Feb-04): 1.3 (edward 11-Mar-04): /** 1.3 (edward 11-Mar-04): * Prints HelloWorld msg & logs call 1.3 (edward 11-Mar-04): */ 1.1 (jon 02-Feb-04): public void printMessage(){ 1.2 (sandy 06-Mar-04): Log.println("printMessage called"); 1.1 (jon 02-Feb-04): System.out.println("HelloWorld"); 1.1 (jon 02-Mar-04): } 1.1 (jon 02-Feb-04): }//end HelloWorld class HelloWorld.java Structure Legend Constructor Comment Method Whitespace Structure Legend Constructor Comment Method Whitespace Author Legend Sandy Edward Jon Author Legend Sandy Edward Jon Structure Legend Constructor Comment Method Structure Legend Constructor Comment Method Date Legend Mar 11 Mar 06 Feb 02 Date Legend Mar 11 Mar 06 Feb 02
15 /** * This is a test class to demo Augur! Jon, Sandy, Edward */ public class HelloWorld { /** * Default constructor */ public HelloWorld(){ Log.println(“Constructor called"); } /** * Prints HelloWorld msg & logs call */ public void printMessage(){ Log.println("printMessage called"); System.out.println("HelloWorld"); } }//end HelloWorld class Big Picture: on March 6 th, Sandy added logging functionality to HelloWorld. How? * Adding a constructor * Adding one line to an existing method Source code is the common artifact around which developer activities take place –The code itself provides a common & familiar space in which to reveal information about development activity –Code becomes a unifying structure for organizing many different types of information Augur
16 Augur HelloWorld.java Author Legend Sandy Edward Jon Author Legend Sandy Edward Jon Structure Legend Constructor Comment Method Structure Legend Constructor Comment Method Date Legend Mar 11 Mar 06 Feb 02 Date Legend Mar 11 Mar 06 Feb 02 HelloWorld.java SmallerFile.java LargerFile.javaLargestFile.javaFile.java File2.java
17 Augur in Practice Three examples follow that demonstrate how relationships between artifact and activity can be interpreted with Augur
18 Three Examples 1.The activity of commenting
19 Example One Structure Legend Constructor Comment Import Structure Legend Constructor Comment Import Field Method Whitespace It appears that there are relationships between temporality and artifact! First the methods were added and then, 6 months later, the comments were added/modified. Constructor Method Comment Method Comment Method Conner Antoine Conner Antoine Conner Clearly there is a temporal pattern here, but… Now we see, most recently added lines are comments… And comments were added by a another author! Not just detecting comments, but the activity of commenting! This richer characterization made possible by the combination of information.
20
21 Author Activity
22 Author Activity
23 Author Activity Project Length: 4 yrs, 4 mos old Author’s First Commit: ~1 year ago Observation: 74% of lines are comments Project Length: 4 yrs, 4 mos old Author’s First Commit: ~1 year ago Observation: 74% of lines are comments Majority of author’s development activity is commenting –This is easily discernible Tying together multiple views makes this inference possible
24 Three Examples 1.The activity of commenting 2.Unification of views reveal richer notions of activity
25 Unification of Views
26 Three Examples 1.The activity of commenting 2.Unification of views reveal richer notions of activity 3.Exploring changes in context
27 In Context Commit Log Commit Date: 05/09/04 Author: offkey Comment: TestMultiLabeller.java added Comment: Tests GlobalStringLabeller.java Structure Legend Constructor Comment Import Structure Legend Constructor Comment Import Field Method Whitespace
28
29 Controls and Color Legend Primary Visualization Window (Augmented Seesoft View) Secondary Visualizations FileTree Explorer
30 Architecture
31 Extensibility Supports 1. Multiple Version Control Systems 2. Multiple analytic tools 3. Multiple visualizations
32 Ongoing & Future Work Exploring temporal activity patterns in source code Exploring social networking patterns in source code Applying Augur philosophy in other environments
33 Past 2 Years, 3 MonthsPast 1 YearPast 1 MonthPast 1 Week Past 24 Hours Temporal Patterns
34 Author “hawkprime” SelectedAuthor “oscarmm” SelectedAuthor “suvarov” Selected Author “bmazur” Selected
35 Social Patterns
36
37
38
39 Integrating Augur Philosophy
40 Conclusion Activity information is situated within the source code –Source code is an “inhabited space” Exposing activity information in the context of code provides a richer understanding of the relationship between them
41 Thank You Download Augur: Contact :