Lessons in Software Evolution Learned by Listening to Smalltalk

  • Oscar Nierstrasz
  • Tudor Gîrba
Part of the Lecture Notes in Computer Science book series (LNCS, volume 5901)


The biggest challenge facing software developers today is how to gracefully evolve complex software systems in the face of changing requirements. We clearly need software systems to be more dynamic, compositional and model-centric, but instead we continue to build systems that are static, baroque and inflexible. How can we better build change-enabled systems in the future? To answer this question, we propose to look back to one of the most successful systems to support change, namely Smalltalk. We briefly introduce Smalltalk with a few simple examples, and draw some lessons for software evolution. Smalltalk’s simplicity, its reflective design, and its highly dynamic nature all go a long way towards enabling change in Smalltalk applications. We then illustrate how these lessons work in practice by reviewing a number of research projects that support software evolution by exploiting Smalltalk’s design. We conclude by summarizing open issues and challenges for change-enabled systems of the future.


Software Evolution Transactional Memory Abstract Syntax Tree Software Transactional Memory Simple Syntax 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Abowd, G.D., Dey, A.K.: Towards a Better Understanding of Context and Context-Awareness. In: Proceedings of the CHI 2000 Workshop on the What, Who, Where, When and How of Context-Awareness. ACM Press, New York (2000)Google Scholar
  2. 2.
    Achermann, F., Lumpe, M., Schneider, J.-G., Nierstrasz, O.: Piccola — a Small Composition Language. In: Bowman, H., Derrick, J. (eds.) Formal Methods for Distributed Processing — A Survey of Object-Oriented Approaches, pp. 403–426. Cambridge University Press, Cambridge (2001)Google Scholar
  3. 3.
    Baldauf, M., Dustdar, S., Rosenberg, F.: A Survey on Context-Aware Systems. International Journal of Ad Hoc and Ubiquitous Computing 2(4), 263–277 (2007)CrossRefGoogle Scholar
  4. 4.
    Beck, K.: Extreme Programming Explained: Embrace Change. Addison-Wesley, Reading (2000)Google Scholar
  5. 5.
    Beck, K.: Test Driven Development: By Example. Addison-Wesley Longman, Amsterdam (2002)Google Scholar
  6. 6.
    Birtwistle, G., Dahl, O.J., Myhrtag, B., Nygaard, K.: Simula Begin. Auerbach Press, Philadelphia (1973)Google Scholar
  7. 7.
    Bryant, A.: Monticello,
  8. 8.
    Bunge, P.: Scripting Browsers with Glamour. Master’s Thesis, University of Bern (April 2009)Google Scholar
  9. 9.
    Burnett, M.M., Goldberg, A.: Visual Object-Oriented Programming. Prentice-Hall, Englewood Cliffs (1995)Google Scholar
  10. 10.
    Cassou, D., Ducasse, S., Wuyts, R.: Traits at Work: the Design of a New Trait-Based Stream Library. Journal of Computer Languages, Systems and Structures 35(1), 2–20 (2009)CrossRefGoogle Scholar
  11. 11.
    Denker, M.: Sub-method Structural and Behavioral Reflection. PhD Thesis, University of Bern (May 2008)Google Scholar
  12. 12.
    Denker, M., Gîrba, T., Lienhard, A., Nierstrasz, O., Renggli, L., Zumkehr, P.: Encapsulating and Exploiting Change with Changeboxes. In: Proceedings of the 2007 International Conference on Dynamic Languages (ICDL 2007), pp. 25–49. ACM Digital Library, New York (2007)Google Scholar
  13. 13.
    Dezani-Ciancaglini, M., Giannini, P., Nierstrasz, O.: A Calculus of Evolving Objects. Scientific Annals of Computer Science XVIII, pp. 63–98 (2008)Google Scholar
  14. 14.
    Ducasse, S., Gîrba, T., Kuhn, A., Renggli, L.: Meta-Environment and Executable Meta-Language Using Smalltalk: an Experience Report. Journal of Software and Systems Modeling (SOSYM) 8(1), 5–19 (2009)CrossRefGoogle Scholar
  15. 15.
    Ducasse, S., Lienhard, A., Renggli, L.: Seaside: A Flexible Environment for Building Dynamic Web Applications. IEEE Software 24(5), 56–63 (2007)CrossRefGoogle Scholar
  16. 16.
    Ducasse, S., Nierstrasz, O., Schärli, N., Wuyts, R., Black, A.: Traits: A Mechanism for Fine-Grained Reuse. ACM Transactions on Programming Languages and Systems (TOPLAS) 28(2), 331–388 (2006)CrossRefGoogle Scholar
  17. 17.
    Edwards, J.: Subtext: Uncovering the Simplicity of Programming. In: Johnson, R., Gabriel, R.P. (eds.) Proceedings of the 20th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2005, San Diego, CA, USA, October 16-20, pp. 505–518. ACM, New York (2005)CrossRefGoogle Scholar
  18. 18.
    Fowler, M.: FluentInterface, on Martin Fowler’s Blog (December 2005),
  19. 19.
    Goldberg, A., Robson, D.: Smalltalk 80: the Language and Its Implementation. Addison Wesley, Reading (1983)zbMATHGoogle Scholar
  20. 20.
    Hirschfeld, R., Costanza, P., Nierstrasz, O.: Context-Oriented Programming. Journal of Object Technology 7(3) (2008)Google Scholar
  21. 21.
    Hoare, C.A.R.: Hints on Programming Language Design. Technical Report CS-TR-73-403, Stanford University (1973)Google Scholar
  22. 22.
    Kay, A.C.: A Personal Computer for Children of All Ages. In: Proceedings of the ACM National Conference. ACM Press, New York (1972)Google Scholar
  23. 23.
    Kay, A.C.: The Early History of Smalltalk. ACM SIGPLAN Notices 28, 69–95 (1993)CrossRefGoogle Scholar
  24. 24.
    Kuhn, A., Verwaest, T.: FAME, a Polyglot Library for Metamodeling at Runtime. In: Workshop on Models at Runtime, pp. 57–66 (2008)Google Scholar
  25. 25.
    Lanza, M., Marinescu, R.: Object-Oriented Metrics in Practice. Springer, Heidelberg (2006)zbMATHGoogle Scholar
  26. 26.
    Lehman, M., Belady, L.: Program Evolution: Processes of Software Change. London Academic Press, London (1985)Google Scholar
  27. 27.
    Lienhard, A., Fierz, J., Nierstrasz, O.: Flow-Centric, Back-in-Time Debugging. In: Objects, Components, Models and Patterns, Proceedings of TOOLS Europe 2009. LNBIP, vol. 33, pp. 272–288. Springer, Heidelberg (2009)Google Scholar
  28. 28.
    Lienhard, A., Gîrba, T., Nierstrasz, O.: Practical Object-Oriented Back-in-Time Debugging. In: Vitek, J. (ed.) ECOOP 2008. LNCS, vol. 5142, pp. 592–615. Springer, Heidelberg (2008); ECOOP distinguished paper awardCrossRefGoogle Scholar
  29. 29.
    Maruyama, K., Terada, M.: Debugging with Reverse Watchpoint. In: Proceedings of the Third International Conference on Quality Software (QSIC 2003), Washington, DC, USA, p. 116. IEEE Computer Society, Los Alamitos (2003)CrossRefGoogle Scholar
  30. 30.
    Mellor, S.J., Balcer, M.J.: Executable UML: A Foundation for Model-Driven Architecture. Addison-Wesley Professional (2002)Google Scholar
  31. 31.
    Meyer, M., Gîrba, T., Lungu, M.: Mondrian: An Agile Visualization Framework. In: ACM Symposium on Software Visualization (SoftVis 2006), pp. 135–144. ACM Press, New York (2006)CrossRefGoogle Scholar
  32. 32.
    Nierstrasz, O.: Software Evolution as the Key to Productivity. In: Wirsing, M., Knapp, A., Balsamo, S. (eds.) RISSEF 2002. LNCS, vol. 2941, pp. 274–282. Springer, Heidelberg (2004)Google Scholar
  33. 33.
    Nierstrasz, O., Bergel, A., Denker, M., Ducasse, S., Gälli, M., Wuyts, R.: On the Revival of Dynamic Languages. In: Gschwind, T., Aßmann, U., Nierstrasz, O. (eds.) SC 2005. LNCS, vol. 3628, pp. 1–13. Springer, Heidelberg (2005)CrossRefGoogle Scholar
  34. 34.
    Nierstrasz, O., Denker, M., Gîrba, T., Lienhard, A., Röthlisberger, D.: Change-Enabled Software Systems. In: Wirsing, M., Banâtre, J.-P., Hölzl, M., Rauschmayer, A. (eds.) Soft-Ware Intensive Systems. LNCS, vol. 5380, pp. 64–79. Springer, Heidelberg (2008)CrossRefGoogle Scholar
  35. 35.
    Nierstrasz, O., Denker, M., Renggli, L.: Model-Centric, Context-Aware Software Adaptation. In: Cheng, B.H.C., de Lemos, R., Giese, H., Inverardi, P., Magee, J. (eds.) Software Engineering for Self-Adaptive Systems. LNCS, vol. 5525, pp. 128–145. Springer, Heidelberg (2009)CrossRefGoogle Scholar
  36. 36.
    Nierstrasz, O., Ducasse, S., Gîrba, T.: The Story of Moose: an Agile Reengineering Environment. In: Proceedings of the European Software Engineering Conference (ESEC/FSE 2005), pp. 1–10. ACM Press, New York (2005); (invited paper)Google Scholar
  37. 37.
    Pawson, R.: Naked Objects. Ph.D. Thesis, Trinity College, Dublin (2004)Google Scholar
  38. 38.
    Renggli, L., Ducasse, S., Kuhn, A.: Magritte – a Meta-Driven Approach to Empower Developers and End Users. In: Engels, G., Opdyke, B., Schmidt, D.C., Weil, F. (eds.) MODELS 2007. LNCS, vol. 4735, pp. 106–120. Springer, Heidelberg (2007)CrossRefGoogle Scholar
  39. 39.
    Renggli, L., Nierstrasz, O.: Transactional Memory in a Dynamic Language. Journal of Computer Languages, Systems and Structures 35(1), 21–30 (2009)CrossRefGoogle Scholar
  40. 40.
    Röthlisberger, D., Greevy, O., Nierstrasz, O.: Exploiting Runtime Information in the IDE. In: Proceedings of the 16th International Conference on Program Comprehension (ICPC 2008), Los Alamitos, CA, USA, pp. 63–72. IEEE Computer Society (2008)Google Scholar
  41. 41.
    Smith, D.A., Kay, A., Raab, A., Reed, D.P.: Croquet, a Collaboration System Architecture. In: Proceedings of the First Conference on Creating, Connecting and Collaborating through Computing, pp. 2–9 (2003)Google Scholar
  42. 42.
    Strauss, A.: Dynamic Aspects — an AOP Implementation for Squeak. Master’s Thesis, University of Bern (November 2008)Google Scholar
  43. 43.
    Szyperski, C.A.: Component Software. Addison-Wesley, Reading (1998)Google Scholar
  44. 44.
    Verwaest, T., Renggli, L.: Safe Reflection through Polymorphism. In: CASTA 2009: Proceedings of the First International Workshop on Context-Aware Software Technology and Applications, pp. 21–24. ACM, New York (2009)CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2010

Authors and Affiliations

  • Oscar Nierstrasz
    • 1
  • Tudor Gîrba
    • 1
  1. 1.Software Composition GroupUniversity of BernSwitzerland

Personalised recommendations