Course Information
This course covers object-oriented software construction methodologies and their application. The main component of the course is a large team project on a topic of students' choosing. Course topics covered include object-oriented analysis and design, UML, design patterns, refactoring, program testing, code repositories, team programming, and code reviews. [Area: Systems or Applications]
Prerequisites
EN.601.220
Intermediate Programming ANDEN.601.226
Data Structures
Upon successful completion of this course, you should be able to:
- Explain the client-server model and structure a software system that adheres to this software architecture. (SO6)
- Write a software requirements specification (SRS) document that describes a medium-size software system's functional requirements. (SO3, SO6)
- Prioritize functional requirements of a software system according to its requirement specifications. (SO6)
- Recognize software process models and distinguish between plan-driven models (such as waterfall) versus incremental development approaches (such as agile). (SO1)
- Follow the agile software development process (short iteration, continuous delivery, etc.) to build a medium-size software. (SO5)
- Describe how version control can be used to help collaborative software development. (SO1)
- Demonstrate the capability to use software tools (Git/GitHub, Wireframing tools, build tools like Gradle, dependency management tools like NPM, IDEs, $\dots$) to support the development of a software product of medium size. (SO6)
- Articulate object-oriented design principles, including separation of concerns, information hiding, coupling and cohesion, and encapsulation. (SO1)
- Use UML to express the design of a simple software system and explain how system design principles have been applied in this design. (SO3)
- Design, implement, document and test application programming interface (API) for a simple software system. (SO6)
- Design and implement data persistence strategies (such as databases, caching, cookies and sessions in web-applications) for medium-size multiuser software applications. (SO6)
- Describe the SOLID design principles and apply them to the design of small software systems. (SO1)
- Provide examples of creational, structural and behavioral design patterns in the object-oriented programming paradigm. (SO1)
- Within the context of the object-oriented paradigm, describe one or more design patterns that could apply to a simple software system design. (SO1)
- Describe a form of refactoring and discuss when it may be applicable. (SO1)
- Refactor an existing software implementation to improve some aspect of its design. (SO2)
- Write a software component that performs some non-trivial task and is resilient to input and run-time errors (SO6)
- Create and document a set of tests for a medium-size code segment. (SO2)
- Demonstrate through involvement in a team project the central elements of team building and team management. (SO5)
- Demonstrate effective presentation skills through involvement in a team project presentation (SO3)
This course will address the following Computer Science BS Program Student Outcomes:
- SO1: Analyze a complex computing problem and apply principles of computing and other relevant disciplines to identify solutions.
- SO2: Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program's discipline.
- SO3: Communicate effectively in a variety of professional contexts.
- SO5: Function effectively as a member or leader of a team engaged in activities appropriate to the program's discipline.
- SO6: Apply computer science theory and software development fundamentals to produce computing-based solutions.