The Role of Executable Abstract Programs in Software Development and Documentation