Skip to main content

Change-driven development for scientific software


Scientific software production dates back to the days before the computer science discipline obtained its own name. Over the past 76 years, scientists have been producing software, which means that most of the modern techniques and software engineering methods available these days did not exist while part of this process was taking place. Change-driven development was born as a new approach to maintain and develop scientific software. Founded on the principles of software essence (changeability, complexity, intangibility, and conformity), integrated development tools, and automated source code transformation. This new, agile approach takes change as a working unit devised to drive the entire development process, which is performed in a four-stage cycle. One of the most interesting approaches to apply change-driven development on scientific software is to update, modernize and even parallelize sequential programs that have been written 20 or 30 years ago and are still running in production environments. This process will be thoroughly described and implemented. Two successful case studies will be presented and analyzed in depth.

This is a preview of subscription content, access via your institution.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9
Fig. 10
Fig. 11
Fig. 12
Fig. 13
Fig. 14
Fig. 15
Fig. 16
Fig. 17
Fig. 18
Fig. 19
Fig. 20
Fig. 21
Fig. 22
Fig. 23


  1. American National Standards Institute and Computer and Business Equipment Manufacturers Association (1992) American National Standard for programming language, FORTRAN—extended: ANSI X3.198-1992: ISO/ IEC 1539: 1991 (E). American National Standards Institute

  2. ANSI FORTRAN. X3. 9-1966. (1966) American National Standards Institute Incorporated, New York, p 40

  3. Arnold RS (1989) Software restructuring. Proc IEEE 77(4):607–617

    Article  MathSciNet  Google Scholar 

  4. Backus J (1978) The history of Fortran I, II, and III. ACM SIGPLAN Not 13(8):165–180

    Article  MathSciNet  Google Scholar 

  5. Baker BS (1977) An algorithm for structuring flowgraphs. J ACM (JACM) 24(1):98–120

    Article  MathSciNet  MATH  Google Scholar 

  6. Balmer DW, Paul RJ (1986) Casm-the right environment for simulation. J Oper Res Soc 37:443–452

    Google Scholar 

  7. Basicevic I, Jovanovic S, Drapsin B, Popovic M, Vrtunski V (2009) An approach to parallelization of legacy software ECBS-EERC ’09 Proceedings of the 2009 First IEEE Eastern European Conference on the Engineering of Computer Based Systems, Novi Sad, Serbia, pp 42–48. ISBN: 978-0-7695-3759-7

  8. Basili VR, Cruzes D, Carver JC, Hochstein LM, Hollingsworth JK, Zelkowitz MV, Shull F (2008) Understanding the high-performance-computing community

  9. Basili VR, Turner AJ (1975) Iterative enhancement: a practical technique for software development. Softw Eng IEEE Trans 4:390–396

    Article  Google Scholar 

  10. Beck K, Beedle M, van Bennekum A, Cockburn A, Cunningham W, Fowler M, Grenning J, Highsmith J, Hunt A, Jeffries R, Jon K, Brian M, Martin RC, Steve M, Ken S, Jeff S (2001) The Agile Manifesto. Technical report, The Agile Alliance

  11. Benington HD (1983) Production of large computer programs. IEEE Ann Hist Comput 5(4):350–361

    Article  Google Scholar 

  12. Boehm BW (1975) The high cost of software. Practical strategies for developing large software systems, pp 3–15

  13. Boehm B (2002) Get ready for agile methods, with care. Computer 35(1):64–69

    Article  Google Scholar 

  14. Booch G (2005) The complexity of programming models. Keynote talk at AOSD, pp 14–18

  15. Brooks FP Jr, Blaauw GA, Buchholz W (1959) Processing data in bits and pieces. IRE Trans Electron Comput 8(2):118–124

    Article  MATH  Google Scholar 

  16. Brooks FP (1987) No silver bullet: essence and accidents of software engineering. IEEE Comput 20(4):10–19

    Article  MathSciNet  Google Scholar 

  17. Burks AW (1980) From ENIAC to the Stored-Program Computer. In: Metropolis N (ed) Two Revolutions in Computers History of Computing in the Twentieth Century, Academic Press, pp 311–344. ISBN: 0124916503

  18. Canning RG (1972) That maintenance iceberg. EDP Anal 10(10):1–14

    Google Scholar 

  19. Carver JC, Kendall RP, Squires SE, Post DE (2007) Software development environments for scientific and engineering software: a series of case studies. In: Software Engineering, 2007. ICSE 2007. 29th International Conference on IEEE, pp 550–559

  20. Carver JC, Hochstein L, Kendall RP, Nakamura T, Zelkowitz MV, Basili VR, Post DE (2006) Observations about software development for high end computing. CTWatch Q 2(4A):33–37

    Google Scholar 

  21. Cheney W, Kincaid D (1985) Numerical mathematics and computing. Cengage Learn

  22. Chen N, Overbey JL (2013) Photran developer’s guide. Part II: specialized topics

  23. Chikofsky EJ, Cross II JH (1990) Reverse engineering and design recovery: a taxonomy. IEEE Softw 7(1):13–17

    Article  Google Scholar 

  24. D’Ambros M (2008) Supporting software evolution analysis with historical dependencies and defect information. In: Software Maintenance, 2008. ICSM 2008. IEEE International Conference on IEEE, pp 412–415

  25. de Balbine G (1975) Better manpower utilization using automatic restructuring. In: Proceedings of the May 19–22, 1975, National Computer Conference and Exposition, AFIPS ’75. ACM, New York, NY, pp 319–327

  26. Dederick LS (1940) The mathematics of exterior ballistic computations. Am Math Mon 47(9):628–634

    Article  MathSciNet  MATH  Google Scholar 

  27. D’Hollander EH, Zhang F, Wang Q (1998) The fortran parallel transformer and its programming environment. Inf Sci 106(3):293–317

    Article  Google Scholar 

  28. Easterbrook SM, Johns TC (2009) Engineering the software for understanding climate change. Comput Sci Eng 11(6):65–74

    Article  Google Scholar 

  29. Eastwood A (1993) Firm fires shots at legacy systems. Comput Can 19(2):17

    Google Scholar 

  30. Edwards PN (2001) A brief history of atmospheric general circulation modeling. Int Geophys 70:67–90

    Article  Google Scholar 

  31. Eigenmann R, Hoeflinger J, Jaxon G, Li Z, Padua D (1991) Restructuring fortran programs for cedar. In: Proceedings of the 1991 International Conference on Parallel Processing, pp 57–66

  32. Erlikh L (2000) Leveraging legacy system dollars for e-business. IT Prof 2(3):17–23

    Article  Google Scholar 

  33. Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: improving the design of existing code. Addison-Wesley, Boston

    Google Scholar 

  34. Gomez JE (1979) An interactive Fortran structuring aid. In: Proceedings of the 4th International Conference on Software Engineering. IEEE Press, pp 241–244

  35. Gorla N (1991) Techniques for application software maintenance. Inf Softw Technol 33(1):65–73

    Article  Google Scholar 

  36. Griswold WG, Notkin D (1993) Automated assistance for program restructuring. ACM Trans Softw Eng Methodol (TOSEM) 2(3):228–269

    Article  Google Scholar 

  37. Hannay JE, MacLeod C, Singer J, Langtangen HP, Pfahl D, Wilson G (2009) How do scientists develop and use scientific software? In: Proceedings of the 2009 ICSE workshop on software engineering for computational science and engineering. IEEE Computer Society, pp 1–8

  38. Horowitz E (1975) Fortran can it be structured-should it be? Computer 8(6):30–37

    Article  Google Scholar 

  39. Huff S (1990) Information systems maintenance. Bus Q 55(1):30–32

    Google Scholar 

  40. IEEE (1999) IEEE Standard for Software Maintenance, IEEE Std., vol 2. IEEE Press, pp 1219–1998

  41. ISO (2006) International Standard—ISO/IEC 14764 IEEE Std 14764-2006. ISO/IEC 14764:2006 (E) IEEE Std 14764-2006 Revision of IEEE Std 1219-1998), pp 1–46

  42. Johnson RE (2010) Software development is program transformation. In: Proceedings of the FSE/SDP workshop on future of software engineering research. ACM, pp 177–180

  43. Karp AH (1987) Programming for parallelism. Computer 20(5):43–57

    Article  Google Scholar 

  44. Kelly DF (2007) A software chasm: software engineering and scientific computing. Softw IEEE 24(6):119–120

    Article  Google Scholar 

  45. Kendall R, Carver JC, Fisher D, Henderson D, Mark A, Post D, Rhoades CE, Squires S (2008) Development of a weather forecasting code: a case study. IEEE Softw 25(4):59–65

    Article  Google Scholar 

  46. Kontogiannis K, Patil P (1999) Evidence driven object identification in procedural code. In: Software Technology and Engineering Practice, 1999. STEP’99. Proceedings, IEEE, pp 12–21

  47. Lammel R, Verhoef C (2001) Cracking the 500-language problem. IEEE Softw 18(6):78–88

    Article  Google Scholar 

  48. Larman C, Basili VR (2003) Iterative and incremental development: a brief history. Computer 36(6):47–56

    Article  Google Scholar 

  49. Lee G, Kruskal CP, Kuck DJ (1985) An empirical study of automatic restructuring of nonnumerical programs for parallel processors. IEEE Trans Comput 100(10):927–933

    Article  Google Scholar 

  50. Lehman MM (1978) Laws of program evolution-rules and tools for programming management

  51. Lehman MM, Ramil JF, Wernick PD, Perry DE, Turski WM (1997) Metrics and laws of software evolution-the nineties view. In: Software metrics symposium, 1997. Proceedings, Fourth International, IEEE, pp 20–32

  52. Lehman MM (1980) On understanding laws, evolution, and conservation in the large-program life cycle. J Syst Softw 1:213–221

    Article  Google Scholar 

  53. Lientz BP, Swanson EB, Tompkins GE (1978) Characteristics of application software maintenance. Commun ACM 21(6):466–471

    Article  Google Scholar 

  54. Lynch P (2008) The origins of computer weather prediction and climate modeling. J Comput Phys 227(7):3431–3444

    Article  MathSciNet  MATH  Google Scholar 

  55. McKee JR (1984) Maintenance as a function of design. In: Proceedings of the July 9–12, 1984, National Computer Conference and Exposition. ACM, pp 187–193

  56. Méndez M (2016) Aplicaciones del cómputo científico: mantenimiento del software heredado. PhD thesis, Facultad de Informática

  57. Méndez M, Overbey J, Garrido A, Tinetti F, Johnson R (2010) A Catalog and two possible classifications of Fortran refactorings. Technical report

  58. Méndez M, Tinetti FG, Overbey JL (2014) Climate models: challenges for fortran development tools. In: Proceedings of the 2nd international workshop on software engineering for high performance computing in computational science and engineering. IEEE Press, pp 6–12

  59. Mens T, Tourwé T (2004) A survey of software refactoring. IEEE Trans Softw Eng 30(2):126–139

    Article  Google Scholar 

  60. Metcalf M (2011) The seven ages of Fortran. J Comput Sci Technol 11(1):1–8

    MathSciNet  Google Scholar 

  61. Moad J (1990) Maintaining the competitive edge. Datamation 36(4):61

    Google Scholar 

  62. Morris C, Segal J (2009) Some challenges facing scientific software developers: the case of molecular biology. In: e-Science, 2009. e-Science’09. Fifth IEEE International Conference on IEEE, pp 216–222

  63. Nicholas C, Overbey JL (2013) Photran developer’s guide. General information, Part I

  64. OpenMP Architecture Review Board (2015) OpenMP application programming interface.

  65. Overbey JL, Negara S, Johnson RE (2009) Refactoring and the evolution of Fortran. In: 2nd International workshop on software engineering for computational science and engineering (SECSE’09)

  66. Overbey JL, Xanthos S, Johnson R, Foote B (2005) Refactorings for Fortran and high-performance computing. In SE-HPCS ’05: Proceedings of the second international workshop on software engineering for high performance computing system applications. ACM, New York, NY, pp 37–39

  67. Overbey JL, Negara S, Johnson RE (2009) Refactoring and the evolution of Fortran. Urbana 51:61801

    Google Scholar 

  68. Overbey J, Rasmussen C (2005) Instant IDEs: supporting new languages in the CDT. In: Proceedings of the 2005 OOPSLA workshop on Eclipse technology exchange. ACM, p 79

  69. Pipitone J, Easterbrook S (2012) Assessing climate model software quality: a defect density analysis of three models. Geosci Model Dev Discuss 5(1):347–382

    Article  Google Scholar 

  70. Polychronopoulos CD (1988) Automatic restructuring of Fortran programs for parallel execution. Springer, NewYork

    Book  Google Scholar 

  71. Port O et al (1988) The software trap-automate or else. Bus Week 3051(9):142–154

    Google Scholar 

  72. Ricardo M, Braunschweig F, Leitao P, Neves R, Martins F, Santos A (2000) Mohid 2000, a coastal integrated object oriented model. Hydraulic engineering software VIII. WIT Press, Southampton

    Google Scholar 

  73. Riggs R (1969) Computer systems maintenance. Datamation 15(11):227

    Google Scholar 

  74. Rope C (2007) Eniac as a stored-program computer: a new look at the old records. IEEE Ann Hist Comput 29(4):82–87

    Article  Google Scholar 

  75. Sammet JE, Garfunkel J (1985) Summary of changes in Cobol, 1960–1985. Ann Hist Comput 7(4):342–347

    Article  Google Scholar 

  76. Schmidberger M, Brugge B (2012) Need of software engineering methods for high performance computing applications. In: Parallel and distributed computing (ISPDC), 2012 11th international symposium on IEEE, pp 40–46

  77. Seacord RC, Plakosh D, Lewis GA (2003) Modernizing legacy systems: software technologies, engineering process and business practices. Addison-Wesley Longman Publishing Co., Inc., Boston, MA

    Google Scholar 

  78. Segal J (2008) Models of scientific software development. In: SECSE 08, first international workshop on software engineering in computational science and engineering, Leipzig

  79. Segal J (2008) Scientists and software engineers: a tale of two cultures. In: Proceedings of the psychology of programming interest group, PPIG 08, pp 10–12

  80. Segal J (2009) Some challenges facing software engineers developing software for scientists. In: 2nd International software engineering for computational scientists and engineers workshop (SECSE ’09), ICSE 2009 Workshop, Vancouver, pp 9–14

  81. Shaw M et al (2004) National Research Council Computer Science: Reflections on the Field, Reflections from the Field National Academies Press. ISBN-10:0309093015

  82. Swanson EB (1976) The dimensions of maintenance. In: Proceedings of the 2nd International Conference on Software Engineering, IEEE. Computer Society Press, pp 492–497

  83. Tinetti FG, Méndez M (2012) Fortran legacy software: source code update and possible parallelisation issues. In: ACM SIGPLAN Fortran Forum, vol 31. ACM, pp 5–22

  84. Tinetti FG, Méndez M, Giusti AD (2013) Restructuring fortran legacy applications for parallel computing in multiprocessors. J Supercomput 64(2):638–659

    Article  Google Scholar 

  85. Triolet R, Feautrier P, Irigoin F (1986) Automatic parallelization of fortran programs in the presence of procedure calls. In: ESOP 86, Springer, pp 210–222

  86. Tukey JW (1958) The teaching of concrete mathematics. Am Math Mon 65(1):1–9

    Article  MathSciNet  MATH  Google Scholar 

  87. von Neumann J (1947) Chapter 2: The Point Source Solution. Wave B, Bethe HA, Fuchs K, Hirschfelder JO, Magee JL, Peierls RE, von Neumann J (eds) Los Alamos Scientific laboratory Report LA-2000

  88. Ware MP, Wilkie FG, Shapcott M (2007) The application of product measures in directing software maintenance activity. J Softw Maint Evol Res Pract 19(2):133–154

    Article  Google Scholar 

  89. Wilson GV (2006) Where’s the real bottleneck in scientific computing? Am Sci 94(1):5

    Article  Google Scholar 

  90. Zelkowitz MV, Shaw AC, Gannon JD (1979) Principles of Software Engineering and Design Prentice Hall Professional Technical Reference. ISBN:013710202X

Download references

Author information

Authors and Affiliations


Corresponding author

Correspondence to Fernando G. Tinetti.

Rights and permissions

Reprints and Permissions

About this article

Verify currency and authenticity via CrossMark

Cite this article

Méndez, M., Tinetti, F.G. Change-driven development for scientific software. J Supercomput 73, 2229–2257 (2017).

Download citation

  • Published:

  • Issue Date:

  • DOI:


  • Change-driven development
  • Scientific programming
  • High performance computing