CSCE 240 -- Spring 2010
Introduction to Software Engineering
Duncan A. Buell
Department of Computer Science and Engineering
University of South Carolina
Columbia, SC 29208
Office hours: 8:30-9:30am T-Th and by appointment
Class time: 9:30-10:45 am T-Th, Room 2A21 Swearingen
Office hours: 8:30-9:30am T-Th and by appointment.
My home page
The official syllabus for this course is in development.
This is the Moodle site
for this course.
Most of the relevant information, assignments, grades, and
so forth, with be put up on the Moodle site.
Unlike this web page, which is available to all and sundry
around the world, the Moodle website is password limited
to students in this class.
This page will be changing throughout the semester.
You are responsible for reading this page on a regular basis,
which means at least as often as once per class/lab event.
The material presented on this page and on the Moodle site
is copyrighted material.
Although you own, under USC rules, your homework and
program submissions, the copyright for the source text for
the homeworks, programs, and other material remains either
with the textbook author or with the instructor of this
It is a violation of copyright to upload this material to any
of the various homework-sharing websites.
Further information on copyright can be found at the official
the official website,
which you are encourage to consult both to help you ensure
that you are in compliance with existing law as well as to
know how to protect your own intellectual property.
Rules, expectations, etc.
You are expected to read this website and the Moodle
site regularly and carefully.
You are responsible for the material on these sites,
including rules and scheduling information.
You are expected to know who I am, how to get in touch
with me by email, and how to find my office in person.
(See the first point above.)
If you google "duncan buell", then my USC web page is
what comes up first on the list.
There is no excuse for someone in a computer science
class not being savvy enough to find my contact information.
You are expected to turn in assignments on time to the
When you turn things in to the dropbox, it is your
responsibility to check that in fact the material has
been stored as it should be, that the right number and
kind of files have been uploaded, and that the case
sensitivity of file names is as it should be.
The standard platforms for this class are the Linux
systems in the departmental labs, and case sensitivity
of file names in Linux is different from that of Windows.
You are responsible for verifying that your uploads
meet the specifications of the assignments.
You are also required to print out the web page
verifying your submission, properly timestamped, that
says that the dropbox has accepted your submission.
This is your "receipt" for submissions, and unless you
have turned this receipt in to me I will not accept as
an excuse that the dropbox
has moved your assignment elsewhere.
Make sure your name appears on the page you turn in.
If for some reason the dropbox is not functioning, you should
immediately send me an email with your
This email must have a timestamp before the dropbox deadline.
Late assignments will be penalized.
(See the first two points above.)
Assignments will usually have due dates that are just
before class time on a class day.
The receipts should be submitted at class time on the
day the assignment is due.
You are expected to read your email as indicated below.
You are expected to attend class.
Attendance will be taken, and it will affect your grade.
See below for details.
The Student Success Center has found (to no one's great
surprise) that your GPA is likely to improve by a full
one-half point simply if you attend class.
This course has a prerequisite of a grade of C or better
CSCE 146 and in CSCE 215.
It is a fundamental premise of a computer science
education that you become facile with tools, operating
systems, programming languages, programming environments,
and the like.
Standards change rapidly, and tools and languages go in
and out of fashion.
You will need to be adaptable, and the purpose of an
(instead of mere skills training) is that you
learn enough to be adaptable to new tools.
In the 145 and 146 courses the tools used were Eclipse,
Java, and Windows platforms.
By the time you finish this course with a C or better
you should have become familiar with the tools of
Unix/Linux, C++, and command-line-oriented programming
as well as the more general concepts that will be
presented in this class about how not to make the common
and obvious mistakes that are made constantly in
You will not be successful in this course if you
insist on being nothing but a Wintel clickmeister.
You should read the text material before coming to class.
If we have covered all of a particular section or chapter,
you should take the initiative on your own to read the next
section or chapter.
Since the text is intended for students who have never
programmed, and you have already had a year, we will
be covering the first seven chapters or so in a different
The overall plan will be to cover C++ programming by
analogy with Java programming, since they are very
similar in the basics.
Starting about the eighth chapter, we will progress
more in sequence, since the later topics are more
unique to C++.
You have three university-sponsored email addresses:
This last id is what replaces the old
Although these are three different addresses, the first
two are aliases for the
account, and you are expected to be reading email
sent to that account.
There is also a CSE department email alias for CSCE 240, namely
in the domain
This alias sends email to the CSE departmental login
that you get with this course, and then that address is used
as an alias for the
A mass mailing to the entire class will be done through these
Actually, any of you can send mail to this alias.
Texts, References, and Links to Useful Information
The text for this course is
We will be using the fourth edition.
It is possible that the content of the third edition would be ok
if that happens to be much cheaper, but you are responsible for
verifying page numbers, homework problem numbers, etc., that tend
to be what change from one edition to the next.
Department and College Links:
Fedora (Red Hat).
Other Linux distros.
Place to order it all cheap
WARNING: Not all Linux distros implement exactly the same
C++ compiler or libraries.
If you have your own version of Linux on a machine under
your control, you should be careful to test on the lab
The lab version of Linux, for example, has a couple of
slight differences from vanilla Ubuntu.
Part of knowing about software development in general is
knowing how to verify that things work, and part of mature
approaches to software development is doing that verification.
Cygwin: a linux-like environment for Windows:
The vi editor:
Links to other tools:
I personally use vi and not emacs.
I recognize, though, that this is a theological and not a technical
decision that people make.
Emacs has the advantage that one can do compilation and
debugging without leaving emacs, but it also requires
knowing more in terms of magic keystrokes (no pain, no gain).
You are certainly free to use emacs, but I won't
"support" it in the sense that I won't be able to answer questions
about how to do magical function X inside emacs.
Demonstrate mastery of object oriented programming concepts:
inheritance, polymorphism, and operator overloading.
Demonstrate mastery of pointers, iterators, memory management
including object creation and destruction, and parameter passing
in C++ and Java.
Develop C++ code in a Unix Environment utilizing the C preprocessor,
the debugger (gdb), make, source code revision systems (sccs),
utilities such as those for transferring files to and from Unix
Demonstrate mastery of template functions and classes;
understand underlying implementation of major containers
in the STL.
Develop object oriented models using UML.
Unix Programming Environment: Unix tools, C preprocessor, Make,
Shell, I/O redirection, debugging.
Pointers: Pointer manipulation, functions and function pointers,
Basic class management: constructors, destructors, data hiding,
Memory management: object creation and destruction, memory leak.
Advanced C++ features: operator overloading, iteration, special
containers, inheritance, code reuse, multiple inheritance,
virtual functions, polymorphism, templates, template libraries.
Introduction to UML and object oriented modeling: use-case models,
object identification, specifying static behavior, activity diagrams,
collaboration diagrams and sequence diagrams,
specifying relationships: generalization/specialization, aggregation,
associations including multiplicity and roles, dynamic behavior
using state diagrams.
Note: Course contents are subject to change without previous notice.
Tests and Assignments
The midterm exam will be on Tuesday 16 February 2010.
This will allow me to get back the exams in class on Thursday
The last day to drop the class with a "W" grade is the
following Monday, 22 February.
Homework assignments are to be written outside of class.
They will be turned in electronically to the appropriate dropbox,
and unless they are specifically assigned as a group project they
must be done individually as your own work.
See below for more information on the issue of academic integrity
and how to judge what will be viewed as "your own work".
In order to be consistent and fair to all students, I report
any and all instances of violations of the academic integrity
regulations to the appropriate university office.
See below for more details.
The final exam will be cumulative.
The registrar's calendar says that final exam is scheduled for
Thursday, 29 April 2010, at 9:00 a.m.
HOMEWORK ASSIGNMENTS AND THEIR STANDARDS
The homework assignments can be found
on the Moodle website for this class.
The homework assignments will have very strict standards
and must be written according to the specifications or you
will lose points.
The style sheet standards can be found on the Moodle website.
Assignments will have due dates.
Unless otherwise specified, the usual deadline will be that
assignments are to be sent to the dropbox by 9:40am on the day
the assignment is due, and the dropbox will be closed as of 9:40am.
Late assignments will not be accepted without prior arrangement
to accommodate truly extraordinary circumstances.
Planned Grading Scheme
(250 points = 20 + 35 + 35 + 35 + 35 + 45 + 45)
Attendance and Grades
It has been found, and should come as no surprise to anyone,
that attendance at class correlates positively with your GPA.
I will be taking attendance from time to time in various ways.
The university policy on attendance can be found
It reads in part,
"Absence from more than 10 percent of the scheduled class sessions,
whether excused or unexcused, is excessive and the instructor may
choose to exact a grade penalty for such absences."
For every three (3) unexcused absences, your grade
will be lowered by one full letter.
The judgement as to accepting the excuse is mine.
Illness, family emergencies, and such are excusable.
Returning home late from Myrtle Beach to avoid the traffic jam
is not an excusable absence.
Note also that the exams count a total of 50% of your grade.
Your grade is heavily dependent on your homework assignments.
What this means is that there is in the grading system a strong
incentive for you to keep up to date with assignments and to come to
class and labs.
It is NOT possible in this class to slack off through the
semester and then somehow make up the difference with a strong final.
The final exam just doesn't count enough to pull up your grade, not
even when combined with the two regular exams.
Notwithstanding the 50-50 distribution of grade based on homeworks
and exams, it is necessary that you do acceptably well on both
homeworks and exams in order to get a C or better in this course.
If you have the highest scores in the class on the programming
assignments, and the lowest scores in the class on both midterm and
final, for example, you can expect to receive an F for the course.
Unless otherwise indicated, there are no bonus points that can
be earned in this class.
If you want to total up points so as to get a good grade, then do
the homeworks and do well on the exams.
Some of you may find this course difficult.
If so, you are encouraged to talk with some of your fellow students
in the ACM chapter, because ACM can provide both formal and informal
tutoring and assistance.
Everything we will use in this course either comes with the textbook
or is free and available on the web for download.
However, things are are available for download tend to change versions
on a regular basis.
Your programs will be graded as if they had been compiled and run
on the linux lab machines in the department.
If you choose to use a different development environment, compiler,
or operating system (even a different flavor of linux), you do so at
your own risk and must provide me with whatever it takes to test your
submissions with no greater effort.
Actually, if you think about it even for just one moment, it's clear
that whatever "software engineering" is, it involves the production of
a piece of code that can be executed effectively by its intended user.
Since the intended user of your submissions is me, it becomes part of
the core material of this course that you are responsible for making
your code work if run by the intended user on the intended platform.
Assignments and examination work are expected to be the
sole effort of the student submitting the work.
Students are expected to follow the
University of South Carolina Honor Code
and should expect that every instance of a suspected
violation will be reported.
Students found responsible for violations of the Code will be
subject to academic penalities under the Code in addition to
whatever disciplinary sanctions are applied.
There seems to be a widespread misunderstanding of the concept of
"your own work."
In addition to the USC Code, some good sources of text for what is or
is not acceptable behavior are the
academic honesty policy statement from Harvey Mudd College, the
policy statement from Professor Steven Huss-Lederman at
Beloit College, and the text of part of the
collaboration policy statement from MIT.
You can expect your programming assignments to be checked against
those turned in by other members of the class as well as code that I can
find on the web.
I expect the correlations between your work and that of others
to be minimal.
I can also offer an operational definition of what you can do and
of how you can distinguish "learning from a group discussion" and
"turning in someone else's work."
If, after having participated in a group activity, you can walk
away, put the books down, have lunch, and then come back afterwards
to re-create from your own head the material and techniques you
discussed as a group, then you can legitimately say that you have
learned from the group but the work you turn in is your own.
A second operational definition of what is acceptable might be
something like the following:
It is not relevant if
feel that what you have written is your own work.
It is not relevant if
feels that what you have written is your own work.
What is relevant is if
your competitor's attorney
feels that what you have written is not your own work.
For the sake of time and our joint sanity, please do not submit
grey material whose whiteness or blackness can only be determined
after a lengthy and detailed examination.
On the Proper Use of Computing Resources
Students are expected to be aware of the
on use of computing resources, including the
Student Guidelines for Responsible Computing,
as well as the
policies on proper use of computing resources.
Every instance of a suspected violation will be reported.
Students should be aware that neither the instructor nor the
department are responsible for making alternative arrangements should
improper use leading to revocation of access to departmental or
college resources make it impossible for you to complete the
programming assignments on time.
On the Nature of Academic Work
Students might also find relevant an
from a professor at Georgia Tech.