Bringing the agile philosophy to formal specification settings
Software development can be seen as a process of knowledge acquisition, in which human beings progressively learn about the intended behavior of the desired systems. Thereby, development is subject to considerable amounts of uncertainty and variability, that make it impossible to proceed in a purely incremental fashion - at some points, the need always arises to reconsider part of the accumulated knowledge. With this problem in mind, agile development methodologies have been gaining popularity in recent years as a means to enhance productivity, and there have been attempts to supplement them with formal techniques for better reliability. However, the existing approaches to agile formal methods have practically limited themselves to adopting recommended practices of agile development, with no particular contribution from the employed formalisms. Compared to that, this paper advocates the use of formalisms intended for evolutionary development, with a two-fold objective: first, to exploit the knowledge acquired up to any given stage as a means to cope with frequent and numerous changes; and, second, to introduce support for the creative development tasks through an interactive procedure that helps taking steps forward.
formal specification agile software development analysis-revision cycle