PSU CS 300: Elements of Software Engineering

Summer 2009

Instructor: Bart Massey <>
Time: Monday/Wednesday 18:00-20:20 (6:00-8:20 PM)
Place: Shattuck Hall Room 244
CRN: 80463
Email List: <>

As always, this is a tentative syllabus. Everything here is subject to vast change with little notice. Course content and mechanics are described at the end of this document, so course participants should go there first.


Course Schedule

Pending Sessions

Week 1: Introduction to SE

  • Monday, 22 June: Course mechanics, goals; SE principles
  • Wednesday, 24 June: Initiating a software project
  • Reading: Code Complete chs 1-3, 35

Week 2: Personal Project Management

Week 3: Starting a Project

Week 4: Implementation

Week 5: SE Tools and Techniques

Week 6: Debugging

Week 7: Quality

  • Monday, 3 August: Last thoughts about coding
  • Wednesday, 5 August: Inspection, System V&V
  • Reading: Code Complete chs 14-16, 21

Week 8: Final Topics

  • Monday, 10 August: Deployment and Maintenance
  • Wednesday, 12 August: Final comments; final exam
  • Reading: Code Complete chs 32, 34



Code is available for the in-class coding demos we have done.

Web Resources

Software Engineering Resources


Integrated Development Environments

  • Eclipse IDE - Started life as a Java IDE. Now it does more.
  • NetBeans IDE - An easy-to use Java IDE, with plugins for other languages. Includes a GUI designer. Less complicated than Eclipse.
  • Emacs - Those who use it swear by it.
  • Vi-Improved (vim) - Those who use it swear by it. grin


  • GNU Debugger (gdb) - Eclipse, NetBeans, Xcode, and other IDEs with C/C++ support provide graphical-ish front-ends to gdb.
  • GNU Make - The ubiquitous make.
  • Splint - Static code analyzer for C++.

Source Control Management

About This Course

CS 300 is a first course in engineering software. The fluent ability to write programs and a strong understanding of computing are necessary prerequisites: students must have completed PSU CS 202 or equivalent.

This course has been previously taught in a substantially different form in Winter 2007:

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 difficulty is not principally the effort of implementation. The vast bulk of effort is spent 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.

A principal focus of this offering of CS 300 is on open 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:

  1. Recognize software systems as human artifacts for which their developers must take responsibility.
  2. Separate software development into independent phases for the purpose of controlling the process.
  3. Explain the importance of information hiding in development.
  4. Explain the significance (or lack of significance) of test coverage for software.
  5. Use iterative enhancement as a development technique.
  6. Participate in a developer-customer dialog about requirements for a particular software system.
  7. Develop a test plan for a software system.
  8. Design software to solve a problem of small-to-medium complexity.
  9. Implement a software design to create a working system that passes a user acceptance test.
  10. Test an implemented system according to an existing test plan, and correct any failures discovered.
  11. Use basic software tools under the UNIX system to aid in software development.
  12. 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 a great deal of project-oriented homework.


The course website,, will be one focus of communication. In addition, students will be required to sign up for the course discussion email list

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.


The course textbook

Code Complete (2nd ed)
Steve McConnell
Microsoft 2004

is available at the bookstore. There may also be additional readings as the course progesses.



There will be occasional homework assignments, as well as a course project. All homeworks and projects will be on an individual basis. Homeworks and projects will be graded in the UNIX / Linux environment; familiarity with this environment is assumed.


There will be an in-class Final examination. See the schedule for details.


The course project will be an individual project over about 6 weeks. The nature of the course project is still being determined.

Some students have posted their FinalProjectSubmissions for viewing.


Course grades will be allocated as follows:


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.


Currently, the CS laboratory facilities consist of 8 Linux machines in the Intel lab. However, work may be done on any of the Departmental UNIX or Linux boxes remotely, using the Windows lab machines or from home. Those with home or laptop UNIX / Linux boxes are encouraged to use them—make sure they're adequately backed up, though.

Laboratory work must follow "safety guidelines" to be announced shortly.

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 can to end your academic career. If you have questions, please contact me for clarification.