CS 2110: Software Development Methods

Course Website: https://www.cs.virginia.edu/~sherriff/cs2110/ - Taught: 2007-2012

A second course in computing with an emphasis on modern software development and principles central to computer science. Topics include software requirements, testing, object-oriented design, abstraction, encapsulation, recursion, and time-complexity.

Course Objectives

Upon successful completion of this course, students will:

  • Comprehend more advanced principles of object-oriented programming and how a programming language supports these, and apply these by developing larger and more complex programs than in their first programming course. (Topics include polymorphism, inheritance, collection classes, generics, etc.)
  • Comprehend and apply principles of design at the class and object level. These principles include abstraction, encapsulation, and information hiding. This also includes the ability to define and evaluate class interfaces to solve specified design problems, as well as the ability to understand, apply, and evaluate the use of reusable components to solve such problems.
  • Comprehend and analyze problems and programming issues such as dynamic memory management, indirect object references, and recursion. Also, be able to apply this knowledge by implementing software that includes these features.
  • Apply knowledge of software development practice to effectively use strategies, tools and environments such as interactive development environments, debuggers, testing frameworks, etc.
  • Comprehend important basic concepts of software engineering and the development of large software systems, including the software lifecycle, requirements, design, and software quality. In their development activities, students will be able to apply basic unit testing and carry out a software inspection.
  • Comprehend the basic principles of the architecture of larger software systems, in particular object- oriented frameworks. Students will be able to apply this knowledge by developing a GUI using a framework.