With appologies to Sun Tzu
Students are assumed to have a good understanding of programming and
exploiting the features of programming languages and libraries.
But interesting software is sufficiently subtle and complex that it is not usually
possible to sit down, think about it for a few minutes, and start coding.
Building working software requires tools, discipline, and methodology.
This is a course in software development concepts, issues and methodologies,
whose goal is to develop:
This is a very practical course dealing with real-world problems, the issues that complicate them, and the approaches that have been successfully applied to their solution.
This is a concept-rich course and there is a great deal of reading (averaging 45-50 pages per lecture). A few days will be shorter than this, and one of them is much longer. Fortunately, I think you will find that most of the material is simple enough to be understood in a single reading.
The primary text for this course is Steve McConnell's Code Complete (2nd edition) This is an excellent book, available in paperback, that you will probably keep for a very long time, and replace when you eventually wear it out.
For more general Software Engineering topics, rather than force you to buy an expensive Software Engineering text (half of which would be uninteresting), I have attempted to assemble a collection of small, publically available articles on selected topics. URLs for all of these articles can be found on the reading and lecture schedule.
Lecture, Reading, Lab, and Exam Schedule
It is not my preference to use the lectures to review topics that are well presented in the reading. I hope to use the lecture time to:You can help to enrich the quality of the lecture sessions by:
All lecture slides will be available on-line before the start of each lecture. This should simplify your own note-taking and give you a starting point for exam preparation. It will also give you the opportunity to see what topics I am planning to discuss in each lecture. If you find (after reading or a lecture) that there are additional topics you would like to discuss, please post them to the course discussion forum.
Years of experience have consistently taught me that the greatest single predictor of how much a student will get from a lecture is how well they understood the material before the start of the lecture. I have found (and student surveys regularly confirm) that giving daily quizzes on the assigned reading gets students to do the reading before the lecture, and greatly enhances learning. A secondary purpose of the quizzes is to enable me to assess what concepts you are having trouble with, so that I can give them greater emphasis in future lectures.
I attempt to choose quiz questions, based on key concepts, that few people could answer from common sense or general knolwedge, but should not be too difficult to answer the day after a single reading. Each quiz will have four or five questions, typically asking
Most quiz questions can be answered with a single sentence (or even a few words). Since the quizzes are timed, short answers are pretty clearly the best.
There are two exams: a mid-term, and a (whole course) final. These are closed book exams. The purpose of these exams is to determine whether or not you understand the key concepts that have been discussed in the preceding lectures and chapters.
A typical exam will be comprised of roughly 10-20 questions. Some may ask for definitions and examples, but most will ask you to describe how or why something works, to contrast related concepts, to explain which principles are applicable, or to predict what would happen in some situation. The vast majority of these questions will pertain to designated key concepts, and in most cases the answers will have been presented in the text, the lectures or both. Most exam questions have brief (2-4 sentence or a simple diagram) answers. Typical types of questions might be:
Different study techniques are more effective for different people. This is a general suggestion for review, that is meant only to guide your own study efforts:
By the end of this course, the students will have not only studied, but actually performed, all of the major steps of a large software project. It is hoped that these exercises will consolidate the learning of these skills and well-prepare students for larger projects to come. There is, in some sense, only one project for the entire course, but it is broken down into a few distinct phases (involving very different activities):
It is traditional, in Software Engineering courses, to have students build a large project. This is intended to give students the opportunity to apply many of the skills covered in the reading and lectures. And I must concede that building software is the most obvious form for projects in a Software Engineering class to take. But, in looking at what students have actually done in these projects, I have found a few major concerns:
In a typical Software Engineering project, students spend (at best) 25% of their time on these activities, and 75% of their time coding and debugging. This is realistic (in that it mirrors real software development) but it doesn't provide much opportunity for the students to apply the taught techniques and develop the associated skills.
The typical class project involves a one digit number of staff-months of work: the size of a single task in many large software projects. While these projects are highly educational, and a necessary step in the development of discipline and skills, they seem (to me) too small to demand significant exercise of Software Engineering (as opposed to programming) skills.
If this course is to make a difference, it must address these problems.
Another goal of these projects is to develop organizational, planning, time management, and post-mortem review skills. This is accomplished by not breaking the project into small pieces, but rather, requiring the students to do this. The students are not merely responsible for producing the required work products, but for creatining and managing team efforts to produce those work products. The project grades are based, in part, on the quality of the plans, the dilligence that was paid to them, and the insights gained in retrospect. It is further hoped that the post-mortem reviews will help consolidate learning of both process and technical lessons.
These are, large team projects; Large enough to give you the opportunity to encounter a wide range of requirements, archictectural, planning, execution, and group problems ... from which I hope you will learn lessons that will enable you to recognize and evade many tragedies in your future lives.
Thus the assigned projects should be seen, both in terms of the primary technical skills they exercise, and successively more demanding sets of project management responsibilities. I assert that it is these skills (and not additional programming ability) that are the primary focus of this course.
The greatest portion of the grade is almost evenly divided between exams (your mastery of concepts) and projects (your ability to apply skills and techniques).
| Weight | Item |
|---|---|
| 10% | quizzes: daily |
| 20% | exam: midterm |
| 20% | exam: final |
| 12.5% | project: 1. proposal |
| 12.5% | project: 2. architecture |
| 12.5% | project: 3. planning and design |
| 12.5% | project: 4. implementation and testing |
While a weight is shown for each project, there will not be a "single grade" for each project. Each of the projects will involve a great many activities and deliverables, each of which will be individually graded (and many of which will each be the subject of an entire lecture).
For each project submission most of the grade will be a group-score (based on the overall quality of the submission). A smaller portion of the grade will be personal, based on and divided (more or less equally) between the share and quality of each person's individual contributions to the overall effort. This weighting is because:
Students are encouraged to study together, and to discuss general problem-solving techniques that are useful on assignments; but all exams are to be completed individually without assistance or references; when working on the projects students must not share work with others (outside their team), and must specify the sources for all non-original parts of submitted work.
If you have questions about the policy, please discuss them with me. Be warned that I take Academic Honesty deadly seriously. I use a variety of tools and techniques to detect plagiarism, I report all suspected cases to the Dean's office, and I seek full prosecution of every case I report.
Please, do not test me on this matter.