PSU CS 300: Elements of Software Engineering

Fall 2015

Instructor: Bart Massey <>
Time: Monday/Wednesday 14:00-15:50 (2:00-3:50 PM)
Place: Neuberger Hall 462
CRN: 10998

TA: Hao Wu <>
TA office hour: Thursday 12:30-2:30 PM at FAB fishbowl

As always, this is a tentative syllabus. Everything here is subject to vast change with little notice.

About This Course

CS 300 is a first course in developing software: going beyond programming to the end-to-end process of producing software that is fit and useful. The ability to write simple programs in a reasonable way and a strong understanding of computing are necessary prerequisites. Students must have completed PSU CS 202 or equivalent.

There have been multiple past offerings of this course, with a variety of focuses. This one focuses on practical skills for individual developers, in addition to an emphasis on "traditional" software engineering terminology, practices, etc.

Course Description

The catalog says:

Practical techniques of program development for medium-scale software produced by individuals. Software development from problem specification through design, implementation, testing, and maintenance. The fundamental design techniques of step-wise refinement and data abstraction. A software project will be carried through the development cycle.

CS 300 is the first of two required project-oriented software engineering courses at PSU; the second is the Capstone course. CS 300 focuses on individual development of small-to-medium-scale programs: on the order of 5000 lines of code in a typical high-level language.

It turns out that even at these smallish scales, software development is difficult. Effort is spent not only on implementing the program, but on understanding the problem to be solved, specifying the solution, designing the solution, validating that the problem has been solved properly, and maintaining the resulting system. CS 300 is intended to teach the principles and techniques behind these activities.

This offering of CS 300 will emphasize source software. The principles, techniques, and tools of open source are revolutionizing not just large-scale software development, but individual software development as well. Your instructor brings special expertise in this area, and will teach the comparisons and contrasts between classical and open-source approaches.

Course Goals

The catalog says:

To train students in developing medium-scale software, and to give practice in such a project. The purpose is to prepare them for projects in subsequent courses such as CS 321.

The catalog's list of course goals is that students be able to:

  • Recognize software systems as human artifacts for which their developers must take responsibility.

  • Separate software development into independent phases for the purpose of controlling the process.

  • Explain the importance of information hiding in development.

  • Explain the significance (or lack of significance) of test coverage for software.

  • Use iterative enhancement as a development technique.

  • Participate in a developer-customer dialog about requirements for a particular software system.

  • Develop a test plan for a software system.

  • Design software to solve a problem of small-to-medium complexity.

  • Implement a software design to create a working system that passes a user acceptance test.

  • Test an implemented system according to an existing test plan, and correct any failures discovered.

  • Use basic software tools under the UNIX system to aid in software development.

  • Evaluate emerging formal software development methods.

Seems like enough for 10 weeks.

Course Mechanics

This course is a high-effort essential part of the PSU undergraduate CS curriculum. There will be lectures, examinations, and an individual project. The project will be graded periodically throughout its development as well as at the end. Anonymous peer review will be a major part of the project activity.


The course website (see above) will be the focus of communication. Students are encouraged to contact the instructor any time by email for an appointment if there are things that seem worth discussing. Special and/or regular office hours will be instituted if demand warrants.


The course lectures will cover a variety of topics, and will include guest lectures. Please attend them all; they are required and should be useful.


There is no course textbook. Readings will be provided.


The coursework will consist primarily of an individual project to be performed over about 8 weeks. Each student will be responsible for design, development, testing and maintenance of several thousand lines of code. Assignments will consist of delivery and evaluation of milestone work products on the project; in addition, the project will receive a final overall grade.

There may also be other homework assignments.


Due to the size of the course and the volume of material to be covered, late assignments will not be accepted. A grade of 0 may be given to any assignment not turned in on time; failing any one assignment is grounds for failure in the course.

Anonymous peer evaluation will be a component of assignment grading. A student will be graded both on the assignment itself and on the student's grading of the assignment of others.


In lieu of a textbook, students will be expected to obtain a Raspberry Pi 2 model B as a platform for the course project. This hardware is available on Amazon and Sparkfun for about $40. There are a few other things you will need:

  • You will need at least an 8 GB microSD card for storage for your Pi. Ideally, "speed class 10" or better would be a good thing. I am using the SanDisk Ultra 8GB, available from Amazon for about $8.

  • You will need access to some computer or peripheral that can write the SD card initial boot image. Windows, Mac or Linux will all work fine for this.

  • You will need a micro-USB cable and some sort of USB port or charger to power your Pi. Recommend a minimum of 1A. You can probably use a USB port on a computer for this, but a wall charger is preferred.

  • Access to an HDMI-capable television or monitor and a USB keyboard for booting the system for the first time is helpful.

  • You will need either an Ethernet cable and someplace to plug it in, or a USB 802.11 (WiFi) adapter. I am using the Edimax N150 for 802.11, available from Amazon for about $10.

  • You will need access to some kind of computer to SSH into your Pi.

Academic Honesty

If you do something that violates the University's or the Department's Student Conduct code, there will be the most severe penalties I can manage. In particular, if you plagiarize (use other people's ideas, text, or code without acknowledgment) I will do what I legally and ethically can to end your academic career. If you have questions, please contact me for clarification.

Last modified: Thursday, 8 October 2015, 5:36 PM