We use agile MDA to gain direct feedback from customers about the product under development. We build test cases, write executable models, compile the models using a model compiler, run the test cases, and deliver fragments of the system to the customer incrementally. This is just the same as "We build test cases, write code, compile the code using a language compiler, run the test cases, and deliver fragments of the system to the customer incrementally," except that we've replaced one language (code), with another at a higher level of abstraction: an executable and translatable model. An executable model, because it is executable, can be constructed, run, tested, and modified in short incremental, iterative cycles. Turnaround cycles using models don't have to be longer than coding, because models are transformed automatically into the system. Second, models are not useless or ancillary documents they are the system. As a result of these two, producing executable models doesn't have to be any more heavyweight than writing code, given an adequate MDA infrastructure. Agile MDA is one possible process for constructing models and linking them together. This leaves open the question of which models to build, which mapping functions are required, and what marking models to apply. Working all that out is the construction and definition of an MDA process, which we take up in the next chapter. |