The life-cycle of merge conflicts: processes, barriers, and strategies
- 34 Downloads
Abstract
Merge conflicts occur when developers make concurrent changes to the same part of the code. They are an inevitable and disruptive aspect of collaborative software development. Thus tool builders and researchers have focused on the prevention and automatic resolution of merge conflicts. However, there is little empirical knowledge about how developers actually monitor for merge conflicts and plan, perform, and evaluate resolutions. Without such knowledge, tool builders might be building on the wrong assumptions and researchers might miss opportunities for improving the state of the art. We conducted semi-structured interviews with 10 software developers across 7 organizations, including both open-source and commercial projects. We identify key processes, techniques, and perceptions from developers, which we extend and validate via two surveys, a Barriers Survey and a Processes Survey, of 162 and 102 developers, respectively. Among others, we find that developers rely on reactive strategies of monitoring for merge conflicts. We find that developers defer responding to conflicts based on their perception of the complexity of the conflicting code and that deferring affects the workflow of the entire team. Developers also rely on this perception to visually evaluate their merge conflict resolutions for correctness. Finally, developers’ perceptions alter the impact of tools and processes designed to preemptively and efficiently resolve merge conflicts. Understanding their processes and perceptions can help design human-oriented tools that better support their individual development processes.
Keywords
Merge conflicts Resolution processes Developer perceptions Barriers Developer tools Awareness Planning EvaluationNotes
Acknowledgments
We thank Iftekhar Ahmed, Amin Alipour, Souti Chattopadhyay, Alex Hoffer, Michael Hilton, Sarah Nadi, Sruti Ragavan, and the anonymous reviewers for their valuable comments on earlier versions of this paper. We also thank all of our interview and survey participants, especially those who helped distribute survey links. This research was partially supported by NSF grants CCF-1439957, CCF-1553741, CCF-1560526, and IIS-1559657.
References
- Accioly P, Borba P, Cavalcanti G (2018a) Understanding semi-structured merge conflict characteristics in open-source Java projects. Empir Softw Eng 23(4):2051–2085CrossRefGoogle Scholar
- Accioly P, Borba P, Silva L, Cavalcanti G (2018b) Analyzing conflict predictors in open-source Java projects. In: Proceedings of the 15th international conference on mining software repositories (MSR). ACM, pp 576–586Google Scholar
- Apel S, Liebig J, Brandl B, Lengauer C, Kästner C (2011) Semistructured merge: rethinking merge in revision control systems. In: Proceedings of the 19th ACM SIGSOFT symposium and the 13th European conference on foundations of software engineering (ESEC/FSE). ACM, pp 190–200Google Scholar
- Apel S, Lessenich O, Lengauer C (2012) Structured merge with auto-tuning: balancing precision and performance. In: Proceedings of the 27th IEEE/ACM international conference on automated software engineering (ASE). ACM, pp 120–129Google Scholar
- Beecham S, Hall T, Rainer A (2003) Software process improvement problems in twelve software companies: an empirical analysis. Empir Softw Eng 8(1):7–42CrossRefGoogle Scholar
- Begole JB, Tang JC, Smith RB, Yankelovich N (2002) Work rhythms: analyzing visualizations of awareness histories of distributed groups. In: Proceedings of the 2002 ACM conference on computer supported cooperative work (CSCW). ACM, pp 334–343Google Scholar
- Beizer B (1984) Software system testing and quality assurance. Van Nostrand Reinhold Co.Google Scholar
- Biehl JT, Czerwinski M, Smith G, Robertson GG (2007) FASTDash: a visual dashboard for fostering awareness in software teams. In: Proceedings of the SIGCHI conference on human factors in computing systems (CHI). ACM, pp 1313–1322Google Scholar
- Binkley D, Horwitz S, Reps T (1995) Program integration for languages with procedure calls. ACM Trans Softw Eng Methodol (TOSEM) 4(1):3–35CrossRefGoogle Scholar
- Bird C, Zimmermann T (2012) Assessing the value of branches with what-if analysis. In: International symposium on the foundations of software engineering (FSE), p 45Google Scholar
- Blackwell A, Burnett M (2002) Applying attention investment to end-user programming. In: Symposia on human-centric computing languages and environments (HCC), pp 28–30Google Scholar
- Borg M, Alėgroth E, Runeson P, 2017 Software engineers’ information seeking behavior in change impact analysis: an interview study. In: The 25th IEEE international conference on program comprehension (ICPC). IEEE, pp 12–22Google Scholar
- Bradley AW, Murphy GC (2011) Supporting software history exploration. In: Working conference on mining software repositories (MSR), pp 193–202Google Scholar
- Brindescu C, Codoban M, Shmarkatiuk S, Dig D (2014) How do centralized and distributed version control systems impact software changes? In: Proceedings of the 36th international conference on software engineering (ICSE). ACM, pp 322–333Google Scholar
- Brooks FP (1974) Mythical man-month. Datamation 20(12):44–52Google Scholar
- Brun Y, Holmes R, Ernst MD, Notkin D (2011) Proactive detection of collaboration conflicts. In: International symposium and European conference on foundations of software engineering (ESEC/FSE), pp 168–178Google Scholar
- Campbell JL, Quincy C, Osserman J, Pedersen OK (2013) Coding in-depth semistructured interviews: Problems of unitization and intercoder reliability and agreement. Sociol Methods Res 42(3):294–320MathSciNetCrossRefGoogle Scholar
- Cataldo M, Herbsleb JD (2008) Communication networks in geographically distributed software development. In: ACM Conference on computer supported cooperative work & social computing (CSCW), pp 579–588Google Scholar
- Codoban M, Ragavan SS, Dig D, Bailey B (2015) Software history under the lens: a study on why and how developers examine it. In: International conference on software maintenance and evolution (ICSME), pp 1–10Google Scholar
- Convertino G, Chen J, Yost B, Ryu YS, North C (2003) Exploring context switching and cognition in dual-view coordinated visualizations. In: International conference on coordinated and multiple views in exploratory visualization (CMV), pp 55–62Google Scholar
- Cortés-Coy LF, Vásquez ML, Aponte J, Poshyvanyk D (2014) On automatically generating commit messages via summarization of source code changes. In: International working conference on source code analysis and manipulation (SCAM), pp 275–284Google Scholar
- Costa C, Figueiredo J, Murta L, Sarma A (2016) TIPMerge: recommending experts for integrating changes across branches. In: International symposium on foundations of software engineering (FSE), pp 523– 534Google Scholar
- Czerwinski M, Horvitz E, Wilhite S (2004) A diary study of task switching and interruptions. In: SIGCHI conference on human factors in computing systems (CHI), pp 175–182Google Scholar
- da Silva IA, Chen PH, Van der Westhuizen C, Ripley RM, van der Hoek A (2006) Lighthouse: coordination through emerging design. In: Proceedings of the 2006 OOPSLA workshop on eclipse technology eXchange. ACM, pp 11–15Google Scholar
- da Silva JR, Clua E, Murta L, Sarma A (2015) Niche vs. breadth: calculating expertise over time through a fine-grained analysis. In: International conference on software analysis, evolution and reengineering (SANER), pp 409–418Google Scholar
- de Mello RM, Travassos GH (2016) Surveys in software engineering: identifying representative samples. In: Proceedings of the 10th ACM/IEEE international symposium on empirical software engineering and measurement, ESEM ’16. ACM, pp 55:1–55:6Google Scholar
- de Souza CR, Redmiles D, Dourish P (2003) Breaking the code, moving between private and public work in collaborative software development. In: International conference on supporting group work (GROUP), pp 105–114Google Scholar
- de Souza CRB, Redmiles DF (2008) An empirical study of software developers’ management of dependencies and changes. In: International conference on software engineering (ICSE), pp 241–250Google Scholar
- Dig D, Manzoor K, Johnson RE, Nguyen TN (2008) Effective software merging in the presence of object-oriented refactorings. IEEE Trans Softw Eng (TSE) 34(3):321–335CrossRefGoogle Scholar
- Easterbrook S, Singer J, Storey MA, Damian D (2008) Selecting empirical methods for software engineering research. In: Guide to advanced empirical software engineering. Springer, pp 285–311Google Scholar
- Estler HC, Nordio M, Furia CA, Meyer B (2013) Unifying configuration management with merge conflict detection and awareness systems. In: Proceedings of the 22nd Australian software engineering conference (ASWEC), pp 201–210Google Scholar
- Estler HC, Nordio M, Furia CA, Meyer B (2014) Awareness and merge conflicts in distributed software development. In: International conference on global software engineering (ICGSE), pp 26–35Google Scholar
- Fenton NE, Ohlsson N (2000) Quantitative analysis of faults and failures in a complex software system. IEEE Trans Softw Eng (TSE) 26(8):797–814CrossRefGoogle Scholar
- Fereday J, Muir-Cochrane E (2006) Demonstrating rigor using thematic analysis: a hybrid approach of inductive and deductive coding and theme development. Int J Qualitat Methods 5(1):80–92CrossRefGoogle Scholar
- Forward A, Lethbridge TC (2002) The relevance of software documentation, tools and technologies: a survey. In: ACM symposium on document engineering (DocEng), pp 26–33Google Scholar
- Fritz T, Murphy GC (2010) Using information fragments to answer the questions developers ask. In: International conference on software engineering (ICSE), pp 175–184Google Scholar
- Fusch PI, Ness LR (2015) Are we there yet? Sata saturation in qualitative research. Qual Rep 20(9):1408Google Scholar
- Garmus D, Herron D (2001) Function point analysis: measurement practices for successful software projects. Addison-Wesley Longman Publishing CoGoogle Scholar
- Garrison DR, Cleveland-Innes M, Koole M, Kappelman J (2006) Revisiting methodological issues in transcript analysis: negotiated coding and reliability. Internet High Educ 9(1):1–8CrossRefGoogle Scholar
- Gil Y, Lalouche G (2017) On the correlation between size and metric validity. Empir Softw Eng 22(5):2585–2611CrossRefGoogle Scholar
- Gligoric M, Eloussi L, Marinov D (2015) Practical regression test selection with dynamic file dependencies. In: Proceedings of the 2015 international symposium on software testing and analysis, ACM, pp 211– 222Google Scholar
- Goodman LA (1961) Snowball sampling. Ann Math Statist, 148–170Google Scholar
- Gopher D, Armony L, Greenshpan Y (2000) Switching tasks and attention policies. J Exp Psychol Gen 129(3):308CrossRefGoogle Scholar
- Gousios G, Zaidman A, Storey MA, van Deursen A (2015) Work practices and challenges in pull-based development: the integrator’s perspective. In: International conference on software engineering (ICSE), pp 358–368Google Scholar
- Gousios G, Storey MA, Bacchelli A (2016) Work practices and challenges in pull-based development: the contributor’s perspective. In: Proceedings of the 38th international conference on software engineering (ICSE). ACM, pp 285–296Google Scholar
- Grinter RE (1995) Using a configuration management tool to coordinate software development. In: Proceedings of conference on organizational computing systems. ACM, pp 168–177Google Scholar
- Guimarães ML, Silva AR (2012) Improving early detection of software merge conflicts. In: International conference on software engineering (ICSE), pp 342–352Google Scholar
- Guo J, Rahimi M, Cleland-Huang J, Rasin A, Hayes JH, Vierhauser M (2016) Cold-start software analytics. In: International conference on mining software repositories (MSR), pp 142–153Google Scholar
- Guzzi A, Bacchelli A, Riche Y, van Deursen A (2015) Supporting developers’ coordination in the IDE. In: Computer supported cooperative work & social computing (CSCW), pp 518–532Google Scholar
- Hattori LP, Lanza M (2008) On the nature of commits. In: International workshop on automated engineering of autonomous and run-time evolving systems (ARAMIS). ASE Workshops, pp 63–71Google Scholar
- Hattori L, Lanza M (2010) Syde: a tool for collaborative software development. In: International conference on software engineering (ICSE), pp 235–238Google Scholar
- Hindle A, German DM, Godfrey MW, Holt RC (2009) Automatic classification of large changes into maintenance categories. In: International conference on program comprehension (ICPC), pp 30–39Google Scholar
- Hudson W (2013) Card sorting. In: The encyclopedia of human-computer interaction. Interaction Design FoundationGoogle Scholar
- Hunt JJ, Tichy WF (2002) Extensible language-aware merging. In: International conference on software maintenance (ICSM), pp 511–520Google Scholar
- Kasi BK, Sarma A (2013) Cassandra: proactive conflict minimization through optimized task scheduling. In: International conference on software engineering (ICSE), pp 732–741Google Scholar
- Ko AJ, DeLine R, Venolia G (2007) Information needs in collocated software development teams. In: International conference on software engineering (ICSE), pp 344–353Google Scholar
- Li C, Ding C, Shen K (2007) Quantifying the cost of context switch. In: Workshop on experimental computer science (ExpCS). FCRC Workshop, p 2Google Scholar
- Lippe E, van Oosterom N (1992) Operation-based merging. In: Proceedings of the fifth ACM SIGSOFT symposium on software development environments (SDE). ACM, pp 78–87Google Scholar
- McCabe TJ (1976) A complexity measure. IEEE Trans Softw Eng (TSE) 4:308–320MathSciNetCrossRefGoogle Scholar
- McKee S, Nelson N, Sarma A, Dig D (2017) Software practitioner perspectives on merge conflicts and resolutions. In: 2017 IEEE international conference on software maintenance and evolution (ICSME). IEEE, pp 467–478Google Scholar
- Meiran N (2000) Modeling cognitive control in task-switching. Psychol Res 63(3):234–249CrossRefGoogle Scholar
- Mens T (2002) A state-of-the-art survey on software merging. IEEE Trans Softw Eng (TSE) 28(5):449– 462CrossRefGoogle Scholar
- Meyer M (2014) Continuous integration and its tools. IEEE Softw 31(3):14–16CrossRefGoogle Scholar
- Nabi T, Sweeney KM, Lichlyter S, Piorkowski D, Scaffidi C, Burnett M, Fleming SD (2016) Putting information foraging theory to work: community-based design patterns for programming tools. In: Symposium on visual languages and human-centric computing (VL/HCC), pp 129–133Google Scholar
- Nishimura Y, Maruyama K (2016) Supporting merge conflict resolution by using fine-grained code change history. In: International conference on software analysis, evolution, and reengineering (SANER), pp 661–664Google Scholar
- Panichella S, Canfora G, Di Penta M, Oliveto R (2014) How the evolution of emerging collaborations relates to code changes: an empirical study. In: Proceedings of the 22nd IEEE international conference on program comprehension (ICPC). ACM, pp 177–188Google Scholar
- Phillips S, Sillito J, Walker R (2011) Branching and merging: an investigation into current version control practices. In: International workshop on cooperative and human aspects of software engineering (CHASE), pp 9–15Google Scholar
- Ragavan SS, Pandya B, Piorkowski D, Hill C, Kuttal SK, Sarma A, Burnett M (2017) PFIS-V: modeling foraging behavior in the presence of variants. In: Proceedings of the 2017 SIGCHI conference on human factors in computing systems (CHI). ACM, pp 6232–6244Google Scholar
- Ritchie J, Lewis J, Nicholls CM, Ormston R, et al. (2013), Qualitative research practice: a guide for social science students and researchers. SageGoogle Scholar
- Robillard MP, Manggala P (2008) Reusing program investigation knowledge for code understanding. In: The 16th IEEE international conference on program comprehension (ICPC). IEEE, pp 202–211Google Scholar
- Sarma A (2008) Palantir: enhancing configuration management systems with workspace awareness to detect and resolve emerging conflicts. PhD thesis, University of California, IrvineGoogle Scholar
- Sarma A, Noroozi Z, Van Der Hoek A (2003) Palantír: raising awareness among configuration management workspaces. In: Proceedings of the 25th international conference on software engineering (ICSE). IEEE, pp 444–454Google Scholar
- Sarma A, Bortis G, Van Der Hoek A (2007) Towards supporting awareness of indirect conflicts across software configuration management workspaces. In: Proceedings of the twenty-second IEEE/ACM international conference on automated software engineering. ACM, pp 94–103Google Scholar
- Seaman CB (2008) Qualitative methods. In: Guide to advanced empirical software engineering. Springer, pp 35–62Google Scholar
- Servant F, Jones JA, van der Hoek A (2010) CASI: preventing indirect conflicts through a live visualization. In: Proceedings of the 2010 ICSE workshop on cooperative and human aspects of software engineering (CHASE). ACM, pp 39–46Google Scholar
- Sillito J, Murphy GC, De Volder K (2006) Questions programmers ask during software evolution tasks. In: International symposium on foundations of software engineering (FSE), pp 23–34Google Scholar
- Spencer D (2009) Card sorting: designing usable categories. Rosenfeld MediaGoogle Scholar
- Sun X, Li B, Li Y, Chen Y (2015) What information in software historical repositories do we need to support software maintenance tasks? An approach based on topic model. Springer, pp 27–37Google Scholar
- Symons CR (1988) Function point analysis: difficulties and improvements. IEEE Trans Softw Eng (TSE) 14(1):2–11CrossRefGoogle Scholar
- Tao Y, Dang Y, Xie T, Zhang D, Kim S (2012) How do software engineers understand code changes? An exploratory study in industry. In: International symposium on the foundations of software engineering (FSE), p 51Google Scholar
- Tian J (2005) Software quality engineering, testing, quality assurance, and quantifiable improvement. WileyGoogle Scholar
- Wang S, Lo D (2014) Version history, similar report, and structure: putting them together for improved bug localization. In: The 22nd IEEE international conference on program comprehension (ICPC). ACM, pp 53–63Google Scholar
- Weinberg GM (1992) Quality software management, vol. 1: systems thinking. Dorset House Publishing Co.Google Scholar
- Westfechtel B (1991) Structure-oriented merging of revisions of software documents. In: Proceedings of the 3rd international workshop on software configuration management (SCM). ACM, pp 68–79Google Scholar
- Yamauchi K, Yang J, Hotta K, Higo Y, Kusumoto S (2014) Clustering commits for understanding the intents of implementation. In: International conference on software maintenance and evolution (ICSME), pp 406–410Google Scholar
- Yan Y, Menarini M, Griswold W (2014) Mining software contracts for software evolution. In: International conference on software maintenance and evolution (ICSME), pp 471–475Google Scholar