PSU CS 300: Elements of Software Engineering
Instructor: Bart Massey <firstname.lastname@example.org>
Time: Monday/Wednesday 18:00-20:20 (6:00-8:20 PM)
Place: Shattuck Hall Room 244
Email List: <email@example.com>
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.
- If you wish, share your final project with the rest of the class by posting a link in the FinalProjectSubmissions page
- FINAL PROJECT DUE FRIDAY, AUGUST 14, 2009 BY 5:00PM (PDT) Requirements
- 8/6/09 - git://svcs.cs.pdx.edu/git/ttt-score.git is available - see Code
- 7/23/09 - git://svcs.cs.pdx.edu/git/anagram.git is available - see Code
- 7/20/09 - Homework 2 added - see Course Schedule Week 5
- 7/1/09 - Homework 1 added - see Course Schedule Week 2
- 7/1/09 - Web Resources section added after Course Schedule (links for Work Breakdown Structures and Git)
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
- Monday, 29 June: Planning and executing a software project
- Wednesday, 1 July: Dev tools featuring SCMS
- Reading: Code Complete chs 4, 27, 28, 30
- Homework: Planning a project
Week 3: Starting a Project
- Monday, 6 July: Requirements gathering
- Wednesday, 8 July: Fundamentals of Design
- Reading: Code Complete chs 5, 9
Week 4: Implementation
- Monday, 13 July: Midterm; TBA
- Wednesday, 15 July: Pseudocode, programming languages and tools, Getting code right
- Reading: Code Complete chs 9-11
Week 5: SE Tools and Techniques
- Monday, 20 July: Testing Basics & Unit Test
- Wednesday, 22 July: Design Methods: OO and ADT's
- Reading: Code Complete chs 6, 22
- Homework: Coding a unit
Week 6: Debugging
- Monday, 27 July: Debugging and diagnostic reasoning
- Wednesday, 29 July: Coding and debugging clinic
- Reading: Code Complete chs 7, 8, 23
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.
- git://svcs.cs.pdx.edu/git/anagram.git finds words that are anagrams of a given word.
- git://svcs.cs.pdx.edu/git/ttt-score.git scores a Tic-Tac-Toe position.
Software Engineering Resources
- Ikiwiki Formatting - Basic formatting for this Wiki engine.
- Work Breakdown Structures - Info, examples, and video (not SE specific)
- Work Breakdown Structure article - more on WBS (not SE specific)
- Work Breakdown Structures - the all-knowing Wikipedia
- SE Work Breakdown Structures - a PDF from a German(?) SE course 2002
- Sun: Java SE 6 API - The full API reference.
- Sun: Java Tutorials - Decent tutorials with fair quantities of sample code.
- GNU: Compiler for Java (gcj) - For compiling with gcj.
- Sun/Community: OpenJDK - The recently open sourced java developer kit.
- Portland Java User Group Links - A great list of links to java 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: http://wiki.cs.pdx.edu/cs300-winter2007.
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.
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.
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, http://wiki.cs.pdx.edu/cs300, will be one focus of communication. In addition, students will be required to sign up for the course discussion email list http://wiki.cs.pdx.edu/mailman/listinfo/cs300-discuss.
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)
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.
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.