Sophisticated software systems play a prominent role in many aspects of our lives, and while programming can be a very creative and exciting process, building a reliable software system of any size is no easy feat. Moreover, the ultimate outcome of any programming endeavor is likely to be incomplete, unreliable, and unmaintainable unless principled methods for software construction are followed. This course explores those methods. Specific topics include: software processes; specifying requirements and verifying correctness; software architectures; concurrent, parallel, and scalable systems design; testing and debugging; and performance evaluation.
Format: Lectures/labs. Evaluation will be based on homework, programming assignments, group work, presentations, and exams.
Prerequisites: CSCI 136. Preference will be given to current or expected Computer Science majors; those who have not yet taken a project course.
Course webpage: See instructor.
Taught by: Freund
Scheduled offerings:
Fall 2015
326-01 (LEC) TR 8:30-9:45
326-02 (LAB) R 2:35-4:00
Past offerings:
NA