Advertisement

The life-cycle of merge conflicts: processes, barriers, and strategies

  • Nicholas NelsonEmail author
  • Caius Brindescu
  • Shane McKee
  • Anita Sarma
  • Danny Dig
Article
  • 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 Evaluation 

Notes

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

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. Beizer B (1984) Software system testing and quality assurance. Van Nostrand Reinhold Co.Google Scholar
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. Bradley AW, Murphy GC (2011) Supporting software history exploration. In: Working conference on mining software repositories (MSR), pp 193–202Google Scholar
  14. 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
  15. Brooks FP (1974) Mythical man-month. Datamation 20(12):44–52Google Scholar
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. Fusch PI, Ness LR (2015) Are we there yet? Sata saturation in qualitative research. Qual Rep 20(9):1408Google Scholar
  38. Garmus D, Herron D (2001) Function point analysis: measurement practices for successful software projects. Addison-Wesley Longman Publishing CoGoogle Scholar
  39. 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
  40. Gil Y, Lalouche G (2017) On the correlation between size and metric validity. Empir Softw Eng 22(5):2585–2611CrossRefGoogle Scholar
  41. 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
  42. Goodman LA (1961) Snowball sampling. Ann Math Statist, 148–170Google Scholar
  43. Gopher D, Armony L, Greenshpan Y (2000) Switching tasks and attention policies. J Exp Psychol Gen 129(3):308CrossRefGoogle Scholar
  44. 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
  45. 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
  46. 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
  47. Guimarães ML, Silva AR (2012) Improving early detection of software merge conflicts. In: International conference on software engineering (ICSE), pp 342–352Google Scholar
  48. 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
  49. 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
  50. 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
  51. Hattori L, Lanza M (2010) Syde: a tool for collaborative software development. In: International conference on software engineering (ICSE), pp 235–238Google Scholar
  52. 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
  53. Hudson W (2013) Card sorting. In: The encyclopedia of human-computer interaction. Interaction Design FoundationGoogle Scholar
  54. Hunt JJ, Tichy WF (2002) Extensible language-aware merging. In: International conference on software maintenance (ICSM), pp 511–520Google Scholar
  55. Kasi BK, Sarma A (2013) Cassandra: proactive conflict minimization through optimized task scheduling. In: International conference on software engineering (ICSE), pp 732–741Google Scholar
  56. 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
  57. 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
  58. 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
  59. McCabe TJ (1976) A complexity measure. IEEE Trans Softw Eng (TSE) 4:308–320MathSciNetCrossRefGoogle Scholar
  60. 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
  61. Meiran N (2000) Modeling cognitive control in task-switching. Psychol Res 63(3):234–249CrossRefGoogle Scholar
  62. Mens T (2002) A state-of-the-art survey on software merging. IEEE Trans Softw Eng (TSE) 28(5):449– 462CrossRefGoogle Scholar
  63. Meyer M (2014) Continuous integration and its tools. IEEE Softw 31(3):14–16CrossRefGoogle Scholar
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. Ritchie J, Lewis J, Nicholls CM, Ormston R, et al. (2013), Qualitative research practice: a guide for social science students and researchers. SageGoogle Scholar
  70. 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
  71. Sarma A (2008) Palantir: enhancing configuration management systems with workspace awareness to detect and resolve emerging conflicts. PhD thesis, University of California, IrvineGoogle Scholar
  72. 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
  73. 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
  74. Seaman CB (2008) Qualitative methods. In: Guide to advanced empirical software engineering. Springer, pp 35–62Google Scholar
  75. 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
  76. 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
  77. Spencer D (2009) Card sorting: designing usable categories. Rosenfeld MediaGoogle Scholar
  78. 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
  79. Symons CR (1988) Function point analysis: difficulties and improvements. IEEE Trans Softw Eng (TSE) 14(1):2–11CrossRefGoogle Scholar
  80. 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
  81. Tian J (2005) Software quality engineering, testing, quality assurance, and quantifiable improvement. WileyGoogle Scholar
  82. 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
  83. Weinberg GM (1992) Quality software management, vol. 1: systems thinking. Dorset House Publishing Co.Google Scholar
  84. 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
  85. 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
  86. 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

Copyright information

© Springer Science+Business Media, LLC, part of Springer Nature 2019

Authors and Affiliations

  1. 1.Oregon State UniversityCorvallisUSA

Personalised recommendations