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 AND EN.601.226 Data Structures

Upon successful completion of this course, you should be able to:

  1. Explain the client-server model and structure a software system that adheres to this software architecture. (SO6)
  2. Write a software requirements specification (SRS) document that describes a medium-size software system's functional requirements. (SO3, SO6)
  3. Prioritize functional requirements of a software system according to its requirement specifications. (SO6)
  4. Recognize software process models and distinguish between plan-driven models (such as waterfall) versus incremental development approaches (such as agile). (SO1)
  5. Follow the agile software development process (short iteration, continuous delivery, etc.) to build a medium-size software. (SO5)
  6. Describe how version control can be used to help collaborative software development. (SO1)
  7. 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)
  8. Articulate object-oriented design principles, including separation of concerns, information hiding, coupling and cohesion, and encapsulation. (SO1)
  9. Use UML to express the design of a simple software system and explain how system design principles have been applied in this design. (SO3)
  10. Design, implement, document and test application programming interface (API) for a simple software system. (SO6)
  11. Design and implement data persistence strategies (such as databases, caching, cookies and sessions in web-applications) for medium-size multiuser software applications. (SO6)
  12. Describe the SOLID design principles and apply them to the design of small software systems. (SO1)
  13. Provide examples of creational, structural and behavioral design patterns in the object-oriented programming paradigm. (SO1)
  14. Within the context of the object-oriented paradigm, describe one or more design patterns that could apply to a simple software system design. (SO1)
  15. Describe a form of refactoring and discuss when it may be applicable. (SO1)
  16. Refactor an existing software implementation to improve some aspect of its design. (SO2)
  17. Write a software component that performs some non-trivial task and is resilient to input and run-time errors (SO6)
  18. Create and document a set of tests for a medium-size code segment. (SO2)
  19. Demonstrate through involvement in a team project the central elements of team building and team management. (SO5)
  20. 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.