methods and tools for developing reliable software