Reflections on the REST Architectural Style and “Principled Design of the Modern Web Architecture” | Fielding, Taylor, Erenkrantz, Gorlick, Whitehead, Khare, Oreizy

Roy T. Fielding, Richard N. Taylor, Justin Erenkrantz, Michael M. Gorlick, E. James Whitehead, Rohit Khare, Peyman Oreizy; Reflections on the REST Architectural Style and “Principled Design of the Modern Web Architecture; In Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2017); 2017; pages 4-11 (8 pages); landing

Abstract

Seventeen years after its initial publication at ICSE 2000, the Representational State Transfer (REST) architectural style continues to hold significance as both a guide for understanding how the World Wide Web is designed to work and an example of how principled design, through the application of architectural styles, can impact the development and understanding of large-scale software architecture. However, REST has also become an industry buzzword: frequently abused to suit a particular argument, confused with the general notion of using HTTP, and denigrated for not being more like a programming methodology or implementation framework. In this paper, we chart the history, evolution, and shortcomings of REST, as well as several related architectural styles that it inspired, from the perspective of a chain of doctoral dissertations produced by the University of California’s Institute for Software Research at UC Irvine. These successive theses share a common theme: extending the insights of REST to new domains and, in their own way, exploring the boundary of software engineering as it applies to decentralized software architectures and architectural design. We conclude with discussion of the circumstances, environment, and organizational characteristics that gave rise to this body of work.

References

There are 59 references.

Abstracted

  • Roy T. Fielding, Richard N. Taylor. Principled Design of the Modern Web Architecture. In Proceedings of the 22nd International Conference on Software Engineering (ICSE). 2000. pages 407–416. IEEE, Limerick, Ireland.

Dissertated

  • Justin R. Erenkrantz. Computational REST: A New Model for Decentralized, Internet-Scale Applications. Ph.D. Dissertation. University of California, Irvine, Irvine, California, USA. 2009.
  • Roy T. Fielding. Architectural Styles and the Design of Network-based Software Architectures. Ph.D. Dissertation. University of California, Irvine, California, USA. 2000.
  • Michael Martin Gorlick. Computational State Transfer: An Architectural Style for Decentralized Systems. Ph.D. Dissertation. Technical Report UCI-ISR-16-3. University of California, Irvine, Irvine, California, USA. 2016.
  • David Alan Halls. Applying Mobile Code to Distributed Systems. Ph.D. Dissertation. University of Cambridge, Cambridge, UK. 1997.
  • Michael Hicks. Dynamic Software Updating. Ph.D. Dissertation. Computer and Information Science, University of Pennsylvania, Philadelphia, Pennsylvania, USA. 2001.
  • Rohit Khare. Extending the REpresentational State Transfer (REST) Architectural Style for Decentralized Systems. Ph.D. Dissertation. University of California, Irvine, California, USA. 2003.
  • Mark Samuel Miller. Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control. Ph.D. Dissertation. Johns Hopkins University, Baltimore, Maryland, USA. 2006.
  • Peyman Oreizy. Open architecture software: a flexible approach to decentralized software evolution. Ph.D. Dissertation. University of California, Irvine, Irvine, California, USA.
  • Emmet James Whitehead, Jr. An Analysis of the Hypertext Versioning Domain. Ph.D. Dissertation. Univ. of California, Irvine, Irvine, California, USA. 2000.

Complete

Separately noted.

Automated Decomposition of Build Targets | Vakilian, Sauciuc, Morgenthaler, Mirrokni

Mohsen Vakilian, Raluca Sauciuc, J. David Morgenthaler, Vahab Mirrokni (Google); Automated Decomposition of Build Targets; In Proceedings of the Foundations of Software Engineering (FSE); 2014-03017; 17 pages.

Abstract

A (build) target specifies the information that is needed to automatically build a software artifact. Managing the dependencies between the targets of a large code base is challenging. This paper focuses on underutilized targets—an important dependency problem that we identified at Google. An underutilized target is one with files not needed by some of its dependents. Underutilized targets result in less modular code, overly large artifacts, slow builds, and unnecessary build and test triggers. To mitigate these problems, programmers decompose underutilized targets into smaller targets. However, manually decomposing a target is tedious and error-prone. Although we prove that finding the best target decomposition is NP-hard, we introduce a greedy algorithm that proposes a decomposition through iterative unification of the strongly connected components of the target. Our tool found 19,994 decomposable targets in a set of 40,000 Java library targets at Google. A decomposable target is one that can be decomposed to at least two targets. Our tool found that decomposing any of the 5,129 decomposable targets would save at least one build or test trigger. The evaluation results show that our tool is (1) efficient because on average, it analyzes a target in two minutes and (2) effective because for each of 1,010 targets, it would save more than 50% of the total execution time of the tests triggered by the target.

References

  1. H. Abdeen, H. Sahraoui, O. Shata, N. Anquetil, S. Ducasse. Towards Automatically Improving Package Structure while Respecting Original Design Decisions. In Proceedings of the 20th Working Conference on Reverse Engineering (WCRE), pages 212–221, 2013.
  2. B. Adams, H. Tromp, K. De Schutter, W. De Meuter. Design Recovery and Maintenance of Build Systems. In Proceedings of the 23rd IEEE International Conference on Software Maintenance (ICSM), pages 114–123, 2007.
  3. J. M. Al-Kofahi, H. V. Nguyen, A. T. Nguyen, T. T. Nguyen, T. N. Nguyen. Detecting Semantic Changes in Makefile Build Code. In Proceedings of the 28th IEEE International Conference on Software Maintenance (ICSM), pages 150–159, 2012.
  4. N. Anquetil and T. C. Lethbridge. Experiments with Clustering as a Software Remodularization Method. In Proceedings of the 6th Working Conference on Reverse Engineering (WCRE), pages 235–255, 1999.
  5. C. AtLee, L. Blakk, J. O’Duinn, A. Z. Gasparnian. Firefox Release Engineering. In The Architecture of Open Source Applications, volume 2. Lulu. 2012.
  6. M. Barnathan, G. Estren, P. Lebeck-Jobe. Building Software at Google Scale. On YouTube. 2012.
  7. G. Bavota, F. Carnevale, A. D. Lucia, M. D. Penta, R. Oliveto. Putting the Developer in-the-Loop: An Interactive GA for Software Re-modularization. In Proceedings of the 4th International Symposium on Search Based Software Engineering (SSBSE), pages 75–89, 2012.
  8. G. Bavota, A. De Lucia, A. Marcus, R. Oliveto. Software Re-Modularization Based on Structural and Semantic Metrics. In Proceedings of the 17th Working Conference on Reverse Engineering (WCRE), pages 195–204, 2010.
  9. M. Besta, Y. Miretskiy, J. Cox. Build in the Cloud: Distributing Build Outputs. On Some Blog.
  10. C. Chambers, A. Raniwala, F. Perry, S. Adams, R. R. Henry, R. Bradshaw, N. Weizenbaum. FlumeJava: Easy, Efficient Data-Parallel Pipelines. In Proceedings of the 2010 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI), pages 363–375, 2010.
  11. T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein. Elementary Graph Algorithms. InIntroduction to Algorithms. The MIT Press, 2009.
  12. P. M. Duvall, S. Matyas, A. Glover. Continuous Integration: Improving Software Quality and Reducing Risk. Addison-Wesley, 2007.
  13. M. Fowler. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.
  14. E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
  15. T. L. Graves, M. J. Harrold, J.-M. Kim, A. Porter, G. Rothermel. An Empirical Study of Regression Test Selection Techniques. In ACM Transactions on Software Engineering and Methodology, 10:184–208. 2001.
  16. P. Gupta, M. Ivey, J. Penix. Testing at the Speed and Scale of Google. On Some Blog. 2011.
  17. M. J. Harrold, J. A. Jones, T. Li, D. Liang, A. Gujarathi. Regression Test Selection for Java Software. In Proceedings of the 2001 ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA). pages 312–326. 2001.
  18. M. J. Harrold and M. L. Souffa. An Incremental Approach to Unit Testing during Maintenance. In Proceedings of the Conference on Software Maintenance (ICSM). pages 362–367. 1988.
  19. C. H. P. Kim, D. Marinov, S. Khurshid, D. Batory, S. Souto, P. Barros, M. d’Amorim. SPLat: Lightweight Dynamic Analysis for Reducing Combinatorics in Testing Configurable Systems. In Proceedings of the ACM SIGSOFT Symposium on Foundations of Software Engineering (FSE). pages 257–267. 2013.
  20. A. Kumar. Development at the Speed and Scale of Google. At QCon. San Francisco.
  21. J. I. Maletic and A. Marcus. Supporting Program Comprehension Using Semantic and Structural Information. In Proceedings of the 23rd International Conference on Software Engineering (ICSE), pages 103–112, 2001.
  22. O. Maqbool and H. Babri. Hierarchical Clustering for Software Architecture Recovery. In IEEE Transactions on Software Engineering.pages 759–780. 2007.
  23. D. Marsh. From Code to Monkeys: Continuous Delivery at Netflix. At QCon, San Francisco. 2013.
  24. S. McIntosh, B. Adams, A. E. Hassan. The Evolution of Java Build Systems. In Empirical Software Engineering. pages 578–608. 2012.
  25. S. McIntosh, B. Adams, T. H. Nguyen, Y. Kamei, A. E. Hassan. An Empirical Study of Build Maintenance Effort. In Proceedings of the 33rd International Conference on Software Engineering (ICSE). pages 141–150. 2011.
  26. J. Micco. Tools for Continuous Integration at Google Scale. On YouTube. 2012.
  27. B. S. Mitchell and S. Mancoridis. On the Automatic Modularization of Software Systems Using the Bunch Tool. In IEEE Transactions on Software Engineering. pages 193–208. 2006.
  28. J. D. Morgenthaler, M. Gridnev, R. Sauciuc, S. Bhansali. Searching for Build Debt: Experiences Managing Technical Debt at Google. In Proceedings of the 3rd International Workshop on Managing Technical Debt (MTD), pages 1–6, 2012.
  29. W. F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D Thesis. University of Illinois at Urbana-Champaign. 1992.
  30. A. Orso, N. Shi, M. J. Harrold. Scaling Regression Testing to Large Software Systems. In ,em>Proceedings of the ACM SIGSOFT International Symposium on Foundations of Software Engineering(FSE). pages 241–251. 2004.
  31. K. Praditwong, M. Harman, X. Yao. Software Module Clustering as a Multi-Objective Search Problem. In IEEE Transactions on Software Engineering. pages 264–282. 2011.
  32. C. Prasad and W. Schulte. Taking Control of Your Engineering Tools. In Computer. pages 63–66. 2013.
  33. C. Rossi. Release Engineering at Facebook. At QCon, San Francisco. 2012.
  34. G. Rothermel and M. J. Harrold. Analyzing Regression Test Selection Techniques. In IEEE Transactions on Software Engineering. 22(8):529–551. 1996.
  35. G. Rothermel and M. J. Harrold. Empirical Studies of a Safe Regression Test Selection Technique. In IEEE Transactions on Software Engineering. 24:401–419. 1998.
  36. A. Tamrawi, H. A. Nguyen, H. V. Nguyen, T. N. Nguyen. Build Code Analysis with Symbolic Evaluation. In Proceedings of the 34th International Conference on Software Engineering (ICSE). 2012. pages 650–660.
  37. A. Telea and L. Voinea. A Tool for Optimizing the Build Performance of Large Software Code Bases. In Proceedings of the 12th European Conference on Software Maintenance and Reengineering (CSMR), pages 323–325, 2008.
  38. J. Thomas, A. Kumar. Google Engineering Tools. In Some Blog. 2011.
  39. V. Tzerpos and R. C. Holt. ACCD: An Algorithm for Comprehension-Driven Clustering. In Proceedings of the 7th Working Conference on Reverse Engineering (WCRE), pages 258–267, 2000.
  40. Apache Ant
  41. Apache Maven
  42. GNU Make
  43. Gradle
  44. Hudson
  45. Jenkins
  46. Maven Central Repository
  47. Google Protocol Buffers: Google’s Data Interchange Format. Documentation and Open-source Release.
  48. Rake
  49. Travis
  50. T. Wiggerts. Using Clustering Algorithms in Legacy Systems Remodularization. In Proceedings of the 4th Working Conference on Reverse Engineering (WCRE), pages 33–43, 1997.
  51. J. Wu, A. E. Hassan, R. C. Holt. Comparison of Clustering Algorithms in the Context of Software Evolution. In Proceedings of the 21st IEEE International Conference on Software Maintenance (ICSM), pages 525–535, 2005.
  52. N. York. Build in the Cloud: Accessing Source Code. In Some Blog. 2011.
  53. J. Zheng, B. Robinson, L. Williams, K. Smiley. Applying Regression Test Selection for COTS-based Applications. In Proceedings of the 28th International Conference on Software Engineering (ICSE), pages 512–522, 2006.