COMP 3718: Programming in the Small

This course is for students interested in the study of tools and techniques used in the construction of small software systems.

Prerequisites:  COMP 2002 or the former COMP 2711

Availability: ⚠ This course is not planned to be offered in the near future.

Course Objectives

The goal of this course is to demonstrate the tools and techniques used in the construction of small software systems. In software engineering, software development is characterized by programming in the large or programming in the small. Programming in the large deals with requirement analysis, system architecture design, module specification, module development, testing and maintenance - in other words, the entire software life cycle. Programming in the small deals with how a person creates the set of software components necessary to implement a module. Thus programming in the small is part of the larger software development process.

Representative Workload
  • Assignments 20%
  • Software Project 25%
  • In-class Exam 20%
  • Final Exam 35%
Representative Course Outline
  • Review/Introduction of the Java programming language
    • Data and control structures
    • Abstraction features and styles
    • Pointers and memory management
    • Common mistakes
    • Classes
  • An example of the complete system
    • The requirements
    • Design decomposition techniques and strategies
    • The interface specification of submodules
    • The use of software libraries
    • The actual source code
    • The supporting tool and files
    • Testing
  • Programming in the small
    • Parnas' information hiding
    • Examples of decomposition according to Parnas
    • ADT and modules
    • Testing and automatic testing
  • Software development tools
    • Source control systems: SVN, Git, HG, and so on.
    • Integrated Development Environments: Eclipse, Netbeans, and so on.
    • Testing frameworks: junit
  • The where, when and why of software libraries
    • The design of utility software components
    • Abstract data types
    • Generic programming
    • Libraries
  • Strategies to the reading and modification of large programs
  • Performance issues (time and memory)

Page last updated May 24th 2021