Program Comprehension in Preprocessor-Based Software

To adapt to heterogeneous hardware, software of embedded systems provides customization capacities. Typically, this customization is achieved using conditional compilation with preprocessors. However, preprocessor usage can lead to obfuscated source code that can be difficult to comprehend, which in turn cause increased maintenance costs, bugs, and security vulnerabilities. To profit from the benefit of preprocessors usage, we need to improve their comprehensibility. In this paper, we describe how program comprehension can be improved and, to that end, measured. We show that reliably measuring program comprehension requires considerably effort. However, the benefit is that we can apply concepts that have proven to improve program comprehension, and thus can e.g. improve maintainability, reliability, and security of source code.

[1]  Jørgen Lindskov Knudsen ECOOP 2001 — Object-Oriented Programming , 2001, Lecture Notes in Computer Science.

[2]  Scott P. Robertson,et al.  Expert problem solving strategies for program comprehension , 1991, CHI.

[3]  Sven Apel,et al.  Exploring Software Measures to Assess Program Comprehension , 2011, 2011 International Symposium on Empirical Software Engineering and Measurement.

[4]  Raimund Dachselt,et al.  Using background colors to support program comprehension in software product lines , 2011, EASE.

[5]  Gregor Kiczales,et al.  Aspect-oriented programming , 1996, CSUR.

[6]  Henry Spencer,et al.  #ifdef Considered Harmful, or Portability Experience with C News , 1992, USENIX Summer.

[7]  Harold Ossher,et al.  Subject-oriented programming: a critique of pure objects , 1993, OOPSLA '93.

[8]  John P. Boysen,et al.  Factors affecting computer program comprehension. , 1979 .

[9]  Don Batory,et al.  Scaling Step-Wise Refinement , 2004, IEEE Trans. Software Eng..

[10]  Walter F. Tichy,et al.  Should Computer Scientists Experiment More? , 1998, Computer.

[11]  Rebecca Tiarks What Programmers Really Do - An Observational Study , 2011, Softwaretechnik-Trends.

[12]  David L. Tennenhouse,et al.  Proactive computing , 2000, Commun. ACM.

[13]  Brian Henderson-Sellers,et al.  Object-oriented metrics: measures of complexity , 1995 .

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

[15]  R. Likert “Technique for the Measurement of Attitudes, A” , 2022, The SAGE Encyclopedia of Research Design.

[16]  Dirk Muthig,et al.  Generic Implementation of Product Line Components , 2002, NetObjectDays.

[17]  Kate Ehrlich,et al.  Empirical Studies of Programming Knowledge , 1984, IEEE Transactions on Software Engineering.

[18]  Cláudio Sant'Anna,et al.  Evolving software product lines with aspects , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[19]  Wolfgang Schröder-Preikschat,et al.  A quantitative analysis of aspects in the eCos kernel , 2006, EuroSys.

[20]  Ruven E. Brooks,et al.  Using a behavioral theory of program comprehension in software engineering , 1978, ICSE '78.

[21]  Ben Shneiderman,et al.  Measuring Computer Program Quality and Comprehension , 1977, Int. J. Man Mach. Stud..

[22]  Jean-Marie Favre Understanding-in-the-large , 1997, Proceedings Fifth International Workshop on Program Comprehension. IWPC'97.

[23]  Martin Odersky,et al.  A Statically Safe Alternative to Virtual Types , 1998, ECOOP.

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

[25]  Thomas Leich,et al.  Aspectual Feature Modules , 2008, IEEE Transactions on Software Engineering.

[26]  Thomas Leich,et al.  How to compare program comprehension in FOSD empirically: an experience report , 2009, FOSD '09.

[27]  William G. Griswold,et al.  An Overview of AspectJ , 2001, ECOOP.

[28]  Sven Apel,et al.  An analysis of the variability in forty preprocessor-based software product lines , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[29]  Satoshi Matsuoka,et al.  ECOOP'97 — Object-Oriented Programming , 1997, Lecture Notes in Computer Science.

[30]  Janet Siegmund,et al.  Challenges of secure and reliable data management in heterogeneous environments , 2010, IWDE '10.

[31]  Yannis Smaragdakis,et al.  Implementing Layered Designs with Mixin Layers , 1998, ECOOP.

[32]  Eduardo Figueiredo,et al.  ConcernMorph: metrics-based detection of crosscutting patterns , 2009, ESEC/FSE '09.

[33]  Anneliese Amschler Andrews,et al.  From program comprehension to tool requirements for an industrial environment , 1993, [1993] IEEE Second Workshop on Program Comprehension.

[34]  N. Pennington Stimulus structures and mental representations in expert comprehension of computer programs , 1987, Cognitive Psychology.

[35]  Sven Apel,et al.  FEATUREHOUSE: Language-independent, automated software composition , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[36]  Rainer Unland,et al.  Objects, Components, Architectures, Services, and Applications for a Networked World , 2003, Lecture Notes in Computer Science.

[37]  Ben Shneiderman,et al.  Syntactic/semantic interactions in programmer behavior: A model and experimental results , 1979, International Journal of Computer & Information Sciences.

[38]  Maarten van Someren,et al.  The Think Aloud Method: A Practical Guide to Modelling Cognitive Processes , 1994 .

[39]  A. Adam Whatever happened to information systems ethics? Caught between the devil and the deep blue sea , 2004 .

[40]  Iris Vessey,et al.  Research Report - The Relevance of Application Domain Knowledge: The Case of Computer Program Comprehension , 1995, Inf. Syst. Res..