Refactoring for Energy Efficiency: A Reflection on the State of the Art

Recent refactoring research introduced several innovations addressing diverse goals, such code extensibility, reusability, and testability. However, energy consumption, a critical property of any software system, remains unaddressed by refactoring research. In this paper, we provide an accounting of some of the recent and successful state-of-the-art research on software energy consumption. Through an investigation on premiere software engineering venues, we identify and discuss 12 contributions that can be further instantiated in refactoring tools used to improve software energy efficiency -- and the challenges behind this process. These opportunities span a wide range of software characteristics, such as mobile applications and concurrent programming. Mobile applications is the topic with the greatest number of opportunities (6 out of 11). The study serves as a call to action for refactoring researchers interested in software energy consumption issues.

[1]  Klara Nahrstedt,et al.  Energy-efficient soft real-time CPU scheduling for mobile multimedia systems , 2003, SOSP '03.

[2]  Ming Zhang,et al.  Where is the energy spent inside my app?: fine grained energy accounting on smartphones with Eprof , 2012, EuroSys '12.

[3]  Yu David Liu,et al.  Green Streams for data-intensive software , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[4]  William G. Griswold,et al.  APE: an annotation language and middleware for energy-efficient mobile application development , 2014, ICSE.

[5]  Fernando Magno Quintão Pereira,et al.  Validation of memory accesses through symbolic analyses , 2014, OOPSLA.

[6]  Shankar Balachandran,et al.  The Implications of Shared Data Synchronization Techniques on Multi-Core Energy Efficiency , 2012, HotPower.

[7]  Jeffrey Overbey,et al.  Refactorings for Fortran and high-performance computing , 2005, SE-HPCS '05.

[8]  Melanie Kambadur,et al.  An experimental survey of energy management across the stack , 2014, OOPSLA.

[9]  Romain Rouvoy,et al.  Runtime monitoring of software energy hotspots , 2012, 2012 Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering.

[10]  Yu David Liu,et al.  Energy-efficient synchronization through program patterns , 2012, 2012 First International Workshop on Green and Sustainable Software (GREENS).

[11]  Mahmut T. Kandemir,et al.  Energy Behavior of Java Applications from the Memory Perspective , 2001, Java Virtual Machine Research and Technology Symposium.

[12]  M. Horowitz,et al.  Low-power digital design , 1994, Proceedings of 1994 IEEE Symposium on Low Power Electronics.

[13]  Miryung Kim,et al.  A field study of refactoring challenges and benefits , 2012, SIGSOFT FSE.

[14]  Luca Ardito,et al.  Understanding Green Software Development: A Conceptual Framework , 2015, IT Professional.

[15]  Yu David Liu,et al.  Energy-efficient work-stealing language runtimes , 2014, ASPLOS.

[16]  Ding Li,et al.  Making web applications more energy efficient for OLED smartphones , 2014, ICSE.

[17]  Gustavo Pinto,et al.  Understanding energy behaviors of thread management constructs , 2014, OOPSLA 2014.

[18]  Uwe Aßmann,et al.  Energy Consumption and Efficiency in Mobile Applications: A User Feedback Study , 2013, 2013 IEEE International Conference on Green Computing and Communications and IEEE Internet of Things and IEEE Cyber, Physical and Social Computing.

[19]  Ramesh Govindan,et al.  Calculating source line level energy information for Android applications , 2013, ISSTA.

[20]  Kent Beck,et al.  Extreme Programming Explained: Embrace Change (2nd Edition) , 2004 .

[21]  Gustavo Pinto,et al.  Data-Oriented Characterization of Application-Level Energy Optimization , 2015, FASE.

[22]  Pascal Vivet,et al.  Power Modeling in SystemC at Transaction Level, Application to a DVFS Architecture , 2008, 2008 IEEE Computer Society Annual Symposium on VLSI.

[23]  Abram Hindle Green mining: A methodology of relating software change to power consumption , 2012, 2012 9th IEEE Working Conference on Mining Software Repositories (MSR).

[24]  Abram Hindle,et al.  GreenMiner: a hardware based mining software repositories software energy consumption framework , 2014, MSR 2014.

[25]  Gernot Heiser,et al.  An Analysis of Power Consumption in a Smartphone , 2010, USENIX Annual Technical Conference.

[26]  Anne E. Trefethen,et al.  Energy-aware software: Challenges, opportunities and strategies , 2013, J. Comput. Sci..

[27]  Andreas Winter,et al.  Towards Applying Reengineering Services to Energy-Efficient Applications , 2012, 2012 16th European Conference on Software Maintenance and Reengineering.

[28]  Fernando Castor,et al.  Characterizing the Energy Efficiency of Java’s Thread-Safe Collections in a Multi-Core Environment , 2014 .

[29]  Abhik Roychoudhury,et al.  Detecting energy bugs and hotspots in mobile apps , 2014, SIGSOFT FSE.

[30]  Mauricio A. Saca Refactoring improving the design of existing code , 2017, 2017 IEEE 37th Central America and Panama Convention (CONCAPAN XXXVII).

[31]  Eli Tilevich,et al.  Reducing the Energy Consumption of Mobile Applications Behind the Scenes , 2013, 2013 IEEE International Conference on Software Maintenance.

[32]  Tom Mens,et al.  How healthy are software engineering conferences? , 2014, Sci. Comput. Program..

[33]  Giuseppe Scanniello,et al.  Using the GPU to Green an Intensive and Massive Computation System , 2013, 2013 17th European Conference on Software Maintenance and Reengineering.

[34]  Ming Wei Chang,et al.  DVFS Aware Techniques on Parallel Architecture Core (PAC) Platform , 2008, 2008 International Conference on Embedded Software and Systems Symposia.

[35]  Ramesh Govindan,et al.  Estimating mobile application energy consumption using program analysis , 2013, 2013 35th International Conference on Software Engineering (ICSE).

[36]  Martin C. Rinard,et al.  Verifying quantitative reliability for programs that execute on unreliable hardware , 2013, OOPSLA.

[37]  Michael Cohen,et al.  Energy types , 2012, OOPSLA '12.

[38]  Michael D. Ernst,et al.  Refactoring sequential Java code for concurrency via concurrent libraries , 2009, 2009 IEEE 31st International Conference on Software Engineering.

[39]  Thomas D. Burd,et al.  The simulation and evaluation of dynamic voltage scaling algorithms , 1998, Proceedings. 1998 International Symposium on Low Power Electronics and Design (IEEE Cat. No.98TH8379).

[40]  Kathryn S. McKinley,et al.  The latency, accuracy, and battery (LAB) abstraction: programmer productivity and energy efficiency for continuous mobile context sensing , 2013, OOPSLA.

[41]  Doug Lea,et al.  A Java fork/join framework , 2000, JAVA '00.

[42]  Sharad Malik,et al.  Power analysis of embedded software: a first step towards software power minimization , 1994, IEEE Trans. Very Large Scale Integr. Syst..

[43]  Gustavo Pinto,et al.  Mining questions about software energy consumption , 2014, MSR 2014.

[44]  Sebastian Burckhardt,et al.  Refactoring local to cloud data types for mobile apps , 2014, MOBILESoft 2014.

[45]  Ting Cao,et al.  The Yin and Yang of power and performance for asymmetric hardware and managed software , 2012, 2012 39th Annual International Symposium on Computer Architecture (ISCA).

[46]  Dan Grossman,et al.  EnerJ: approximate data types for safe and general low-power computation , 2011, PLDI '11.

[47]  Yuanyuan Zhou,et al.  Managing energy-performance tradeoffs for multithreaded applications on multiprocessor architectures , 2007, SIGMETRICS '07.

[48]  Ding Li,et al.  An Empirical Study of the Energy Consumption of Android Applications , 2014, 2014 IEEE International Conference on Software Maintenance and Evolution.

[49]  Lori L. Pollock,et al.  SEEDS: a software engineer's energy-optimization decision support framework , 2014, ICSE.

[50]  William G. J. Halfond,et al.  How Does Code Obfuscation Impact Energy Usage? , 2014, 2014 IEEE International Conference on Software Maintenance and Evolution.

[51]  Ding Li,et al.  Integrated energy-directed test suite optimization , 2014, ISSTA 2014.

[52]  Kent L. Beck,et al.  Extreme programming explained - embrace change , 1990 .

[53]  Ying Zhang,et al.  Refactoring android Java code for on-demand computation offloading , 2012, OOPSLA '12.

[54]  Martin C. Rinard,et al.  Verifying quantitative reliability for programs that execute on unreliable hardware , 2013, OOPSLA.

[55]  Martin C. Rinard,et al.  Chisel: reliability- and accuracy-aware optimization of approximate computational kernels , 2014, OOPSLA.

[56]  James R. Larus,et al.  Software and the Concurrency Revolution , 2005, ACM Queue.