CPSC 329 | Software Development | Fall 2019 |
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:
This course will address how to achieve those points. In addition, students will gain:
|
---|---|
Prerequisites |
CPSC 225 is required. |
Textbook |
There is no textbook to purchase. Material will be handed out or posted on the course webpage. |
Software |
All of the 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 will need:
For Java 11 and JavaFX, see Getting JDK and JavaFX for information on obtaining and installing the right packages. The AdoptOpenJDK site is recommended if you aren't running Linux and installing through your distribution's package manager. Integrated development environments (IDEs) such as Eclipse make the development of larger programs easier. You can download Eclipse 2019-06 here - select either the "Eclipse Installer" at the top of the page or the "Eclipse IDE for Java Developers" version partway down the page and choose the appropriate version for your computer (Mac, Windows, or Linux). It is recommended that you switch to this version of Eclipse even if you have an older version already installed. Some Eclipse setup (including installing two plugins, Subclipse and PlantUML) will be done in lab. You will need to carry out the same steps to configure your own installation. In addition, you will likely need to also install graphviz in order for PlantUML to work. If you are running Linux, you may be able to use your package manager to install a graphviz package. For Windows and Mac, download graphviz here. Once graphviz has been installed, go to Window->Preferences in Eclipse, then click on the "PlantUML" category and check the "Graphviz path" information - if the dot executable is not found and you don't get an "installation is OK" message, fill in the "Path to the dot executable of Graphviz" to tell Eclipse where it is. Finally, you will need a way to transfer files between your computer and the department filesystem. Version control will be used and that provides the best mechanism for addressing this issue, but if you find that you need a way to transfer files not under version control, the SFTP section of "Using Linux at HWS" provides information on obtaining software to do this. |
Time Required |
Software development is necessarily practiced by doing, and implementing large software systems takes time. Students should expect to spend the bulk of their time outside of class working on projects. These projects will build on each other, requiring awareness of deadlines, careful time management, and steady effort throughout the course. In addition, most assignments will be group assignments, requiring planning and coordination with your team. In addition to projects, there will be weekly labs and sometimes reading and/or short class preparation exercises. Labs introduce new software and skills, and are intended to be short enough that most, if not all, of the lab can be completed during the lab period with diligent effort. (Anything not completed during lab will need to be finished outside of class.) |