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 pick 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.
- Studying Professional Software Design (NSF Project)
- Knowledge Sharing in a Large Agile Organisation: a Survey Study (XP 2017)
- Error Detection and Recovery in Software Development (PhD thesis)
- Software Design Decoded: 66 Ways Experts Think (Book)
- The Role of Ethnographic Studies in Empirical Software Engineering (TSE Journal)
- In the best families: tracking and relationships (CHI 2011)
- Contravision: Exploring users' reactions to futuristic technology (CHI 2010)