PSU CS 300: Elements of Software Engineering

Fall 2010

Instructor: Bart Massey <bart@cs.pdx.edu>
TA: Kevin Dyer <kdyer@cs.pdx.edu>
Time: Tuesday/Thursday 18:40-20:30 (6:40-8:30 PM)
Place: Cinema Bldg room 92
CRN: 14441
URL: http://wiki.cs.pdx.edu/moodle/course/view.php?id=4

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 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 was taught in a somewhat different form in Summer 2009. It also was 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.

Communication

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.

Lectures

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.

Office Hours

Our TA has graciously agreed to hold office hours Tuesdays 15:30-17:00 and Thursdays 12:00-13:00 in the FAB "Fishbowl" lounge. This is a lot of office hours, so we may modify this downward depending on demand.

Readings

The course textbook

Object-Oriented & Classical Software Engineering (7th ed)
Stephen Schach
McGraw Hill

is available at the bookstore. The textbook will be followed only loosely, so the 6th edition should also be fine. There may also be additional readings as the course progesses.

Coursework

The coursework will consist largely of a project to be performed over about 9 weeks. Students will be grouped into teams, but each student will be responsible for specific work, constituting 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.

Grading

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.

Laboratory

Currently, the CS laboratory facilities consist of 17 Linux machines in the Linux 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.

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.