Empirical Software Engineering concerns the understanding of the practical processes of software product development in order to leverage the expertise and experience of the real people. We use a range of qualitative approaches, from in situ observation of professional practice to controlled studies, and a range of quantitative approaches, from data extraction from software repositories and its visualisation to modelling and simulation. Our approaches include multiple methods, triangulation, and longitudinal studies. Our emphasis is on practice in naturalistic settings, naturally-occurring artefacts, and reports from practitioners.
People.
We unpick the brains of experienced experts in software development companies to discover the reality from the mythical beliefs, e.g., what motivate the developers, how are UML models and diagrams used in software development, whether clones are harmful or not to development, and whether developers follow the conventions naming identifiers.Process.
We conduct ethnographic studies to understand how knowledge transfer is carried out through paired programming; we also compare quantitative metrics with results in qualitative interviews with developers.Products.
By mining software product repositories, we identify prescribed software architectures, assess design principles in longitudinal studies, and discern meaningful changes from multiple viewpoints.