┘ You join a new project ┘ You just want to get new insights into your current project ┘ You want to refactor or rewrite ∷ You can show these findings to your client/boss/lead
about the project already ∷ High-level overview ∷ Data about the project size and age ∷ List of complexities ∷ List of duplication ∷ Duplication rate ∷ List of unused codes ∷ Nice visualization of the class dependencies ┘ It only took a few hours
current state of the code that we forget its history ┘ Its hard to understand large-scale complex systems by looking at a snapshot of the code ┘ We miss a lot of information
of the project history ┘ Rarely think about the insights we can get by mining data from it ┘ We can learn about the environment ┘ We can learn about how we work ┘ Predict which parts of the code have the most defects ┘ Find the code that matters most for maintenance ┘ Information is real power
analyze data from version control systems ┘ It supports different version control systems ∷ git, svn, perforce, tfs, mercurial ┘ We can use it to detect hotspots ┘ We can use it to detect architectural problems ┘ And so much more
┘ Research has shown that frequent changes to complex code generally indicate declining quality ┘ Over time our development focus shifts so the hotspots will also shift ┘ Hotspots can predict defects very well ┘ We can find them at the intersection of complexity and effort
most of the time ┘ Detect architectural / design issues ┘ Explicit coupling ∷ What tend to change together (screen + vm) ┘ Temporal coupling ∷ This is what we are looking for ∷ Can be false positives (service + test) ∷ Can be serious design problem ∷ Can be copy-paste
Analyze complexity trends ┘ Discover organizational metrics ∷ Social problems ∷ Evaluate communication costs ∷ Build knowledge map ∷ Visualize knowledge loss ┘ Code chur ∷ Predict defects ∷ Discover process loss from code
and efficiently spot problems ┘ You can use your version control systems to have more information about your project ┘ By mining data from it, you can get a deeper understanding of your design / architectural problems ┘ With the right data you can back your refactoring/ rewrite proposals ┘ Focusing on the right things early you can save a lot of maintenance cost