UGA Bulletin Logo

Software Development


Course Description

Software development techniques in an object-oriented computer language. An intermediate programming course emphasizing systems methods, top-down design, testing, modularity, and structured techniques. Applications from areas of numeric and non-numeric processing and data structures.


Athena Title

Software Development


Equivalent Courses

Not open to students with credit in CSCI 1302H


Prerequisite

CSCI 1301-1301L or CSCI 1301E


Semester Course Offered

Offered fall, spring and summer


Grading System

A - F (Traditional)


Student Learning Outcomes

  • Plan, design, implement, compile, and execute a complete object-oriented software solution on a target Unix environment.
  • Describe and apply fundamental programming techniques, including exception handling, generics, recursion, and code reuse.
  • Apply accepted programming practices, including documentation and proper code style.
  • Describe and apply object-oriented programming techniques, including interfaces, inheritance, and polymorphism, and apply combinations of each in a software solution.
  • Utilize software development tools, including tools for version control, build management, debugging, and unit testing.
  • Design, analyze, and implement algorithms for searching, sorting, and other real-world problems.
  • Reinforce course concepts using integrative examples, including graphical user interfaces, stream-like operations, and abstract data types.

Topical Outline

  • Unix Fundamentals (Knowledge level: Usage) a) Navigate and modify files, directories, and permissions in a multiuser Unix-like environment. b) Execute, redirect, pipe, and manage programs/processes in a multiuser Unix-like environment. c) Create and modify text files and source code using a powerful terminal-based text editor such as Emacs or Vi. Extremely simple programs like nano and pico are not sufficient. d) Use shell commands to compile new and existing software solutions that are organized into multi-level packages and have external dependencies.
  • Programming Fundamentals (Knowledge level: Usage) a) Identify redundancy in a set of classes and interfaces, then refactor using inheritance and polymorphism to emphasize code reuse. b) Define, throw, and propagate exceptions appropriately in a software solution. c) Use recursion to solve a non-trivial problem in a software solution. d) Implement new generic methods, interfaces, and classes in a software solution. e) Utilize existing generic methods, interfaces, and classes in a software solution.
  • Accepted Programming Practices (Knowledge level: Usage) a) Create and update source code that adheres to established style guidelines. b) Create class, interface, method, and inline documentation that satisfies a set of requirements. c) Generate user-facing API documentation for a software solution. d) Apply pair-programming principles in a software-based project.
  • Object-Oriented Programming (Knowledge level: Usage) a) Design, create, and use interfaces in a software solution. b) Utilize interface-based polymorphism in a software solution. c) Design, create, and use inheritance relationships in a software solution. d) Utilize inheritance-based polymorphism in a software solution. e) Use visibility modifiers to provide inheritance-based and package-based access protection in a software solution.
  • Software Development Tools (Knowledge level: Usage) a) Utilize a version control tool such as Git or Subversion to store and update source code in a multi-programmer software solution. b) Utilize a build tool such as Maven or Ant to create and manage a complex software solution involving external dependencies. c) Utilize a debugger to trace and identify logical errors in a software solution. d) Create unit tests for classes, interfaces, and methods using a unit testing framework like JUnit.
  • Analysis (Knowledge level: varies by topic) a) Given an algorithm, perform an analysis that classifies the algorithm according to its best Big-O class for a given unit of measurement (e.g., comparisons vs. swaps). (Usage) b) Design an algorithm that solves a given problem with a particular Big-O class given as a constraint. (Assessment) c) Implement, analyze, and assess combinations of searching/sorting algorithms such as linear search, binary search, quadratic sorts, and linearithmic sorts. (Assessment)
  • Integrated Examples a) Design and implement a graphical user interface in a software project. (Usage) b) Use stream-like operations (e.g., map, reduce, and filter in the Java Stream API) as an alternative to iteration in solving problems. Observe the difference between resulting implementations. (Usage) c) Use common abstract data types and structures, including lists, queues, arrays, and stacks in solving typical problems. (Usage)

Syllabus