Instructor Adam Porter
Software engineering is the study of theories, methods and tools needed to develop large software products cost-effectively (paraphrased from Sommerville)
This entails understanding issues such as: how to determine what a program is supposed to do, how to express those requirements, how to structure and construct software systems, how do ensure that they actually do what they're supposed to do, and how to organize groups of people so they can do all this.
This class is intended to introduce students to research in software engineering. Consequently, I will not assume nor require that students have any background in software engineering before taking this class.
The course will cover specific research areas following an idealized view of how software is developed, i.e., starting with conceptualizing a system, to designing, building, testing, and maintaining it. At each stage we will survey how software engineering research has and is continuing to address each area. We will do this by first examining fundamental background, after which we will examine current research. We will end the semester by concentrating on interesting directions for future research.
This course will count towards the various comprehensive exam requirements. Class requirements will primarily be a final exam, active class participation (including at least one presentation), and a research project. The results of the research project will be captured in a publishable-quality report.