Each student in this course will be a member of a project group. Each group will complete a software engineering project over the course of the semester. The purpose and design of this software will be decided by the group. The instructor’s role is to guide the students in completing these projects from start to finish. Students who complete this course will be equipped with the skills necessary to organize and execute other software engineering projects in the future.
For reasons of both course organization and software engineering discipline, the projects in this course will follow these guidelines:
- Project groups will consist of four or five students.
- There are no limits placed on the general topic of the project. There are limitations imposed on the software structure, which are described below.
- Your project must include significant original ideas! It may resemble existing software applications or borrow ideas from them, but your project must do or be something novel. Your project cannot simply be a clone of an existing application.
- Your project must have a real purpose. It is acceptable if this purpose is niche or somewhat abstract, but you must be able to demonstrate the project’s use.
- Projects will follow a common timeline of iterations, each taking roughly two weeks.
- As participation and communication are critical to the success of a project, each iteration will include a mandatory, confidential peer review.
- To ensure that projects meet these guidelines, your project proposals will be reviewed and approved by your instructor.
Software Structure Requirements
To ensure that your projects are well-structured and that you have the resources and assistance necessary to succeed, group projects are limited in their software structure:
- As much as possible, your project must be completed in Java. Exceptions to this will be considered on a case-by-case basis but are not likely to be approved. In particular, your software project must be completed in a statically-typed, memory safe language except in places where such technology is not in common usage (e.g. website front ends).
- Your project must have some “non-CRUD” functionality; that is, your project must perform some task which is not simply the retrieval or storage of information from a database.
- The build process for your project must be automated. Project iterations which do not compile will not receive credit. Automated builds are standard in industry and help ensure that your group has reliable and consistent impressions of the state of the software.
- The deployment process for your project must be simple (preferably automated) and well-documented. If external resources are used to host your project, the instructor must be able to replicate them by following your instructions.
You may wish to refer to a list of Frequently Asked Questions regarding these projects.
As mentioned above, the project schedule consists of iterations, each of which takes roughly two weeks. The iterations are as follows:
- Iteration 0: Group Formation. Groups of students will form and project concepts will be discussed and approved by the instructor.
- Iteration 1: Requirements. The requirements for the project will be formalized. This includes feature sets, use case analysis, and user interface sketches.
- Iteration 2: Design Proposal and Prototyping. The design of the software to meet the above requirements is formalized and documented. This includes a description of the software’s core components and interactions between them. A skeletal prototype of the proposed design is written in code.
- Iteration 3: Early Development and Tests. Some core functionality is implemented and unit tests of core functionality exist, even if most are failing.
- Iteration 4: Further Development and Tests. A first draft of all core functionality is complete. Unit tests are more complete, although bugs may exist in end-to-end testing. Extended features and functionality need not be implemented.
- Iteration 5: Alpha Release. An initial, somewhat usable implementation of the full application is complete. Bugs may still exist but do not entirely prevent the use of the software. Implementation of extended features progresses incrementally.
- Iteration 6: Beta Release. A more complete implementation of the full application exists. Any remaining bugs are minor and do not interfere with the usability of the application. The project is ready for demonstration during your final presentation.
Being a good software developer also means being able to communicate your accomplishments and goals to clients, managers, and peers. The presentation component of the projects helps to give you practice in this area.
There are two project presentations. The Overview Presentations are conducted during class and presented to your classmates. The Final Presentations are held in lieu of your final exam and presented only to your instructor. Please see these links for more information.