  We present Executable Abstract Programs and analyse their role for software
development and documentation. The intuitive understanding of these programs
fits the computational mindset of software system engineers and is supported by
a simple but precise behavioural definition. Therefore, they can be smoothly
integrated in the practitioner's daily work to rigorously formulate every
design and implementation decision taken on the path from the Executable
Abstract Program for the requirements to the targeted and efficiently runnable
code.
  The Executable Abstract Programs of the resulting system documentation
represent definitions of implementation steps one can check and justify by
testing (due to their executable character) or by reasoning (due to the
mathematical definition of their behaviour). For complex systems the
implementation involves multiple (orthogonal or successive) implementation
steps which represent instances of a practical computational refinement
concept. Such a system development process is driven by computational
refinements and is strictly limited to explicitly formulate and justify --
besides the requirements -- only the necessary implementation steps. As a
consequence, it produces as side-effect a corpus of documentation that
facilitates the understandability of the final code and improves its
reliability and resilience; it also enhances the maintenance process (including
reuse and change of abstract programs and code) and reduces maintenance cost.
