Features and How to Find Them

The notion of features is commonly used to maintain, evolve, reuse, or re-engineer a software system. To this end, developers need to understand the features and their – potentially scattered – locations within the codebase of a system. Unfortunately, features are rarely documented, developers’ knowledge about the features fades quickly, and developers leave projects. In such cases, feature locations need to be recovered from the codebase – a costly, but still one of the most common tasks performed by developers. While automated feature-location techniques have been proposed, they typically require significant adjustments to the particular system and often fall short in their accuracy. To improve this situation, it is necessary to understand how developers perform feature location manually – a surprisingly neglected research area. In this chapter, we provide an overview on existing studies of manual feature location, focusing on the topics addressed in the studies and open issues. We find that the seven studies we identified analyze four topics of manual feature location in detail: Search tools, performance, influencing factors, and distinct phases. We observe that a focus of these studies is on understanding the process of manual feature location regarding the developers’ activities and actions. We also find that, still, little is known about the actual efforts of performing feature location, how different factors influence these efforts, how automated techniques are scoped to the identified phases, and which additional information sources help developers to locate features.

[1]  Brad A. Myers,et al.  An Exploratory Study of How Developers Seek, Relate, and Collect Relevant Information during Software Maintenance Tasks , 2006, IEEE Transactions on Software Engineering.

[2]  Marsha Chechik,et al.  What is a feature?: a qualitative study of features in industrial software product lines , 2015, SPLC.

[3]  Krzysztof Czarnecki,et al.  Generative programming - methods, tools and applications , 2000 .

[4]  Zhenchang Xing,et al.  How developers perform feature location tasks: a human‐centric and process‐oriented exploratory study , 2013, J. Softw. Evol. Process..

[5]  David Coppit,et al.  Understanding concerns in software: insights gained from two case studies , 2005, 13th International Workshop on Program Comprehension (IWPC'05).

[6]  Zhenchang Xing,et al.  An exploratory study of feature location process: Distinct phases, recurring patterns, and elementary actions , 2011, 2011 27th IEEE International Conference on Software Maintenance (ICSM).

[7]  Martin P. Robillard,et al.  Representing concerns in source code , 2007, TSEM.

[8]  Lori L. Pollock,et al.  A field study of how developers locate features in source code , 2016, Empirical Software Engineering.

[9]  Krzysztof Czarnecki,et al.  Cool features and tough decisions: a comparison of variability modeling approaches , 2012, VaMoS.

[10]  Jacob Krüger,et al.  Towards a Better Understanding of Software Features and Their Characteristics: A Case Study of Marlin , 2018, VaMoS.

[11]  Marsha Chechik,et al.  A Survey of Feature Location Techniques , 2013, Domain Engineering, Product Lines, Languages, and Conceptual Models.

[12]  Christian Prehofer,et al.  Feature-Oriented Programming: A Fresh Look at Objects , 1997, ECOOP.

[13]  Bogdan Dit,et al.  Feature location in source code: a taxonomy and survey , 2013, J. Softw. Evol. Process..

[14]  Mathieu Acher,et al.  Feature model extraction from large collections of informal product descriptions , 2013, ESEC/FSE 2013.

[15]  Kyo Chul Kang,et al.  Feature-Oriented Domain Analysis (FODA) Feasibility Study , 1990 .

[16]  Claes Wohlin,et al.  Guidelines for snowballing in systematic literature studies and a replication in software engineering , 2014, EASE '14.

[17]  Ahmed E. Hassan,et al.  Examining the evolution of code comments in PostgreSQL , 2006, MSR '06.

[18]  John Grundy,et al.  Improving Tenants' Trust in SaaS Applications Using Dynamic Security Monitors , 2015, 2015 20th International Conference on Engineering of Complex Computer Systems (ICECCS).

[19]  Adele E. Howe,et al.  Program understanding behaviour during enhancement of large-scale software , 1997, J. Softw. Maintenance Res. Pract..

[20]  Ted J. Biggerstaff,et al.  The concept assignment problem in program understanding , 1993, [1993] Proceedings Working Conference on Reverse Engineering.

[21]  Márcio Ribeiro,et al.  The Love/Hate Relationship with the C Preprocessor: An Interview Study , 2015, ECOOP.

[22]  Paul Clements,et al.  Software product lines - practices and patterns , 2001, SEI series in software engineering.

[23]  Václav Rajlich,et al.  Case study of feature location using dependence graph , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

[24]  Sudheendra Hangal,et al.  Tracking down software bugs using automatic anomaly detection , 2002, ICSE '02.

[25]  Yann-Gaël Guéhéneuc,et al.  Feature Location Using Probabilistic Ranking of Methods Based on Execution Scenarios and Information Retrieval , 2007, IEEE Transactions on Software Engineering.

[26]  Krzysztof Czarnecki,et al.  An Exploratory Study of Cloning in Industrial Software Product Lines , 2013, 2013 17th European Conference on Software Maintenance and Reengineering.

[27]  Norman Wilde,et al.  A comparison of methods for locating features in legacy software , 2003, J. Syst. Softw..

[28]  Thomas Leich,et al.  Do You Remember This Source Code? , 2018, 2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE).

[29]  Christian Kästner,et al.  Variability Mining: Consistent Semi-automatic Detection of Product-Line Features , 2014, IEEE Transactions on Software Engineering.

[30]  Gunter Saake,et al.  Feature-Oriented Software Product Lines , 2013, Springer Berlin Heidelberg.

[31]  Wesley Klewerton Guez Assunção,et al.  Feature location for software product line migration: a mapping study , 2014, SPLC '14.

[32]  Andrea De Lucia,et al.  On the Equivalence of Information Retrieval Methods for Automated Traceability Link Recovery , 2010, 2010 IEEE 18th International Conference on Program Comprehension.

[33]  Don S. Batory,et al.  Feature Models, Grammars, and Propositional Formulas , 2005, SPLC.

[34]  Pierre-Yves Schobbens,et al.  What ' s in a Feature ? A Requirements Engineering Perspective , 2008 .

[35]  Jens Knodel,et al.  Analyzing the Source Code of Multiple Software Variants for Reuse Potential , 2011, 2011 18th Working Conference on Reverse Engineering.

[36]  Jacob Krüger Lost in Source Code: Physically Separating Features in Legacy Systems , 2017, 2017 IEEE/ACM 39th International Conference on Software Engineering Companion (ICSE-C).

[37]  Michal Antkiewicz,et al.  Maintaining feature traceability with embedded annotations , 2015, SPLC.

[38]  Thomas Leich,et al.  Extracting software product lines: a cost estimation perspective , 2016, SPLC.

[39]  Janet Siegmund,et al.  Program Comprehension: Past, Present, and Future , 2016, 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER).

[40]  Harald C. Gall,et al.  Do Code and Comments Co-Evolve? On the Relation between Source Code and Comment Changes , 2007, 14th Working Conference on Reverse Engineering (WCRE 2007).

[41]  Jacob Krüger,et al.  Finding Lost Features in Cloned Systems , 2017, SPLC.

[42]  Yang Li,et al.  Reverse Engineering Variability from Natural Language Documents: A Systematic Literature Review , 2017, SPLC.

[43]  Thomas A. Standish An Essay on Software Reuse , 1984, IEEE Transactions on Software Engineering.

[44]  Krzysztof Czarnecki,et al.  A survey of variability modeling in industrial practice , 2013, VaMoS.

[45]  Miguel A. Laguna,et al.  A systematic mapping study on software product line evolution: From legacy system reengineering to product line refactoring , 2013, Sci. Comput. Program..

[46]  Sebastian Herold,et al.  Manually Locating Features in Industrial Source Code: The Search Actions of Software Nomads , 2015, 2015 IEEE 23rd International Conference on Program Comprehension.

[47]  Pearl Brereton,et al.  Performing systematic literature reviews in software engineering , 2006, ICSE.

[48]  Jacob Krüger,et al.  Composing annotations without regret? Practical experiences using FeatureC , 2018, Softw. Pract. Exp..

[49]  Giuliano Antoniol,et al.  Recovering Traceability Links between Code and Documentation , 2002, IEEE Trans. Software Eng..

[50]  Marsha Chechik,et al.  Cloned product variants: from ad-hoc to managed software product lines , 2015, International Journal on Software Tools for Technology Transfer.

[51]  Mathieu Acher,et al.  On extracting feature models from product descriptions , 2012, VaMoS.

[52]  Barbara Paech,et al.  Using Tags to Support Feature Management Across Issue Tracking Systems and Version Control Systems - A Research Preview , 2017, REFSQ.