PSU CS 300: Elements of Software Engineering
Instructor: Bart Massey <firstname.lastname@example.org>
TA: Yu Yang <email@example.com>
Time: Tuesday/Thursday 12:00-13:50 (noon-1:50 PM)
Place: Hoffman Hall
Instructor Office Hours: Wednesday 14:00-18:00 (2:00-6:00PM)
TA Office Hours: Monday 14:30-16:00 (2:30-4:00PM)
Guest/Enrolment Password: 13ftw
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. 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. This one is quite a bit different from any of those: it focuses almost entirely on practical skills for individual developers, with a weak emphasis on "traditional" software engineering terminology, practices, etc.
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.
However, a code-centric approach to software development has some notable advantages. Thus, this course will teach principles of software engineering by teaching practices of software development.
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 (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.
The course textbook
Code Complete: A Practical Handbook of Software Construction (2nd ed.)is available at the bookstore.
The course project will be in Python. If a text is desired for learning Python, I recommend
Python Programming for the Absolute Beginner (3rd ed.)
Cengage Learning PTR 2010
There may also be additional readings as the course progesses.
The coursework will consist partly of an individual project to be performed over the 10 weeks of the course. 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 may be a component of assignment grading. In this case, a student will be graded both on the assignment itself and on the student's grading of the assignment of others.
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.
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.