Page364
Computer-Aided Software Engineering (CASE)
Computer-Aided Software Engineering (CASE) uses programs to assist in the creation and maintenance of other computer programs. Programming has historically been performed by (human) programmers or teams: CASE adds software to the programming “team.”
There are three types of CASE software:
- Tools: support only specific tasks in the software-production process.
- Workbenches: support one or a few software process activities by integrating several tools in a single application.
- Environments: support all or at least part of the software production process with a collection of Tools and Workbenches[5].
Fourth-generation computer languages, object-oriented languages, and GUIs are often used as components of CASE.
Top-Down vs. Bottom-Up Programming
A programmer is tasked with developing software that will play MP3 music files. How should the programmer begin conceptualizing the challenge of turning bits in a file into music we can hear? Should the programmer start at the “top,” thinking about how the music will sound, and how the MP3 player will look and behave? Or should the programmer start at the “bottom,” thinking about the low-level device drivers required to receive a stream of bits and convert them into audio waveforms?
Top-Down (TD) programming starts with the broadest and highest level requirements (the concept of the final program) and works down towards the low-level technical implementation details. Bottom-Up programming is the reverse: it starts with the low-level technical implementation details and works up to the concept of the complete program.
Both methods pose risks: what if the Top-Down approach made incorrect assumptions about the performance of the low-level devices? On the other hand, Bottom-Up risks wasting time by performing lots of programming for features that may not be required or implemented in the final product.
Procedural languages such as C have historically been programmed Top-Down style: start with the main program, define the procedures, and work down from there. Object-oriented programming typically uses bottom-up design: define the objects, and use them to build up to the final program.