Software reliability methods, such as testing and model checking, are well integrated into the software development process. They are complemented by safety enforcement mechanisms such as run time verification. However, even with a wealth of techniques and methodologies for developing reliable systems, it is still quite challenging to eliminate all the bugs from software systems. One of the reasons is the magnitude of software systems, having to handle a very large number of use cases and possible interactions with an environment or between concurrent components. Genetic algorithms and programming provide a powerful heuristic search that involves randomization based on operators that simulate natural reproduction. We show various ways where genetic algorithms and programming can be integrated with formal methods to enhance software reliability.
展开▼