Automatic software generation and improvement through search based techniques