Topics [class notes] [notes]

This course is an introduction to software engineering, and a chance to exercise the techniques and methods learned in a software development project. Software engineering is concerned with the analysis, design, implementation, and maintenance of software systems that are developed for clients who are not part of the team developing the system. This course focuses on implementation techniques, analysis and design heuristics, and best practices that have proved useful in making this process rigorous, systematic, repeatable, and manageable. Students will be introduced to current methods and technologies and will apply these techniques to programming and design projects.

In addition to software engineering theory and practice, students will learn how to work in groups and will exercise critical thinking skills that are required to solve real software development problems. Crucial to these skills are being able to model a problem in order to choose an appropriate solution, to organize technical documents, and to critically review the products of the design process.

Software development is primarily about design, which is very difficult to learn and equally hard to teach. Design problems involve choices and tradeoffs, and often there is no single "right" answer. The main product of the course will be a piece of software that has been designed, programmed and documented by a team. By placing each student in an environment where individual and team decisions are required, the student will learn what is involved in the overall process. Each team’s progress will be monitored by the instructor and a number of project milestones will be graded along the way. The involvement of every student is vital to the team’s success in the project, and therefore in learning about software development.

Topics to be covered include:
• Programming language features for object-oriented design
• The Eclipse development environment, including CVS and Omondo UML
• Design principles and methods
• Object-oriented design methods, including UML diagrams
• Design patterns
• Reuse libraries
• Documentation, specification and verification
• Maintenance management
• Models of software development

Skills to be acquired include:
• Technical writing
• Interpersonal communications, leadership
• Conflict resolution
• Rigorous analysis of work products

[back to home]