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 Software Engineering Course
Software engineering is many things. Students often think that taking a software engineering course will teach them to be better programmers (technically). While you may improve your programming skills when you take this course, that is not the main objective of this course. There are many other courses that help you improve your technical skills. Software engineering focuses on helping you develop other skills that will help you succeed in a career in the software industry. Many of these skills are considered “soft” skills and are as critical to your success as a software engineer as more traditional computer science courses.
Skills you will learn include:
- working as a member of a team,
- communicating with stakeholders and analyzing requirements so that you build the correct product that meets the customer needs,
- designing your system so that it is flexible and robust,
- estimating work and planning schedules,
- selecting, modifying, and following a development process that is appropriate for your project,
- testing your work to ensure that it meets the requirements,
- documenting your work, and
- packaging and delivering your product.
The course is based around a term project that will be completed by a team of 10-15 students. Students interact with stakeholders to capture and manage requirements, schedule and implement work, and deliver valuable software. Teams will make weekly presentations to the stakeholders, where they demonstrate progress in the form of working software. Team grades are based upon the “paycheck” from the customer.
Most of the major topics covered in this course fall into one of three categories:
- People: how to organize a team of people for high performance, the types of roles needed on software projects, and collaboration skills.
- Process: how to determine the appropriate activities, practices, and techniques that a team might adopt to support the team’s goals.
- Tools: selecting and using tools that support the team and process.
Specific topics that might be addressed in a course offering are:
- Software development lifecycle (SDLC) models. Specifically we focus on iterative methods. The current buzzword for methodologies is “Agile,” but the term is poorly defined and understood. We concentrate rather on solving the problems encountered by software development teams in a pragmatic manner.
- Design and implementation. While we do not focus on design methods (CS4233, Object-oriented Analysis and Design covers this in detail), you learn the basics of design patterns and modularity. We use UML to communicate design and you get exposure to a UML tool such as Visual Paradigm.
- Iteration planning. Students plan their work using techniques borrowed from modern practices such as eXtreme Programming, Scrum, and Kanban. You will use techniques such as estimating story points, and planning poker to predict their work and measure the team's velocity.
- Testing. Students are exposed to unit and integration testing. You will use a unit testing framework such as JUnit, and have at least one assignment in Test-Driven Development (TDD).
- Version control. Teams must use a version control system such as Subversion or Git. They also practice continuous integration by setting up a project in a Jenkins server.
- Packaging and delivering a product. Students must create developer and user documentation and package it with the product for deployment.
At the end of the course you will be prepared to contribute to a software development team. You will understand that the only constant in software development is “change.” and you will have collected tools for your software engineering toolbox that helps you deal with change.