A Survey on Semi-formal Approaches to Software Development