An Integrated Approach to Software Engineering