A method for designing a software program including multiple modules includes
defining
an initialization sequence wherein each of the modules is initialized according
to a predetermined order. The method also includes defining calling order constraints
wherein a first module may call a second module if the first module succeeds the
second module in the allowed order. The method also includes creating a program
specification for the software program. The program specification includes a module
specification for each of the modules and each module specification indicates other
modules called by an implementation of the module. According to one aspect, one
of a plurality of initialization sequences is selected based upon the presence
of one or more markers in a memory.