Teaching about pi to kids outside Battambang, Cambodia, Jan. 2011

Basic Information
- Office: FL B19 (look for the ducks)
- Office phone: 508-831-6793
- Mobile: 978-798-0019
- FAX: 508-831-5776
- AIM, Skype: gpollice
- My curriculum vitae
- e-mail: gpollice at cs dot wpi dot edu
About the Object-Oriented Analysis & Design Course
Object-oriented analysis and design complements CS3733, Software Engineering, by providing the students with the technical skills to produce well-designed, robust software systems. The focus differs from the software engineering course. In software engineering students focused on learning and applying the skills that are necessary for effective teamwork on moderately large software projects. The emphasis there is on how teams are able to analyze requirements, plan and complete work, document their product, and deliver working software to their customers. While there is some amount of material that touches on the more technical skills that are needed to produce excellent designs and implementations, there simply isn't enough time to include any of that material in depth.
This is where CS4233 comes in. Once can certainly take CS4233 without having taken CS3733. In fact, some students who take CS4233 first say that it helps them do better in CS3733. Regardless of which order the courses are taken, when combined, the two provide the student with a solid foundation in software engineering and practical software development practices.
The focus in CS4233 is on the individual practices and principles of software development—with an object-oriented point of view—are presented and reinforced. Upon completion of this course, the student will have significantly expanded his or her software engineering toolbox with new techniques, tools, principles, and ways to communicate their designs. They will also be able to apply empirical methods to measure the quality of their design and code. Finally, they will be able to apply object-oriented design principles to refactor and improve their software.
Skills you will learn include:
- understand apply object-oriented design principles to software development,
- apply Test-Driven Development (TDD) to the construction of robust, flexible, and maintainable software systems,
- create and use mock-objects for use with TDD,
- evolve a design and implementation of a system according to requirements specifications,
- selecting, modifying, and following a development process that is appropriate for your project,
- communicate designs using the Unified Modeling Language, specifically read and construct class, package, and sequence diagrams,
- understand and use the language of design patterns to find solutions to fit common design problems,
- understand and apply refactoring to improve software, and
- understand how to use code coverage metrics and static analysis metrics to improve code quality and design.