• No results found

Extending the approach to server-side applications

10.4 Future Work

10.4.5 Extending the approach to server-side applications

Web applications are composed out of two distinct parts: the server- side, which is a usually a procedural application implementing data- access and business logic, and the client-side, an event-driven application implementing the UI. In this thesis, we have developed methods for automatic reuse on the client-side. However, since the client-side and server-side are parts of the same whole, in order to increase the usability of the developed methods, we plan to extend the approach to also include the server-side. In order to do this, we will have to make adjustments to the dependency graph, and extend the algorithms for automatic scenario generation, feature identification, and feature integration in a way that they also take into account the specifics of the server-side.

10.4.6

Extending the approach to other domains

Even though the processes described in this thesis were specifically de- veloped to address the domain of client-side web applications, some of the ideas could also be adapted to fit other, similar domains. For exam- ple, other UI domains, such as the domain of mobile applications, or the domain of standard desktop applications, have certain underlying prin- ciples that make them similar to the client-side web application domain. For this reason, we think that one viable aspect of future work could be the modifications of the developed procedures to other domains, or even the development of a general framework for automatic feature reuse.

132 Chapter 10. Conclusion

we consider all event types and all created event-chains as equally prob- able. One idea for possible improvement is to study both the event types and event chains that occur when users interact with the application, and then create heuristics that would increase the achieved code coverage.

We also plan to perform an empirical investigation to compare the scenarios generated by our method with the scenarios specified by appli- cation users and developers. This would help us to evaluate the quality of generated scenarios, and it would possibly provide further insights that could be used to improve our automatic scenario generation method.

10.4.3

Identifying Feature Code

The feature identification process, based on the feature manifestation points and the dependency graph, identifies the code of the target fea- ture. Similar techniques could also be used to identify code based on some other criteria, e.g. by substituting feature manifestation points with error manifestation points, a technique for identifying code that leads to an error could be developed. For this reason, we plan to investigate the application of the feature identification process to debugging.

Apart from debugging, the fact that we are able to identify code of all application features could be used to facilitate a number of software engineering activities, for example, feature understanding or software measurement (e.g. metrics that capture application complexity or main- tainability could be derived). We plan to study some of these possibili- ties.

During our experiments (Chapter 6) we have noticed that the test web applications contain more code than is actually needed by their be- havior. Since significant savings, in terms of code size and increased performance, can be made by removing unnecessary code, one of our plans is to make a wide, empirical study to investigate do web applica- tions, in general, include more code than actually needed.

10.4.4

Firecrow

The algorithms and processes used to implement automatic feature reuse are currently implemented by our tool – Firecrow (Chapter 8), which is a JavaScript library. While this offers benefits in terms of easy exten- sibility and the ability to mimic different browsers, it also suffers from performance problems. For this reason, as part of future work, we plan

10.4 Future Work 133

to implement the developed processes and algorithms directly into open- source browsers (e.g. Firefox, Chrome). This would enable us to perform extensive experiments on the most complex currently available applica- tions.

10.4.5

Extending the approach to server-side appli-

cations

Web applications are composed out of two distinct parts: the server- side, which is a usually a procedural application implementing data- access and business logic, and the client-side, an event-driven application implementing the UI. In this thesis, we have developed methods for automatic reuse on the client-side. However, since the client-side and server-side are parts of the same whole, in order to increase the usability of the developed methods, we plan to extend the approach to also include the server-side. In order to do this, we will have to make adjustments to the dependency graph, and extend the algorithms for automatic scenario generation, feature identification, and feature integration in a way that they also take into account the specifics of the server-side.

10.4.6

Extending the approach to other domains

Even though the processes described in this thesis were specifically de- veloped to address the domain of client-side web applications, some of the ideas could also be adapted to fit other, similar domains. For exam- ple, other UI domains, such as the domain of mobile applications, or the domain of standard desktop applications, have certain underlying prin- ciples that make them similar to the client-side web application domain. For this reason, we think that one viable aspect of future work could be the modifications of the developed procedures to other domains, or even the development of a general framework for automatic feature reuse.

Bibliography

[1] IEEE standard for software and system test documentation. IEEE Std. 829-2008, 2008.

[2] Hiralal Agrawal and Joseph R. Horgan. Dynamic program slicing. In ACM SIGPLAN Notices, volume 25, pages 246–256. ACM, 1990. [3] Nadia Alshahwan and Mark Harman. Automated web application testing using search based software engineering. In Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering, pages 3–12. IEEE Computer Society, 2011. [4] Saswat Anand, Edmund Burke, Tsong Yueh Chen, John Clark,

Myra B. Cohen, Wolfgang Grieskamp, Mark Harman, Mary Jean Harrold, Phil McMinn, Antonia Bertolino, et al. An orchestrated survey on automated software test case generation. Journal of Sys- tems and Software, 2013.

[5] Shay Artzi, Julian Dolby, Simon H. Jensen, Anders. Møller, and Frank Tip. A framework for automated testing of Javascript web applications. In Software Engineering, ICSE 2011, 33rd Interna- tional Conference on, pages 571–580. ACM, 2011.

[6] Thomas Ball. The concept of dynamic analysis. In Software Engi- neering – ESEC/FSE 1999, pages 216–234. Springer, 1999. [7] Victor R. Basili, Lionel C. Briand, and Walc´elio L. Melo. How reuse

influences productivity in object-oriented systems. Communications of the ACM, 39(10):104–116, 1996.

[8] Boris Beizer. Software testing techniques. Dreamtech Press, 2003. 135

Bibliography

[1] IEEE standard for software and system test documentation. IEEE Std. 829-2008, 2008.

[2] Hiralal Agrawal and Joseph R. Horgan. Dynamic program slicing. In ACM SIGPLAN Notices, volume 25, pages 246–256. ACM, 1990. [3] Nadia Alshahwan and Mark Harman. Automated web application testing using search based software engineering. In Proceedings of the 2011 26th IEEE/ACM International Conference on Automated Software Engineering, pages 3–12. IEEE Computer Society, 2011. [4] Saswat Anand, Edmund Burke, Tsong Yueh Chen, John Clark,

Myra B. Cohen, Wolfgang Grieskamp, Mark Harman, Mary Jean Harrold, Phil McMinn, Antonia Bertolino, et al. An orchestrated survey on automated software test case generation. Journal of Sys- tems and Software, 2013.

[5] Shay Artzi, Julian Dolby, Simon H. Jensen, Anders. Møller, and Frank Tip. A framework for automated testing of Javascript web applications. In Software Engineering, ICSE 2011, 33rd Interna- tional Conference on, pages 571–580. ACM, 2011.

[6] Thomas Ball. The concept of dynamic analysis. In Software Engi- neering – ESEC/FSE 1999, pages 216–234. Springer, 1999.

[7] Victor R. Basili, Lionel C. Briand, and Walc´elio L. Melo. How reuse influences productivity in object-oriented systems. Communications of the ACM, 39(10):104–116, 1996.

[8] Boris Beizer. Software testing techniques. Dreamtech Press, 2003. 135

136 Bibliography

[9] Ted J. Biggerstaff. The library scaling problem and the limits of concrete component reuse. In Software Reuse: Advances in Software Reusability, 1994. Proceedings., Third International Conference on, pages 102–109. IEEE, 1994.

[10] Ted J. Biggerstaff, Bharat G. Mitbander, and Dallas Webster. The concept assignment problem in program understanding. In Proceed- ings of the 15th international conference on Software Engineering, pages 482–498. IEEE Computer Society Press, 1993.

[11] Barry Boehm. Managing software productivity and reuse. Com- puter, 32(9):111–113, 1999.

[12] Frederick P. Brooks Jr. No silver bullet-essence and accidents of software engineering. IEEE computer, 20(4):10–19, 1987.

[13] Kunrong Chen and V´aclav Rajlich. Case study of feature location

using dependence graph. In Program Comprehension, 2000. Pro- ceedings. IWPC 2000. 8th International Workshop on, pages 241– 247. IEEE, 2000.

[14] Thomas A. Corbi. Program understanding: Challenge for the 1990s. IBM Systems Journal, 28(2):294–306, 1989.

[15] Bas Cornelissen, Andy Zaidman, Arie van Deursen, Leon Moonen, and Rainer Koschke. A systematic survey of program comprehen- sion through dynamic analysis. Software Engineering, IEEE Trans- actions on, 35(5):684–702, 2009.

[16] Rylan Cottrell, Robert J. Walker, and Jorg Denzinger. Jigsaw: a tool for the small-scale reuse of source code. In ICSE, pages 933– 934. ACM, 2008.

[17] Ole-Johan Dahl and Kristen Nygaard. Simula: an ALGOL-based simulation language. Communications of the ACM, 9(9):671–678, 1966.

[18] Bogdan Dit, Meghan Revelle, Malcom Gethers, and Denys Poshy- vanyk. Feature location in source code: a taxonomy and survey. Journal of Software: Evolution and Process, 25(1):53–95, 2011.

Bibliography 137

[19] Bogdan Dit, Meghan Revelle, Malcom Gethers, and Denys Poshy- vanyk. Feature location in source code: a taxonomy and survey. Journal of Software: Evolution and Process, 25(1):53–95, 2013. [20] Thomas Eisenbarth, Rainer Koschke, and Daniel Simon. Locating

features in source code. Software Engineering, IEEE Transactions on, 29(3):210–224, 2003.

[21] Michael Ellims, James Bridges, and Darrel C. Ince. The economics of unit testing. Empirical Software Engineering, 11(1):5–31, 2006. [22] Richard K. Fjeldstad and William T. Hamlen. Application program

maintenance study: Report to our respondents. Proceedings Guide, 48, 1983.

[23] William B. Frakes and Giancarlo Succi. An industrial study of reuse, quality, and productivity. Journal of Systems and Software, 57(2):99–106, 2001.

[24] John E. Gaffney Jr and R. D. Cruickshank. A general economics model of software reuse. In Proceedings of the 14th international conference on Software engineering, pages 327–337. ACM, 1992. [25] David Garlan, Robert Allen, and John Ockerbloom. Architectural

mismatch: Why reuse is so hard. Software, IEEE, 12(6):17–26, 1995.

[26] Patrice Godefroid, Nils Klarlund, and Koushik Sen. DART: directed automated random testing. In ACM Sigplan Notices, volume 40, pages 213–223. ACM, 2005.

[27] Patrice Godefroid, Michael Y. Levin, and David Molnar. Auto- mated whitebox fuzz testing. Microsoft Research, 2008.

[28] Robert J. Hall. Automatic extraction of executable program sub- sets by simultaneous dynamic program slicing. Automated Software Engineering, 2(1):33–53, 1995.

[29] Reid Holmes. Pragmatic Software Reuse. PhD thesis, University of Calgary, Canada, 2008.

136 Bibliography

[9] Ted J. Biggerstaff. The library scaling problem and the limits of concrete component reuse. In Software Reuse: Advances in Software Reusability, 1994. Proceedings., Third International Conference on, pages 102–109. IEEE, 1994.

[10] Ted J. Biggerstaff, Bharat G. Mitbander, and Dallas Webster. The concept assignment problem in program understanding. In Proceed- ings of the 15th international conference on Software Engineering, pages 482–498. IEEE Computer Society Press, 1993.

[11] Barry Boehm. Managing software productivity and reuse. Com- puter, 32(9):111–113, 1999.

[12] Frederick P. Brooks Jr. No silver bullet-essence and accidents of software engineering. IEEE computer, 20(4):10–19, 1987.

[13] Kunrong Chen and V´aclav Rajlich. Case study of feature location

using dependence graph. In Program Comprehension, 2000. Pro- ceedings. IWPC 2000. 8th International Workshop on, pages 241– 247. IEEE, 2000.

[14] Thomas A. Corbi. Program understanding: Challenge for the 1990s. IBM Systems Journal, 28(2):294–306, 1989.

[15] Bas Cornelissen, Andy Zaidman, Arie van Deursen, Leon Moonen, and Rainer Koschke. A systematic survey of program comprehen- sion through dynamic analysis. Software Engineering, IEEE Trans- actions on, 35(5):684–702, 2009.

[16] Rylan Cottrell, Robert J. Walker, and Jorg Denzinger. Jigsaw: a tool for the small-scale reuse of source code. In ICSE, pages 933– 934. ACM, 2008.

[17] Ole-Johan Dahl and Kristen Nygaard. Simula: an ALGOL-based simulation language. Communications of the ACM, 9(9):671–678, 1966.

[18] Bogdan Dit, Meghan Revelle, Malcom Gethers, and Denys Poshy- vanyk. Feature location in source code: a taxonomy and survey. Journal of Software: Evolution and Process, 25(1):53–95, 2011.

Bibliography 137

[19] Bogdan Dit, Meghan Revelle, Malcom Gethers, and Denys Poshy- vanyk. Feature location in source code: a taxonomy and survey. Journal of Software: Evolution and Process, 25(1):53–95, 2013. [20] Thomas Eisenbarth, Rainer Koschke, and Daniel Simon. Locating

features in source code. Software Engineering, IEEE Transactions on, 29(3):210–224, 2003.

[21] Michael Ellims, James Bridges, and Darrel C. Ince. The economics of unit testing. Empirical Software Engineering, 11(1):5–31, 2006. [22] Richard K. Fjeldstad and William T. Hamlen. Application program

maintenance study: Report to our respondents. Proceedings Guide, 48, 1983.

[23] William B. Frakes and Giancarlo Succi. An industrial study of reuse, quality, and productivity. Journal of Systems and Software, 57(2):99–106, 2001.

[24] John E. Gaffney Jr and R. D. Cruickshank. A general economics model of software reuse. In Proceedings of the 14th international conference on Software engineering, pages 327–337. ACM, 1992. [25] David Garlan, Robert Allen, and John Ockerbloom. Architectural

mismatch: Why reuse is so hard. Software, IEEE, 12(6):17–26, 1995.

[26] Patrice Godefroid, Nils Klarlund, and Koushik Sen. DART: directed automated random testing. In ACM Sigplan Notices, volume 40, pages 213–223. ACM, 2005.

[27] Patrice Godefroid, Michael Y. Levin, and David Molnar. Auto- mated whitebox fuzz testing. Microsoft Research, 2008.

[28] Robert J. Hall. Automatic extraction of executable program sub- sets by simultaneous dynamic program slicing. Automated Software Engineering, 2(1):33–53, 1995.

[29] Reid Holmes. Pragmatic Software Reuse. PhD thesis, University of Calgary, Canada, 2008.

138 Bibliography

[30] Reid Holmes and Robert J. Walker. Supporting the investigation and planning of pragmatic reuse tasks. In Proceedings of the 29th international conference on Software Engineering, pages 447–457. IEEE Computer Society, 2007.

[31] Reid Holmes and Robert J. Walker. Semi-Automating Pragmatic Reuse Tasks. Automated Software Engineering, pages 481–482. IEEE Computer Society, 2008.

[32] Reid Holmes and Robert J. Walker. Systematizing pragmatic

software reuse. ACM Transactions on Software Engineering and Methodology (TOSEM), 21(4):20, 2012.

[33] Susan Horwitz, Thomas Reps, and David Binkley. Interprocedural slicing using dependence graphs. ACM Transactions on Program- ming Languages and Systems (TOPLAS), 12(1):26–60, 1990. [34] Susane Horwitz, Jan Prins, and Thomas Reps. Integrating nonin-

terfering versions of programs. ACM Trans. Program. Lang. Syst., 11(3):345–387, 1989.

[35] Narendra Jussien, Guillaume Rochart, and Xavier Lorca. The

CHOCO constraint programming solver. In CPAIOR’08 workshop on Open-Source Software for Integer and Contraint Programming (OSSICP’08), 2008.

[36] James C. King. Symbolic execution and program testing. Commu- nications of the ACM, 19(7):385–394, 1976.

[37] Charles W. Krueger. Software reuse. ACM Computing Surveys (CSUR), 24(2):131–183, 1992.

[38] Loren Larsen and Mary Jean Harrold. Slicing object-oriented soft- ware. In Software Engineering, 1996., Proceedings of the 18th In- ternational Conference on, pages 495–505. IEEE, 1996.

[39] Ot´avio Augusto Lazzarini Lemos, Sushil Bajracharya, Joel Ossher, Paulo Cesar Masiero, and Cristina Lopes. Applying test-driven code search to the reuse of auxiliary functionality. In Proceedings of the 2009 ACM symposium on Applied Computing, pages 476–482. ACM, 2009.

Bibliography 139

[40] Peng Li and Eric Wohlstadter. Script insight: Using models to explore Javascript code from the browser view. In International Conference on Web Engineering, pages 260–274, 2009.

[41] M. Douglas McIlroy, JM. Buxton, Peter Naur, and Brian Ran- dell. Mass-produced software components. In Proceedings of the 1st International Conference on Software Engineering, Garmisch Pattenkirchen, Germany, pages 88–98. sn, 1968.

[42] Ali Mesbah, Engin Bozdag, and Arie van Deursen. Crawling ajax

by inferring user interface state changes. In Web Engineering,

2008. ICWE’08. Eighth International Conference on, pages 122– 134. IEEE, 2008.

[43] Ali Mesbah, Arie van Deursen, and Danny Roest. Invariant-based automatic testing of modern web applications. Software Engineer- ing, IEEE Transactions on, 38(1):35–53, 2012.

[44] San Murugesan. Understanding web 2.0. IT professional, 9(4):34– 41, 2007.

[45] Stephen Oney and Brad Myers. FireCrystal: Understanding inter- active behaviors in dynamic web pages. In IEEE Symposium on Visual Languages and Human-Centric Computing, pages 105–108. IEEE Computer Society, 2009.

[46] Karl J. Ottenstein and Linda M. Ottenstein. The program depen- dence graph in a software development environment. In ACM Sig- plan Notices, volume 19, pages 177–184. ACM, 1984.

[47] David Lorge Parnas. On the design and development of program

families. Software Engineering, IEEE Transactions on, (1):1–9,

1976.

[48] Denys Poshyvanyk, Y. G. Gu´eh´eneuc, Andrian Marcus, Giuliano Antoniol, and Vaclav Rajlich. Feature location using probabilistic ranking of methods based on execution scenarios and information retrieval. Software Engineering, IEEE Transactions on, 33(6):420– 432, 2007.

[49] Rub´en Prieto-D´ıaz. Status report: Software reusability. Software, IEEE, 10(3):61–66, 1993.

138 Bibliography

[30] Reid Holmes and Robert J. Walker. Supporting the investigation and planning of pragmatic reuse tasks. In Proceedings of the 29th international conference on Software Engineering, pages 447–457. IEEE Computer Society, 2007.

[31] Reid Holmes and Robert J. Walker. Semi-Automating Pragmatic Reuse Tasks. Automated Software Engineering, pages 481–482. IEEE Computer Society, 2008.

[32] Reid Holmes and Robert J. Walker. Systematizing pragmatic

software reuse. ACM Transactions on Software Engineering and Methodology (TOSEM), 21(4):20, 2012.

[33] Susan Horwitz, Thomas Reps, and David Binkley. Interprocedural slicing using dependence graphs. ACM Transactions on Program- ming Languages and Systems (TOPLAS), 12(1):26–60, 1990. [34] Susane Horwitz, Jan Prins, and Thomas Reps. Integrating nonin-

terfering versions of programs. ACM Trans. Program. Lang. Syst., 11(3):345–387, 1989.

[35] Narendra Jussien, Guillaume Rochart, and Xavier Lorca. The

CHOCO constraint programming solver. In CPAIOR’08 workshop on Open-Source Software for Integer and Contraint Programming (OSSICP’08), 2008.

[36] James C. King. Symbolic execution and program testing. Commu- nications of the ACM, 19(7):385–394, 1976.

[37] Charles W. Krueger. Software reuse. ACM Computing Surveys (CSUR), 24(2):131–183, 1992.

[38] Loren Larsen and Mary Jean Harrold. Slicing object-oriented soft- ware. In Software Engineering, 1996., Proceedings of the 18th In- ternational Conference on, pages 495–505. IEEE, 1996.

[39] Ot´avio Augusto Lazzarini Lemos, Sushil Bajracharya, Joel Ossher, Paulo Cesar Masiero, and Cristina Lopes. Applying test-driven code search to the reuse of auxiliary functionality. In Proceedings of the 2009 ACM symposium on Applied Computing, pages 476–482. ACM, 2009.

Bibliography 139

[40] Peng Li and Eric Wohlstadter. Script insight: Using models to explore Javascript code from the browser view. In International Conference on Web Engineering, pages 260–274, 2009.

[41] M. Douglas McIlroy, JM. Buxton, Peter Naur, and Brian Ran- dell. Mass-produced software components. In Proceedings of the 1st International Conference on Software Engineering, Garmisch Pattenkirchen, Germany, pages 88–98. sn, 1968.

[42] Ali Mesbah, Engin Bozdag, and Arie van Deursen. Crawling ajax

by inferring user interface state changes. In Web Engineering,

2008. ICWE’08. Eighth International Conference on, pages 122– 134. IEEE, 2008.

[43] Ali Mesbah, Arie van Deursen, and Danny Roest. Invariant-based automatic testing of modern web applications. Software Engineer- ing, IEEE Transactions on, 38(1):35–53, 2012.

[44] San Murugesan. Understanding web 2.0. IT professional, 9(4):34– 41, 2007.

[45] Stephen Oney and Brad Myers. FireCrystal: Understanding inter- active behaviors in dynamic web pages. In IEEE Symposium on Visual Languages and Human-Centric Computing, pages 105–108. IEEE Computer Society, 2009.

[46] Karl J. Ottenstein and Linda M. Ottenstein. The program depen- dence graph in a software development environment. In ACM Sig- plan Notices, volume 19, pages 177–184. ACM, 1984.

[47] David Lorge Parnas. On the design and development of program

families. Software Engineering, IEEE Transactions on, (1):1–9,

1976.

[48] Denys Poshyvanyk, Y. G. Gu´eh´eneuc, Andrian Marcus, Giuliano Antoniol, and Vaclav Rajlich. Feature location using probabilistic ranking of methods based on execution scenarios and information retrieval. Software Engineering, IEEE Transactions on, 33(6):420– 432, 2007.

[49] Rub´en Prieto-D´ıaz. Status report: Software reusability. Software, IEEE, 10(3):61–66, 1993.

140 Bibliography

[50] V´aclav Rajlich and Norman Wilde. The role of concepts in pro-

gram comprehension. In Program Comprehension, 2002. Proceed- ings. 10th International Workshop on, pages 271–278. IEEE, 2002.

[51] Mary Beth Rosson and John M Carroll. The reuse of uses in

Smalltalk programming. ACM Transactions on Computer-Human Interaction (TOCHI), 3(3):219–253, 1996.

[52] Prateek Saxena, Devdatta Akhawe, Steve Hanna, Feng Mao, Stephen McCamant, and Dawn Song. A symbolic execution frame- work for Javascript. In Security and Privacy (SP), 2010 IEEE Sym-