Using Development History Sticky Notes to Understand Software

  • Slides: 15
Download presentation
Using Development History Sticky. Notes to Understand Software Architecture Ahmed E. Hassan and Richard

Using Development History Sticky. Notes to Understand Software Architecture Ahmed E. Hassan and Richard C. Holt University Of Waterloo

Operating System Architecture Conceptual (proposed) Concrete (reality)

Operating System Architecture Conceptual (proposed) Concrete (reality)

Architecture Understanding Process • Propose conceptual architecture • Compare conceptual with concrete architecture •

Architecture Understanding Process • Propose conceptual architecture • Compare conceptual with concrete architecture • Investigate gaps

Software Reflexion Framework

Software Reflexion Framework

Investigating Gaps • Absences: rarely occur in large systems • Convergences: usually not a

Investigating Gaps • Absences: rarely occur in large systems • Convergences: usually not a concern • Divergences: must investigate dependencies

Dependency Investigation Questions (W 4 Approach) • Which low level code entity is responsible

Dependency Investigation Questions (W 4 Approach) • Which low level code entity is responsible for the dependency? – Network (Send. Data) Scheduler (Print. To. Log) • Who added/removed the dependency? – Junior vs. senior/experienced developer • When was the dependency modified? – Late night / Just before release • Why was the dependency added/removed? – The rationale!

History as a guide “History is a guide to navigation in perilous times. History

History as a guide “History is a guide to navigation in perilous times. History is who we are and why we are the way we are”, David C. Mc. Cullough • Can we use the development history of a project to assist in understanding its current state? • How can we get the development history of a project?

Source Sticky. Notes • Static dependency give only a current static view of the

Source Sticky. Notes • Static dependency give only a current static view of the system – not enough detail! • Need to extend static dependencies, but how? – Ask developers to fill Sticky. Notes for each change – Use software repositories to build these notes automatically

Sticky. Notes Recovery • Map code changes to entities and dependencies instead of lines

Sticky. Notes Recovery • Map code changes to entities and dependencies instead of lines • Two pass analysis of the source control repository data, to recover: – All entities defined throughout the lifetime of a project – Historical Symbol Table – All dependencies between these entities and attach source control meta-data such as: • Name of developer performing the change • Text entered by developer describing the change –the rationale • Time of the change

Case Study – Net. BSD • Large long lived system with hundreds of developers

Case Study – Net. BSD • Large long lived system with hundreds of developers • Case study used to demonstrate usefulness of the reflexion model: – Reuse prior results! – Focus on investigating gaps to show the strength of our approach

Net. BSD Conceptual and Reflexion Model Why? Who? When? Where?

Net. BSD Conceptual and Reflexion Model Why? Who? When? Where?

Unexpected Dependencies • Eight unexpected dependencies • All except two dependencies existed since day

Unexpected Dependencies • Eight unexpected dependencies • All except two dependencies existed since day one: – Virtual Address Maintenance Pager – Pager Hardware Translations

Sticky. Notes Usage Patterns • First note to understand the reason for unexpected dependencies

Sticky. Notes Usage Patterns • First note to understand the reason for unexpected dependencies • Last note to understand missing dependencies • All notes when first and last notes do not have enough information to assist in understanding

Limitations • Quality of comments and text entered by developers in the past •

Limitations • Quality of comments and text entered by developers in the past • In most open source projects, CVS comments are used for: – Communicating new features – Narrating the progress of a project

Conclusions • Development history can help understand the current structure of a software system

Conclusions • Development history can help understand the current structure of a software system • Traditional dependency graphs and program understanding models usually do not use historical information • Proposed Sticky. Notes and presented a case study to show the strength of the approach