After taking this course, the student should master the following subjects:
1. Work with junior project team to complete and deliver the junior project to the client. In doing so, demonstrate the ability to work within a team to deliver a multi-term-sized project to an external client successfully.
2. Apply appropriate refactoring techniques to resolve design problems in code.
3. Apply common construction and maintenance heuristics to enhance existing code, such as ways to eliminate global variables and ways to test difficult code.
4. Organize and develop software user documentation which enhances long-term software viability.
5. Construct software so that it meets delivery and deployment objectives specified by the project.
6. Apply the corrective, perfective, adaptive and preventive types of software changes and maintenance types.
7. Apply impact analysis and other software source analysis to understanding existing software.
8. Use systematic exception handling and other& techniques in promoting fault-tolerance.
9. Describe software modernization approaches such as reverse engineering, reengineering, salvaging, and restructuring.
10. Describe the ways configuration management is used in production systems.