A Framework for a Software Engineering Method

Although software engineering life cycles can differ very much, they all have about the same division in analysis, requirements, design, implementation, testing and debugging. These same phases, although not necessarily in this order or with the same emphasis, are the phases of the framework. In this section concrete use is made from the findings described in the former two sections.

Before modification is possible, the part of the product to be modified has to exist. Before debugging, tests have to be applied. Before it is possible to test, design and/or implementation has to be done, etc. But, is it necessary to have the requirements finished before looking at the design phase? As humans can be seen as opportunistic processors [7], and as we always use past experience, the answer is ``no''. Before the requirements are finished, it has to be known whether they are implementable. For making a choice between alternatives with regard to reuse, ease of implementation, and risks one has to look ahead. Also because a problem can only be stated in the direction of a possible solution one has to look ahead [19]. And of course, because of changing insights and bugs one has to go back to previous phases and one has to look back to be able to learn. Because of all these reasons a yoyo approach is suggested as an ordering of the phases, where the going down and up is steered by an ``as-needed'' strategy.

In every phase the understanding of the problem, the focusing on reuse, and learning are stressed. Understanding is emphasised because the right problem has to be solved.

Components have to exist in the environment to be able to reuse. A components base is coupled with a means to select potentially useful components. In an experiment [12] 2.4 minutes were necessary to find a solution when only useful components were given, 7.5 minutes were necessary when all components where given and hints about which ones were useful, and 15.2 minutes were necessary when the same components were given as to the former group but no attention was drawn to potential useful components. This means that the selection mechanism is critical.

The method emphasises learning as only components which are known can be used correctly and as things which one has learned can be reused easier than things fairly unknown to the (re)user. Possible ways to integrate learning are:

A possible manner to help learning passively is by documenting. Documentation has to state the relations among concepts backgrounds and why's. Also alternatives with their pro's and con's and the reason for their disregarding have to be documented. This emphasises learning. The experienced software engineers in the application domain have to contribute to be sure the information is already computer oriented formulated.