CPSC 329 Software Development Fall 2018

CPSC 329 Course Information

On this page:


Course Description and Objectives

Catalogue description:

This course continues the study of programming by focusing on software design, development, and verification - the skills beyond fluency in a particular language which are necessary for developing large, reliable programs. Topics include object-oriented design, the use of APIs, and testing and verification. Techniques common in modern software development will also be studied. Specific techniques may include GUIs and event-driven programming, multi-threading, client-server networking, fault-tolerant computing, stream programming, and security.

This course completes the programming sequence begun by CPSC 124 and 225 - CPSC 124 introduces the basic ideas of programming along with the syntax and semantics of the Java programming language, CPSC 225 focuses on common data structures as the organizational building blocks of programs, and CPSC 329 addresses creating good software.

Four key points are at the core of good software:

  • fully understanding what the software is to do,
  • planning and design before coding,
  • proper use of modularity and abstraction in the design,
  • and building in reliability through good coding practices and the integration of testing in the implementation process.

This course will address how to achieve those points. In addition, students will gain:

  • an organized approach to software development;
  • a habit of good software, which includes coding standards, documentation, appreciation of the value of good design (and the willpower to refactor as needed to improve the design), and testing;
  • experience with a substantial project, working in teams, and working with someone else's code;
  • skills for life-long learning, specifically learning from examples, tutorials, and APIs;
  • technical skills relevant to software development, including the use of integrated development environments, version control, and unit testing; and
  • a basic technical understanding of some aspects of modern software such as GUIs, event-driven programming, human-computer interaction, client-server networking, and threads.

Prerequisites

CPSC 225 is required.
Programming in this course will be done in Java, and students are expected to be comfortable with Java syntax, the concepts of object-oriented programming (including classes, objects, interfaces, inheritance, and abstract classes), and writing programs to solve problems. Also expected is some familiarity with basic data structures (arrays, linked lists), abstract data types (lists, stacks, queues, maps/dictionaries), the realization of those abstract data types in the Java Collections Framework (List, Stack, Queue, Map and their concrete implementations), and efficiency; the notion of abstract data types and the separation of interface and implementation; how to use the Java API documentation; and coding standards.


Textbook

There is no textbook to purchase. Material will be handed out or posted on the course webpage.


Software

You will be interacting with a server set up on a machine running within the department. All of the client software needed for this course is available on the Linux machines in Lansing 310 and Rosenberg 009.

If you want to set up your own computer so that you can work on projects without going to one of the labs, you can. You will need:

  • Java. If you do not already have a Java development kit (JDK) installed on your computer (or have a version other than Java 8), you can download it here. (Look for the "Java SE Development Kit" link appropriate for your computer - Mac OS X, Windows, or Linux.) You should make sure that you download Java SE (not EE or other edition), the development kit (JDK) rather than the runtime environment (JRE), and Java 8 rather than an older or newer version.

  • Eclipse. Integrated development environments (IDEs) such as Eclipse make the development of larger programs easier. You can download Eclipse Oxygen here - choose the appropriate version for your computer (Mac OS X, Windows, or Linux) under "Download Links". (Note that you should not get the newest version of Eclipse, Photon.)

Some Eclipse setup will be done in lab. You will need to carry out the same steps to configure your own installation.

Version control will be used, and that provides the best mechanism for transferring files between the CS machines and your own. However, if you find that you do need a way to transfer files not under version control, you can install Fugu (Mac) or WinSCP (Windows). Follow the directions here to download, install, and use the appropriate program for your computer.


Time Required

Software development is necessarily practiced by doing, and implementing large software systems takes time. Students should expect to spend a significant amount of time outside of class doing readings and preparing for class, learning new skills through tutorial-style lab assignments, and completing a substantial project. This will require awareness of deadlines and careful time management. In addition, most assignments will be group assignments, requiring planning and coordination with your group.


Valid HTML 4.01!