Skip to main content

Writing Code for Scientific Software

  • Chapter
  • First Online:
Applied Computer Science for GGOS Observatories

Abstract

Modern science and research is unimaginable without the use of self-written and in most cases highly specialized software. By analyzing data, simulating model-related items, or simply dealing with different data sets using different formats, computer programs help the researcher to do his daily work. But even though software and its development is an essential part of scientific life, its ranking within the world of science is normally very low.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 54.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    An explanation of electronic computer hardware, which can be programmed to process data, can be found in 7 Sect. 4.2.1 about the John von Neumann architecture.

  2. 2.

    For more about modularization with an explanation of modules and components, see 7 Sect. 3.1.

  3. 3.

    In a classic view, functions have some input parameters and a return value. Procedures or subroutines only have parameters and separate the code into logic parts.

  4. 4.

    More about the life cycle of computer programs and their development of different versions can be found in 7 Sect. 2.9 about agile development and also in 7 Sect. 2.7.1 about version control.

  5. 5.

    Large, expensive, failing projects are often named «death-march projects» which nobody can stop anymore, but which it is clear will end in disaster.

  6. 6.

    FURPS was proposed by Robert Grady and Hewlett-Packard Co. and stands for Functionality, Usability, Reliability, Performance, and Supportability (Vigenschow 2005, l.c. page 47 f.).

  7. 7.

    The Standish Group defines all projects with less than one million dollar labor costs as «small projects» (or in the case of the European Union with less than 250,000 Euro labor costs) (The Standish Group n.d. l.c. page 13 ff.).

  8. 8.

    The importance of the factors is in descending order.

  9. 9.

    The number of releases can be visualized with a «heat map» over the source files, where code sequences, which are often changed, are colorized with red and others with less changes get gradually darker colors.

  10. 10.

    Macros are replacements in the code, which a preprocessor substitutes with real, final code elements. Therefore, macros are often used for constants or fast, but short code sections, which appear regularly in the source code.

  11. 11.

    Regular expressions are strings which define the patterns for a search criterion to be found in other strings by pattern matching (Brown 2001, l.c. page 231).

  12. 12.

    Call-by-reference is a method which uses the real addresses of the arguments of functions, so that internal changes are directly visible outside. Call-by-reference is used to return values from functions besides the regular return argument. The opposite to call-by-reference is call-by-value, which creates a local copy of the external argument, so that changes are just local.

  13. 13.

    Programming paradigms are general classifications of programming languages into specific categories defined by the structure and elements used in the computer programs.

  14. 14.

    With a small change in the present version so that the global variables are from type «int» to also enable the compilation under Microsoft® Windows™, according to the further program author notes for PC users.

  15. 15.

    Reproduced by permission of International Obfuscated C Code Contest, 7 www.ioccc.org.

  16. 16.

    Some general hints can also be taken from the Microsoft® Design Guidelines for Class Library Developers. NET Framework 1.1 (MSDN Microsoft n.d.).

  17. 17.

    When searching the Internet, the style type can be found under the following denotations: Allman style, «East Coast» style, BSD style, ANSI C style, or also Horstmann style.

  18. 18.

    A very famous type conversion error with catastrophic consequences happened during the launch of the ARIANE 5 rocket of the European Space Agency (ESA), which exploded during its maiden flight. The official report from the inquiry board about the «Flight 501 Failure» on July 19, 1996, describes it like this: «The inertial SRI [= Inertial Reference System] software exception was caused during execution of a data conversion from 64-bit floating point to 16-bit signed integer value. The floating point number which was converted had a value greater than what could be represented by a 16-bit signed integer. This resulted in an Operand Error. The data conversion instructions (in Ada code) were not protected from causing an Operand Error, although other conversions of comparable variables in the same place in the code were protected» (ESA n.d. l.c. page 4).

  19. 19.

    The program memory can simply be separated into stack memory, which is allocated together with the memory for the program code when starting the program and heap memory, which is dynamically allocated during the runtime of the program, each time it is required.

  20. 20.

    Not all 32-bit platforms support «long double».

  21. 21.

    Also the maximum number of file pointers is different, but this is not so relevant for programmers, if they cleanly close opened file pointers after use.

  22. 22.

    «A shallow copy means that any reference-type data members in the [... copy] will refer to the same object as the equivalent reference-type data members in the original object. A deep copy means that [...] the entire object graph [... is copied] so that the reference-type data members of the [... copy] refer to physically independent copies (clones) [...]» (Jones and Freeman 2010, l.c. page 627).

  23. 23.

    The code is based on a solution, suggested by (Werner n.d. l.c. page 249 ff.) but is extended with substantial modifications.

  24. 24.

    The situation is different if a complete package is developed with an external framework, such as a framework for graphical user interfaces. Then the code in question is directly related to that code with all its advantages and disadvantages. But then it makes no sense to write converter.

  25. 25.

    A singleton pattern is a classic OOP design pattern, which uses an improved global variable to prevent the creation of a secondary object of the same type, so that there is always only one instance of the class available in an application (Alexandrescu 2003, l.c. page 181).

  26. 26.

    Here the programming language Perl has a big advantage, as it is possible to directly embed a Perl interpreter into C code (see 7 Sect. 2.2).

  27. 27.

    Information is the content and the meaning (semantics) of a message in textual, graphical, or audio-visual form. Ideally, information is free from irrelevant, redundant parts and transmits knowledge about functionality, functioning, principles of operation, methods, techniques, applications, flows and activities (ITWissen n.d.).

  28. 28.

    Call-graphs are graphical presentations which show the structure how functions call each other in a program. These calls are usually not ordered according to the calling time of each function. They just show the interactions between the functions of a program. Ordered graphs are the sequence charts of UML.

  29. 29.

    For the following, see the web pages of (van Heesch n.d.).

  30. 30.

    Meta-information is additional information about given data to improve its comprehensibility and shareability for users (Kretzschmar and Dreyer 2004, l.c. page 83).

  31. 31.

    By the way, all asterisks, comment delimiters, etc., do not appear in the final documentation.

  32. 32.

    But the included images should already have the correct output size.

  33. 33.

    A LaTeX compiler reads the LaTeX sources and usually generates a DVI file, which then must be converted into a PostScript file. PostScript is a description language for the style of a document, including the content, which can be interpreted, for example, by the GhostScript interpreter. Most printers also directly understand PostScript.

  34. 34.

    URL is a standardized nomenclature to reference and locate Web and network resources.

  35. 35.

    A Wiki is a hypertext web system to offer, find, change, and discuss different topics in a fast way. The idea is to offer a simple, browser-based opportunity to read and edit text.

  36. 36.

    A revision is a change in the document. A release is a finished version in a frozen state, which is named and delivered to the target group.

  37. 37.

    Errors are program states which cause a fault resulting in a failure of the program logic within a dedicated runtime environment (Spillner et al. 2011, l.c. page 4). They can be caused by internally wrong code sequences or by unexpected interactions from external sources.

  38. 38.

    A Kiviat graph is a multi-vector line graph which shows how multiple variables interrelate.

  39. 39.

    The source code at the Geodetic Observatory Wettzell is beautified using the following options: astyle –style=ansi -S -w -Y -p -C -c -N <source-code-file>, where «–style=ansi» sets the scope parenthesis style to Allman/ANSI style, «-S» defines the «switch» indent style, «-w» defines the preprocessor indent style, «-Y» defines the scope closing style, «-p» defines the operators space padding style, «-C» defines the «class»/»struct» indent style, «-c» defines the conversion of tabs into blanks, and «-N» defines changes in the original file (for more information, see (Davidson and Pattee n.d.)).

  40. 40.

    Verification checks if the specified functionality is reached, while validation checks if the results are correct.

  41. 41.

    For the simple Example 2.3, it would be possible, as the chessboard is limited to 99x99 positions, but it does not make sense, as there will not be new information about the quality of the functionality by doing this.

  42. 42.

    In OOP environments, it is necessary to classify local parameters and methods with «protected» access rights, so that the derived test class can access them. In the structured programming environments, as given with C, it might be necessary to work with «extern» declarations in the test main module if functions are not accessible via the header files.

  43. 43.

    The importance of such automated quality tests in fields found in the Geodetic Observatory Wettzell was regularly shown by a colleague, Martin Ettl. Untiringly he developed his own compact unit testing framework, which improved the quality of all the projects tremendously. The resulting Wettzell Unit Test Suite adapted structures and ideas from the test suite used by «Cppcheck» (see 7 Sect. 2.6.3) and extended them. Therefore special thanks should be given to him for that work at this point here!

  44. 44.

    Cron jobs are timed processes, started by the operating system and defined in a «crontab»-file.

  45. 45.

    An audit is an interactive, quality checking discourse to verify the implementation and conformance of a development to guidelines and specified functionalities.

  46. 46.

    A technical review verifies the compliance to specifications and guidelines according to a defined protocol together with experts with long experience in the field of work. Technical problems should be found and solved. Discussion is very welcome. Informal reviews are similar but reduced in complexity and time or personnel costs. They are usually just a discussion between developers (Spillner et al. 2011, l.c. page 163 f.).

  47. 47.

    Regular expressions are strings which define the patterns for a search criterion to be found in other strings by pattern matching (Brown 2001, l.c. page 231).

  48. 48.

    In a multi-processing environment, a reentrant function can be interrupted by a hardware interrupt while processing and safely restarted again without any change in its behavior.

  49. 49.

    Operating systems are a software abstraction level above the hardware to administrate resources, such as the memory, file systems, or input/output devices. They offer interfaces and services via system calls (functions from an operating system library (Tanenbaum 1995, l.c. page 22 f.)) to operate and share devices, manage users, do networking, and handle parallel tasks (Tanenbaum 1995, l.c. page 5 ff.).

  50. 50.

    Non-preemptive scheduling, run-to-completion, or cooperative methods allow the process to run until it ends or until it returns the resources by choice.

  51. 51.

    Real-time systems have hard time constraints with hardware restrictions especially in the controller segment, so that a specific task must be processed within a specified delay time or must start precisely at a specified start time after an interrupt. Violations are unacceptable errors (Vigenschow 2005, l.c. page 221 ff.). Several operating system extensions for different operating systems are available, which add a real-time scheduling to a standard operating system (Langmann 2010, l.c. page 284 ff.). One representative of such extensions for Linux operating systems is Real-Time Application Interface (RTAI), which enables the writing of applications with strict timing constraints (see (RTAI Team 2010)).

  52. 52.

    Starvation is an infinite waiting of one thread or process to get access to a critical section. Deadlocks block the whole system, for example, if two processes wait for each other, so that the blockage cannot be changed by the system itself anymore (Vigenschow 2005, l.c. page 85 f.).

  53. 53.

    Originally such charts were designed by H. L. Gantt in 1919 to evaluate the performance of industrial plants (Klar 1995, l.c. page 135 f.).

  54. 54.

    In a race condition, the timing and therefore the time order of single instructions defines the result of an algorithm.

  55. 55.

    Message passing is a communication between threads, using messages over a communication network.

  56. 56.

    Automatic parallelization splits the program into parallel processable parts during compilation.

  57. 57.

    Transactions are communications which are processed completely or not at all if there is an error.

  58. 58.

    Cache buffers are copies of recently used memory blocks in the memory and administrated by the operating system to optimize the access performance, such as reducing the number of hard drive accesses (Tanenbaum 1995, l.c. page 382).

  59. 59.

    Swapping is a technique used by the operating system to swap memory blocks to the background memory (e.g., hard drive space) if not enough main memory is available. If swapping starts, the processing times increase, as hard drive accesses are much slower than main memory accesses (Tanenbaum 1995, l.c. page 372 f.).

  60. 60.

    See 7 Sect. 2.1 about the definition of a software project and 7 Sect. 2.1 about the description of software systems.

  61. 61.

    A complete software project in this field is a complete software system with all the necessary parts, like program files, configuration files, documentations, and so on, plus structural mechanisms to represent and organize the project life cycles.

  62. 62.

    For more about modularization with an explanation of modules, see 7 Sect. 3.1.

  63. 63.

    Symbolic links are references to other files in the file system.

  64. 64.

    Git was originally designed by Linus Torvalds to support the development of the Linux operating system kernel (Loeliger 2010, l.c. page 1).

  65. 65.

    Copying with the Subversion® command does not destroy the historical information, e.g., about the revision changes in the past.

  66. 66.

    UTC is the coordinated universal time based on atomic standards and corrected with leap seconds according to the Earth’s rotation parameters.

  67. 67.

    <file.ext.> must be replaced by the real filename for which the property should be enabled.

  68. 68.

    See 7 Sect. 3.3.2 about the definition of distributed systems.

  69. 69.

    Hash functions are methods, for example, to calculate an addresses information from the content of a string to get a direct reference and therefore a direct access to the position, where the string data are stored. The problem is, that mapping is not unique. The memory where data can be stored is limited so that an infinite number of possible contents must be mapped to a finite set of addresses. Thus, this first hash function can lead to conflicts as reference calculations of several contents result in the same address. It needs an additional exception function to solve the conflict by finding another reference with a reversible and reproducible method. A good and secure first hash function reduces the number of conflicts to a minimum.

  70. 70.

    Virtualization is a technique to emulate a physical hardware virtually. It is used to run several «virtual», emulated machines with their own operating systems on real hardware with a specially prepared, virtualization operating system or in a special player. Each virtual machine looks like a real machine for the users of the virtual machine.

  71. 71.

    A «hypervisor» is a virtual machine monitor, which runs on a guest system and offers everything for a virtual machine.

  72. 72.

    Deployment of the software means handing the release out to the customer or user.

  73. 73.

    A suitable classification consists of a major release number and a sub-release number, for example, in the form of «Ver1.56», where 1 is the major release number and 56 is the sub-release identifier. In this sense, major releases realize completely new features, while sub-releases are more or less bug-fixed versions.

  74. 74.

    Currently the service exists as a free «e-Service» of the «e-Control Software» environment on the web page 7 http://www.econtrol-software.de. Each project has its own user rights and credentials.

  75. 75.

    All web pages were available on December 16, 2015.

  76. 76.

    Sequential, top-down- or waterfall-models organize the project as a strict sequence of the activities: requirement analysis, design, coding/implementation, test, system integration, deployment, and operation with maintenance (adapted from (Leffingwell and Widrig 2003, l.c. page 24 f.)). Steps to backward activities are not allowed or restricted to avoid development delaying cycles.

  77. 77.

    The V-model is another sequential development process which aligns verification and validation activities to a similar development chain as in a classic waterfall model. If the tests fail, restricted steps backwards are allowed for fixing bugs. The graphical representation of the activities looks like a big «V» (adapted from (Spillner et al. 2011, l.c. page 33 f.)).

  78. 78.

    The W-model is a more detailed V-model which accentuates the affiliation of the different development phase to adequate test cases, each with a test preparation, test execution, and debugging. Therefore the graphical representation looks like a big «W». Cycles are included, because of the debugging and test case specifications. They are planned early and parallel to the development documents. But the model is in principle just a sequential process with some cycles.

  79. 79.

    The projects in a spiral model start with a series of risk-driven prototypes, followed by a waterfall-like process for the actual product development. Therefore the spiral model starts with a better requirements planning and concept validation at the beginning. The problem is the consumption of time at the beginning and before the final development (Leffingwell and Widrig 2003, l.c. page 26 ff.). But after finalization of the pretests, a usual top-down model starts.

  80. 80.

    The graphs over time for each discipline demonstrate the expenditure of time for that individual workflow according to the iterations in the project phases. Documentation is officially not part of the Unified Software Development Process and was extended to draw attention to continuously developing software documentation.

  81. 81.

    User stories are very short, textual descriptions of requirements, user interactions, and software features. They are organized with cards, where each card holds one story (Wolf and Bleek 2011, l.c. page 39 f.).

  82. 82.

    Software engineering defines «use cases» as a list of action items, describing the interaction of a specific user and the used software or program as a software scenario to achieve a specific goal with the software (Fowler and Scott 2000, l.c. page 36).

  83. 83.

    Risk in scientific projects is different to industrial. While industrial projects must result in a specific, salable product, the gain in knowledge and insight is the prior goal in science.

References

  • Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D.: Compilerbau. Teil 1, Addison-Wesley (Deutschland) GmbH, 1997. (Original title: COMPILERS. Principles, Techniques and Tools. Bell Telephone Laboratories, Inc., 1986).

    Google Scholar 

  • Alexandrescu, Andrei: Modernes C++ Design. Generische Programmierung und Entwurfsmuster angewendet. mitp-Verlag Bonn 2003. (Original title: Modern C++ Design: Generic Programming and Design Patterns Applied. Pearson Education, Inc., Addison Wesley Professional 2001).

    Google Scholar 

  • Allan, Peter M.; Chipperfield, Alan J.; Warren-Smith, R. F.; Draper, Peter W.: CNF and F77. Mixed Language Programming – FORTRAN and C. Version 4.3, Starlink User Note 209.10, CCLRC/Rutherford Appleton Laboratory 2008. http://star-www.rl.ac.uk/star/docs/sun209.ps, Download 2011-07-29.

  • Barker, Thomas T.: Writing Software Documentation. A Task-Oriented Approach. Second Edition, Pearson Education, Inc. 2003.

    Google Scholar 

  • Bauer, Sebastian: Eclipse für C/C++-Programmierer. Handbuch zu den Eclipse C/C++ Development Tools (CDT). 2. Auflage. dpunkt.verlag GmbH 2011.

    Google Scholar 

  • Beck, Kent; Beedle, Mike; van Bennekum, Arie; Cockburn, Alistair; Cunningham, Ward; Fowler, Martin; Grenning, James; Highsmith, Jim; Hunt, Andrew; Jeffries, Ron; Kern, Jon; Marick, Brian; Martin, Robert C.; Mellor, Steve; Schwaber, Ken; Sutherland, Jeff; Thomas, Dave: Manifesto for Agile Software Development. http://www.agilemanifesto.org/ 2001, Download 2011-12-08.

  • Beebe, Nelson H. F.: Using C and C++ with Fortran. Department of Mathematics, University of Utah 2001. http://www.math.utah.edu/software/c-with-fortran.html, Download 2011-07-30.

  • Bernese.: Bernese GPS Software. http://www.bernese.unibe.ch/, Download 2011-06-18.

  • Brown, Martin C.: Perl: The Complete Reference. Second Edition. Osborne/McGraw-Hill Companies Berkeley 2001.

    Google Scholar 

  • Clang team.: clang: a C language family frontend for LLVM. http://clang.llvm.org/, Download 2013-01-09.

  • Clark, Mike: Projekt-Automatisierung. Pragmatisch Programmieren. Carl Hanser Verlag München Wien 2006. (Original title: Pragmatic Project Automation. How to Build, Deploy, and Monitor Java Applications. The Pragmatic Programmers, LLC. 2004).

    Google Scholar 

  • Cousot, Patrick: Abstract Interpretation. In: ACM Computing Surveys, Vol. 28, No. 2, June 1996., http://cs.nyu.edu/pcousot/publications.www/Cousot-ACM-Computing-Surveys-v28-n2-p324-328-1996.pdf, Download 2012-06-07.

  • Cppcheck.: Cppcheck. A tool for static C/C++ code analysis. http://cppcheck.sourceforge.net/, Download 2012-06-07.

  • Cppcheck.: Cppcheck 1.55. Manual. http://cppcheck.sourceforge.net/manual.pdf, Download 2012-06-07.

  • CppUnit.: CppUnit. Main Page. Welcome! to CppUnit Wiki. http://sourceforge.net/apps/mediawiki/cppunit/index.php?title=Main_Page, Download 2012-06-06.

  • Crowther, Mark.: Software Test Metrics. Key metrics and measures for use within the test function. Discussion document. http://www.cyreath.co.uk/papers/Cyreath_Software_Test_Metrics.pdf, Download 2011-07-30.

  • Dassing, Reiner; Lauber, Pierre; Neidhardt, Alexander: Design-Rules für die strukturierte Programmierung unter C und die objektorientierte Programmierung unter C++. Revision 28.02.2008, Geodtätisches Observatorium Wettzell, 2008.

    Google Scholar 

  • Davidson, Tal; Pattee, Jim.: Artistic Style 2.02. A Free, Fast and Small Automatic Formatter for C, C++, C#, and Java Source Code. http://astyle.sourceforge.net/ and http://astyle.sourceforge.net/astyle.html, Download 2012-07-16.

  • Dawes, Beman; Abrahams, David.: Boost C++ Libraries. http://www.boost.org/, Download 2011-06-03.

  • Deutsche Forschungsgemeinschaft Gesch"aftsstelle (DFG): Proposals for Safeguarding Good Scientific Practice. Recommendations of the Commission on Professional Self Regulation in Science. Wiley-VCH Verlag GmbH Weinheim 1998., http://www.dfg.de/download/pdf/dfg_im_profil/reden_stellungnahmen/download/empfehlung_wiss_praxis_0198.pdf, Download 2011-12-08.

  • DESCA.: DESCA 2020 Model Consortium Agreement. NEW: DESCA 2020 version 1.2, February 2016. http://www.desca-2020.eu/, February 2016, Download 2016-03-11.

  • Dominguez, Jorge.: The Curious Case of the CHAOS Report 2009. http://www.projectsmart.co.uk/the-curious-case-of-the-chaos-report-2009.html, Download 2011-06-09.

  • Duvall, Paul M.; Matyas, Steve; Glover, Andrew: Continuous Integration. Improving software quality and reducing risk. Sixth printing. Rearson Education, Inc. 2011.

    Google Scholar 

  • Eclipse Foundation., The: Eclipse Open Source Developer Report. http://www.slideshare.net/IanSkerrett/eclipse-survey-2012-report-final, Download 2012-07-17.

  • ESA.: ARIANE 5. Flight 501 Failure. Report by the Inquiry Board. ESA, http://esamultimedia.esa.int/docs/esa-x-1819eng.pdf, Download 2012-01-02.

  • Favre-Bulle, Bernard: Automatisierung komplexer Industrieprozesse. Systeme, Verfahren und Informationsmanagement. Springer-Verlag/Wien 2004.

    Google Scholar 

  • Feathers, Michael C.: Effektives Arbeiten mit Legacy Code. Refactoring und Testen bestehender Software. mitp, Verlagsgruppe Hüthig Jehle Rehm GmbH 2011. (Original title: Working Effectively with Legacy Code. Feathers, M., Pearson Education, Inc., Prentice Hall PTR 2005).

    Google Scholar 

  • Feldman, S. I.; Gay, David M.; Maimone, Mark W.; Schryer, N. L.: A Fortran to C Converter. Computing Science Technical Report No. 149, AT&T Bell Laboratories 1995., http://www.netlib.org/f2c/f2c.pdf, Download 2011-07-29.

  • Forbig, Peter; Kerner, Immo O.: Softwareentwicklung. Lehr- und Ãœbungsbuch. Fachbuchverlag Leipzig 2004.

    Google Scholar 

  • Fowler, Martin; Scott, Kendall: UML konzentriert. Eine strukturierte Einführung in die Standard-Objektmodellierungssprache. 2. Auflage. Addison-Wesley Verlag, Pearson Education Deutschland GmbH 2000. (Original title: UML Distilled. Second Edition. A brief guide to the standard object modelling language. Addison-Wesley).

    Google Scholar 

  • Springer Gabler Verlag (Herausgeber).: Gabler Wirtschaftslexikon. Keyword: Projekt. Springer Gabler. Springer Fachmedien Wiesbaden GmbH, http://wirtschaftslexikon.gabler.de/Archiv/13507/projekt-v7.html, Download 2015-09-11.

  • GCC team.: GCC, the GNU Compiler Collection. Free Software Foundation, Inc.. http://gcc.gnu.org/, Download 2012-06-05.

  • GDB team.: GDB: The GNU Project Debugger. Free Software Foundation, Inc.. http://sources.redhat.com/gdb/, Download 2012-06-11.

  • Gierhardt, Horst.: Informatik in der Oberstufe. Informatik in der 12 mit Java. Acht-Damen-Problem. http://www.gierhardt.de/informatik/info12/Damen.pdf, Download 2011-06-28.

  • GNU.: The GNU Fortran Compiler. http://gcc.gnu.org/onlinedocs/gfortran/index.html#Top, Download 2011-06-18.

  • GNU.: GNU Operating System. GNU Make. Free Software Foundation, Inc. http://www.gnu.org/software/make/, Download 2012-06-05.

  • Gutiérrez-Naranjo, Miguel A.; Martínez-del-Amor, Miguel A.; Pérez-Hurtado, Ignacio; Pérez-Jiménez, Mario J.: Solving the N-Queens Puzzle with P Systems. http://www.gcn.us.es/7BWMC/volume/21_queens.pdf, University of Sevilla, Download 2011-06-28.

  • Graphviz.: Graphviz – Graph Visualization Software. http://www.graphviz.org/, Download 2012-01-16.

  • van Heesch, Dimitri.: Doxygen Documentation. Generate documentation from source code. http://www.stack.nl/dimitri/doxygen/, Download 2011-12-08.

  • Helmke, Hartmut; Höppner, Frank; Isernhagen, Rolf: Einführung in die Software-Entwicklung. Vom Programmieren zur erfolgreichen Software-Projektarbeit. Am Beispiel von Java und C++. Carl Hanser Verlag München 2007.

    Google Scholar 

  • Ippolito, Greg: Using C/C++ and Fortran together:. YoLinux.com Tutorial, YoLinux.com: Linux Information Portal 2008 http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html, Download 2011-07-30.

  • ITWissen.: Information. ITWissen. Das große Online-Lexikon für Informationstechnologie. http://www.itwissen.info/definition/lexikon/Information-information.html, Download 2011-11-25.

  • Jones, Allen; Freeman, Adam: Visual C# 2010 Recipies. A Problem-Solution Approach. apres Springer-Verlag New York, Inc. 2010.

    Google Scholar 

  • Jet Propulsion Laboratory.: JPL Institutional Coding Standard for the C Programming Language. Jet Propulsion Laboratory. California Institute of Technology 2009. http://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf, Download 2012-11-25.

  • Kan, Stephen H.: Metrics and models in software quality engineering. Second Edition. Pearson Education, Inc. 2003.

    Google Scholar 

  • Linux Kernel Organization, Inc..: The Linux Kernel Archives. http://kernel.org/, Download 2011-06-18.

  • Kernighan, Brian W.; Ritchie, Dennis M.: Programmieren in C. Mit dem C-Reference Manual in deutscher Sprache. 2. Ausg., ANSI-C, Carl Hanser Verlag München Wien 1990. (Original title: The C Programming Language. Second Edition. ANSI-C. Bell Telephone Laboratories, Inc., Prentice-Hall International Inc. London 1990).

    Google Scholar 

  • Klar, Rainer: Messung und Modellierung paralleler und verteilter Rechensysteme. B. G. Teubner Stuttgart 1995.

    Google Scholar 

  • Kretschmar, O.; Dreyer, R.: Mediendatenbank- und Medien-Logistik-Systeme. Anforderungen und praktischer Einsatz. Oldenbourg Wissenschaftsverlag GmbH 2004.

    Google Scholar 

  • Langmann, Reinhard: Taschenbuch der Automatisierung. Carl Hanser Verlag Leipzig 2010

    Google Scholar 

  • LangPop.com.: Programming Language Popularity. http://langpop.com/, Download 2011-06-18.

  • Leffingwell, Dean; Widrig, Don: Managing Software Requirements: A Use Case Approach. Pearson Education, Inc. 2003.

    Google Scholar 

  • Lévénez, Éric.: Computer Languages History. http://www.levenez.com/lang/, Download 2011-06-19.

  • Linux Foundation, The.: API Sanity Checker. LSB Infrastructure Program. The Linux Foundation. http://ispras.linuxbase.org/index.php/API_Sanity_Checker, Download 2012-11-25.

  • Lockheed Martin Corporation: JOINT STRIKE FIGHTER AIR VEHICLE C++ CODING STANDARDS FOR THE SYSTEM DEVELOPMENT AND DEMONSTRATION PROGRAM. Document Number 2RDU00001 Rev C. Lockheed Martin Corporation, Dec. 2005., http://www2.research.att.com/bs/JSF-AV-rules.pdf, Download 2011-06-28.

  • Loeliger, Jon: Versionskontrolle mit Git. O’Reilly Verlag Köln 2010. (Original title: Version Control with Git. O’Reilly Media, Inc. 2009).

    Google Scholar 

  • Lovell, Jim; et al.: AuScope VLBI Operations Wiki. http://auscope.phys.utas.edu.au/opswiki/doku.php, Download 2012-01-20.

  • Maguire, Steve: Writing solid code. Microsoft’s Techniques for Developing Bug-Free C Programs. Microsoft Press Redmond, Washington (USA) 1993.

    Google Scholar 

  • Marjamäki.: Writing Cppcheck rules. Part 1 – Getting started. http://heanet.dl.sourceforge.net/project/cppcheck/Articles/writing-rules-1.pdf, Download 2012-06-07.

  • The MathWorks, Inc.: PolySpace for Code Verification. Training Course Notebook. The MathWorks, Inc. 2010.

    Google Scholar 

  • MISRA (The Motor Industry Software Reliability Association): MISRA-C:2004. Guidlines for the use of the C language in critical systems. MIRA Limited Warwickshire (UK) 2004.

    Google Scholar 

  • MISRA (The Motor Industry Software Reliability Association): MISRA C++:2008. Guidlines for the use of the C++ language in critical systems. MIRA Limited Warwickshire (UK) 2008.

    Google Scholar 

  • MSDN Microsoft.: Design Guidelines for Class Library Developers. .NET Framework 1.1. http://msdn.microsoft.com/en-us/library/czefa0ke%28vs.71%29.aspx, Download 2011-11-18.

  • Neidhardt, Alexander: Verbesserung des Datenmanagements in inhomogenen Rechnernetzen geodätischer Messeinrichtungen auf der Basis von Middleware und Dateisystemen am Beispiel der Fundamentalstation Wettzell. Mitteilungen des Bundesamtes für Kartographie und Geodäsie. Band 37. Verlag des Bundesamtes für Kartographie und Geodäsie Frankfurt am Main 2005.

    Google Scholar 

  • Neumann, Thomas.: bcov. http://bcov.sourceforge.net/, Download 2012-06-06.

  • Oestereich, Bernd: Analyse und Design mit UML 2. Objektorientierte Softwareentwicklung. 7. Ausgabe, Oldenbourg Wissenschaftsverlag GmbH München 2005.

    Google Scholar 

  • Oracle Sun Developer Network (SDN): Standard Library, STL and Thread Safety. SDN April 2000., http://developers.sun.com/solaris/articles/stl-new.html, Download 2011-11-24.

  • Osherove, Roy: The Art of Unit Testing. Deutsche Ausgabe. mitp, Verlagsgruppe Hüthig Jehle Rehm GmbH München 2010. (Original title: The Art of Unit Testing with Examples in .NET. Manning Publications Co., Greenwich, Connecticut 2009).

    Google Scholar 

  • Osovlanski, Doron; Nissenbaum, Baruch: baruch.c. baruch.hint. In: Noll, Landon Curt; Cooper, Simon; Seebach, Peter; Broukhis, Leonid A.: The International Obfuscated C Code Contest. Winning entries. 1990. 7th International Obfuscated C Code Contest. 2003., http://www.de.ioccc.org/years.html#1990, Download 2011-08-04.

  • Pilato, C. Michael ; Collins-Sussman, Ben; Fitzpatrick, Brian W.: Versionskontrolle mit Subversion. Software-Projekte intelligent koordinieren. 3. Auflage. O’Reilly Verlag GmbH & Co. KG Köln 2009. (Original title: Version Control with Subversion. The Standard in Open Source Version Control. Second Edition. O’Reilly Media, Inc. Sebastopol 2008).

    Google Scholar 

  • Precht, Manfred; Meier, Nikolaus; Kleinlein, Joachim: EDV-Gundwissen. Eine Einführung in Theorie und Praxis der modenen EDV. 2. Auflage. Addison-Wesley (Deutschland) GmbH 1994.

    Google Scholar 

  • Press, William H.; Teukolsky, Saul A.; Vetterling, William T.; Flannery, Brian P.: Numerical Recipes in C++. The Art of Scientific Computing. Second Edition, Cambridge University Press New York 2005.

    Google Scholar 

  • Rawashdeh, Adnan; Matalkah, Bassem: A New Software Quality Model for Evaluating COTS Components. In: Journal of Computer Science 2 (4), pp 373–381, ISSN 1549–3636, 2006.

    Google Scholar 

  • Rembold, Ulrich (ed.); Blume, Christian; Epple, Wolfgang; Hagemann, Manfred; Levi, Paul: Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Carl Hanser Verlag München Wien 1991.

    Google Scholar 

  • Ristanovic CASE.: Software Metrics. Software Metrics Parameters. http://www.ristancase.com/html/dac/manual/2.12.01%20Software%20Metrics%20Parameters.html, Download 2012-07-02.

  • RTAI Team: RTAI – the RealTime Application Interface for Linux from DIAPM. RTAI – Real Time Application Interface Official Website. Politecnico di Milano – Dipartimento di Ingegneria Aerospaziale 2010. https://www.rtai.org/, Download 2012-11-25.

  • Rüping, Andreas: Agile Documentation. A Pattern Guide to Producing Lightweight Documents for Software Projects. John Wiley & Sons Ltd. The Atrium Chichester UK 2003.

    Google Scholar 

  • Schildt, Herbert: C++: The Complete Reference. Third Edition. Osborne/McGraw-Hill Companies Berkeley 1998.

    Google Scholar 

  • Seward, Julian; Valgrind developers: Valgrind Documentation. Release 3.7.0 2 November 2011. 2011. http://valgrind.org/docs/manual/valgrind_manual.pdf, Download 2012-07-11.

  • Singhal, Mukesh; Shivaratri, Niranjan G.: Advanced concepts in operating systems. Distributed, database, and multiprocessor operating systems. McGraw-Hill, Inc. 1994.

    Google Scholar 

  • Smart, Julian; Hock, Kevin; Csomor, Stefan: Cross-Platform GUI Programming with wxWidgets. Pearson Education, Inc. 2006.

    Google Scholar 

  • Smith, Greg; Sidky, Ahmed: Becoming agile in an imperfect world. Manning Publications Co. 2009.

    Google Scholar 

  • Sneed, Harry M.; Seidl, Richard; Baumgartner, Manfred: Software in Zahlen. Die Vermessung von Applikationen. Carl Hanser Verlag München 2010.

    Google Scholar 

  • Sommerville, Ian: Software Engineering 8. Addison-Wesley Publishers Limited and Pearson Education Limited 2007.

    Google Scholar 

  • Spillner, Andreas; Roßner, Thomas; Winter, Mario; Linz, Tilo: Praxiswissen Softwaretest. Testmanagement. Aus- und Weiterbildung zum Certified Tester – Advanced Level nach ISTQB-Standard. 3. Auflage, dpunkt.verlag GmbH 2011.

    Google Scholar 

  • Stallman, Richard M.; McGrath, Roland; Smith, Paul D.: GNU Make. A Program for Directing Recompilation. GNU make Version 3.82. Free Software Foundation, Inc. 2010., http://www.gnu.org/software/make/manual/make.pdf, Download 2012-06-05.

  • Stallman, Richard M.; GCC developer team: Using the GNU Compiler Collection. For gcc version 4.7.1. Free Software Foundation, Inc., http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc.pdf, Download 2012-06-05.

  • The Standish Grouphttp://www1.standishgroup.com/newsroom/chaos_2009.php, Download 2011-06-09.

  • The Standish Group.: CHAOS MANIFESTO 2013. Think Big, Act Small. The Standish Group. http://www.versionone.com/assets/img/files/ChaosManifesto2013.pdf, Download 2014-05-04.

  • Starlink Joint Astronomy Centre.: Starlink. Webpage of The Starlink Project, http://starlink.jach.hawaii.edu/starlink, Download 2011-07-29.

  • Steffens, Guillaume: SMART CRITERIA. 50MINUTES.com 2015.

  • Stevens, W. Richard : Programmieren von UNIX-Netzen. Grundlagen, Programmierung, Anwendung. Carl Hanser Verlag München and Prentice-Hall International, Inc. London 1990. (Original title: UNIX Network Programming. Prentice-Hall, Inc. 1990).

    Google Scholar 

  • Stroustrup, Bjarne: Die C++-Programmiersprache. 2. Auflage. Addison-Wesley (Deutschland) GmbH München 1995. (Original title: The C++ programming language. Second Edition. At&T Bell Telephone Laboratories, Inc. 1991).

    Google Scholar 

  • Tanenbaum, Andrew S.: Moderne Betriebssysteme. 2. Auflage. Carl Hanser Verlag München 1995. (Original title: Modern operating systems. Prentice-Hall, Inc. 1992).

    Google Scholar 

  • TIOBE Software.: TIOBE Programming Community Index for April 2014. April Headline: Perl hits all-time low (position 13). http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html, Download 2014-05-04.

  • Valgrind developers.: Valgrind. http://valgrind.org/, Download 2012-07-11.

  • Vigenschow, Uwe: Objektorientiertes Testen und Testautomatisierung in der Praxis. Konzepte, Techniken und Verfahren. 1. Auflage, dpunkt.verlag GmbH 2005

    Google Scholar 

  • VMware.: vmware . VMware Inc. http://www.vmware.com/de/, Download 2012-07-25.

  • Vogel, Oliver; Arnold, Ingo; Chughtai, Arif; Kehrer, Timo: Software Architecture. A Comprehensive Framework and Guide for Practitioners. Springer 2011.

    Google Scholar 

  • Wassermann, Tobias: Versionsmanagement mit Subversion. Installation, Konfiguration, Administration. mitp, REDLINE GmbH, Heidelberg 2006.

    Google Scholar 

  • Weinberger, Benjy; Silverstein, Craig; Eitzmann, Gregory; Mentovai, Mark; Landray, Tashana.: Google C++ Style Guide. http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml, Revision 3.188, Download 2011-06-28.

  • Wells, Donovan: Extreme Programming: A gentle introduction. September 28, 2009. http://www.extremeprogramming.org/, Download 2012-07-31.

  • Werner, Matthias.: Algorithmen und Programmierung. Skript zur Vorlesung. http://osg.informatik.tu-chemnitz.de/lehre/old/ws1011/aup/AuP-script.pdf, Download 2011-08-05.

  • Wiest, Simon: Continuous Integration mit Hudson. Grundlagen und Praxiswissen für Einsteiger und Umsteiger. 1. Auflage. dpunkt.verlag GmbH 2011.

    Google Scholar 

  • Wolf, Henning; Bleek, Wolf-Gideon: Agile Softwareentwicklung. Werte, Konzepte und Methoden. 2. Auflage. dpunkt.verlag GmbH 2011.

    Google Scholar 

  • Wunderlich, Lars: AOP. Aspektorientierte Programmierung in der Praxis. entwickler.press Software & Support Verlag GmbH 2005.

    Google Scholar 

  • Xen.: Xen . What is Xen ?. Citrix Systems, Inc. http://xen.org and http://xen.org/files/Marketing/WhatisXen.pdf, Download 2012-07-25.

Download references

Author information

Authors and Affiliations

Authors

Rights and permissions

Reprints and permissions

Copyright information

© 2017 Springer International Publishing Switzerland

About this chapter

Cite this chapter

Neidhardt, A.N.J. (2017). Writing Code for Scientific Software. In: Applied Computer Science for GGOS Observatories. Springer Textbooks in Earth Sciences, Geography and Environment. Springer, Cham. https://doi.org/10.1007/978-3-319-40139-3_2

Download citation

Publish with us

Policies and ethics