cs487 - Fall 2012


Quick Links

Study of the principles and practices of software engineering. Topics include software quality concepts, process models, software requirements analysis, design methodologies, software testing and software maintenance. Hands-on experience building a software system using a life cycle model. Students work in teams to develop all life cycle deliverables: requirements document, specification and design documents, system code, test plan, and user manuals.

Prerequisite: (CS-331 or CS-401 or CS-403) and CS-425.

Before you get started

This class requires you to do a LOT of work between reading assignments, a pretty large project, and two exams.

Grading is quite strict as well, in that failure to get a passing grade in, say, the project will earn you a failing grade in this class. Put it another way, you cannot get around work by skipping assignments and hoping to pass based on a good class average.

^ Top ^


Section 1
(CRN: 11059, Main Campus)
Section 2
(CRN: 11061, TV Channel 403)
Section 3
(CRN: 11062, Internet)
Section 4
(CRN: 12585, India)
Instructor Virgil Bistriceanu
Office hours Mon, Tue 5:30 pm - 6:15 pm
Office SB-214
Phone (847) 219-9142
Fax (312) 278-0427
e-mail bistriceanu@iit.edu
Lecture Mon 6:25 pm - 9:05 pm, room SB-104
Teaching Assistant
  • Name: Lin Gan
    • Office: SB-115
    • Office Hours: Tue 3:00 pm - 4:00 pm, Wed 10:00am - 11:00am
    • Phone: 312-567-5705
    • email: lgan@iit.edu

^ Top ^



  • Engineering Long-Lasting Software: An Agile Approach Using SaaS and Cloud Computing, Armando Fox, David Patterson, ISBN-13: 978-0984881215

Other books

I highly encourage you to read these books, you'll discover that you'll keep them around you for your entire career as a professional Software Engineer.

  • The Pragmatic Programmer: From Journeyman to Master, Andrew Hunt and David Thomas, Addison Wesley, ISBN-10: 020161622X, ISBN-13: 978-0201616224
  • Surviving Object-Oriented Projects, Alistair Cockburn, Addison Wesley, ISBN-10: 0201498340
  • Code Complete: A Practical Handbook of Software Construction, Steve McConnell, 2nd edition, Microsoft Press, ISBN-10: 0735619670, ISBN-13: 978-0735619678
  • The Mythical Man-Month: Essays on Software Engineering, Frederick P. Brooks, Addison Wesley, ISBN-10: 0201835959, ISBN-13: 978-0201835953
  • Peopleware: Productive Projects and Teams, 2nd edition, Tom DeMarco, Timothy Lister, Dorset House, ISBN-10: 0932633439, ISBN-13: 978-0932633439
  • Refactoring: Improving the Design of Existing Code, Martin Fowler, Addison Wesley, ISBN-10: 0201485672
  • Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin, Prentice Hall, ISBN-10: 0132350882, ISBN-13: 978-0132350884
  • Software Engineering (9th Edition), Ian Sommerville, Addison Wesley, ISBN-13: 978-0137035151

^ Top ^


  • Midterm: 25%
  • Final: 30%
  • Project: 45%

The following grading scale will be used to determine your grade in this class:

  • A: 90 - 100
  • B: 80 - 89
  • C: 70 - 79
  • D: 60 - 69 (this grade may not be assigned to graduate students)
  • E: 0 - 59 This is a failing grade!
To pass this class you will need to have the following marks:
  • 60% for the project, and
  • 60% in the final exam, and
  • The overall average is 60+ as well

Please read this again since it is not your typical grading policy.

Class participation will help settle borderline grades. While class attendance is not taken, your instructor believes that regular class attendance is important and expects students to actively participate in class. Questions and comments are always welcome.

^ Top ^

Late Work

There is no late work in this class, really. The deadline for the project is the last week of class, which means that if you fail to deliver, the only things you can get are a failing grade or an incomplete, depending on circumstances.

Same thing for the weekly project status updates that you have to deliver to your peers, live if you are in the main section, or in writing if you work on the project individually. If you don't have your status update, then you'll get penalized as and we move on.

^ Top ^

Exceptional circumstances

Your teacher will try to accommodate you in those cases that are beyond your control, such as medical and personal emergencies. Please note that, based on circumstances, the teacher may decide to assign you an incomplete grade, "I", or otherwise ask you to drop the class.

^ Top ^

Incomplete ("I") Grades

Yes, you can get an incomplete in this class even if you're not dealing with a personal emergency. Here are the conditions:

  • It's not automatic; you have to request an incomplete from your instructor before final grades are posted.
  • It's a single piece of work that's holding you back. For example, you forgot it's finals day and failed to take the final exam. Well, I can give you an incomplete for that. However, I cannot give you an incomplete if you've failed to get a passing grade in the project and you failed to get a passing score in the final.
  • You accept whatever work I'll be assigning you to remediate the incomplete; I promise you that the work will be relevant to this class, however it may not be the exact same as the work you just missed. For example, you're requesting an incomplete because you failed to submit a homework and your homeworks average is below 60: in this case I might ask you to just do the homework, or otherwise give you a programming assignment instead, or a presentation, etc.

^ Top ^

Academic Honesty

Academic dishonesty will not be tolerated. IIT has a strict academic honesty policy; here are the top points:

  1. The misrepresentation of any work submitted for credit as the product of a student’s sole independent effort, such as using the ideas of others without attribution and other forms of plagiarism.
  2. The use of any unauthorized assistance in taking quizzes, tests or examinations.
  3. The acquisition, without permission, of tests, answer sheets, problem solutions or other academic material when such material has been withheld from distribution by the instructor.
  4. Deliberate harmful obstruction of the studies, research or academic work of any member of the IIT community.
  5. Making material misrepresentation in any submission to or through any office of the university to a potential employer, professional society, meeting or organization.
  6. The intentional assistance of others in the violation of the standards for academic honest.

You can read IIT's Code of Academic Honesty here. You should read it until you fully understand it. A good way to test whether you understand it is to try to explain it to somebody else.

^ Top ^


Exams are open-book(s), open-notes. You may bring with you any notes you want, however you may not share them with anybody else during the exam.

During the exam the use of communication devices such as phones, laptops, etc. is not allowed. You may bring with you a calculator.

^ Top ^

Programming Language(s)

For any of the assignments in this class, including the project, please feel free to use any of the free and/or open-source (FOSS) object-oriented programming languages in the set { Java, Ruby, JavaScript, Python, PHP, Objective C }.

Work done using languages other than specified above, as well as the linking of free and open-source software with proprietary 3rd party libraries will not be accepted.

To learn more about free software check out the Free Software Foundation.

You should also know that free software is not the same thing as open-source software, this article from the GNU foundation clarifies the matter for you.

^ Top ^

Test Environment

All programming work you do for this class will be tested on our computer(s) running a fresh installation of Ubuntu 12.04 (Precise Pangolin).

I'm sorry, but the fact that your code runs on your computer and not on ours is not enough to earn you credit for your work.

If you've been using Linux, then this requirement is very easy to satisfy. If you're new to Linux, then you'll have some learning to do, which is a very good and valuable thing.

We're not going to test under any version of Windows, nor are we going to do it under any other Unix variant other than the one described above.

Even if your application happens to be a web application, we should be able to check out the code from your repository, follow the build instructions, deploy locally and be able to test it using a good browser such as Firefox, Chrome, or Safari.

If you're building a mobile application, then we'll use the simulator/emulator that comes with iOS or Android.

^ Top ^

Unit Testing

We're all tired of bad software, whether because it crashes when we least expect it or because of security holes that allow the bad guys to take over our systems and identities. We all pretty much despise software maintenance, in particular when we're asked to modify code that we never touched, don't really understand, and have no way of making sure our changes don't damage existing functionality.

The good news is that we can do something about it: creating automated unit tests for all your code is a very good start. Doing it in Test-Driven Development (TDD) fashion is even better.

You cannot possibly get full credit for your work unless each and every method in your classes has good unit testing. By good I mean meaningful and sufficient:

  • A unit-test that just asserts true is not meaningful.
  • Providing only one unit test for a method that requires multiple tests is not sufficient.

You will be required to measure and include with your deliverables the unit test coverage as measured by the tool of choice in your chosen programming language, e.g. jCoverage for Java, Rcov for Ruby, etc.

If you fail to submit unit testing, then you cannot expect to get more than 50% in the assignment.

Unit test coverage above 80% is required for full credit. Unit test coverage below 50% doesn't earn you any credit.

^ Top ^


Typically the first person you should contact for any questions related to assignments is your TA.

Please be descriptive in the subject line when you email your instructor such that processing doesn't get delayed. At the very minimum you should indicate the class and the term, followed by a brief description of what is it that you want to communicate.

Examples of good subject lines for your email:

  • cs487, Fall 2012 - Hw1, part (i)
  • cs487, Fall 2012 - When will the grades be posted on the Blackboard?
  • cs487, Fall 2012 - Question about project

^ Top ^

Assignment Submission

You are required to submit your work online, using the Blackboard.

^ Top ^


The true measure of good Software Engineering is working software delivered on time--not much of a choice here since the delivery date is fixed--and that satisfies the customer expectations. Your budget is fixed too since you cannot add new members to the team.


If you are in section #1 (live, Main Campus), then you'll do the project as part of a team of 4-5. Students in all the other sections will work on individual projects.

You should work on creating a team or becoming part of a team. Your instructor doesn't like assigning students to teams.


If you have an idea, then pitch it to your peers and get them to join your team. In this case you are the customer and the delivery team which makes for some interesting challenges: you're more like an entrepreneur than a small company that delivers software on to paying customers.

Your instructor will assign you a project topic only all else has failed.


All work you do is FOSS. Your instructor prefers GNU's GPL, however for purposes of this class you may use any of the open-source licenses that are popular, e.g. Apache, MIT, FreeBSD.

House Keeping

Project Management and Collaboration

As a team you'll need a way to collaborate on your project. Keeping track of stories and who's working on them, issues, defects, group discussion, etc. are things that are best done using a tool. Some like Pivotal Tracker, others like Bitbucket, and yet others are totally fine using Google Docs and Groups.

I strongly encourage you to stay away from email and Excel spreadsheets. Spend a day as team researching what's out there, choose something that looks reasonable and doesn't cost money and go for it. Remember, in the end it's just a tool and no tool is perfect.

Last but not least, you have to invite your instructor and your TA to your project management/collaboration account.

Code Repository

Each team member is expected to write code for their respective project. We expect to see frequent commits to the code repository you have chosen for your project.

Since your project is FOSS, you're going to use a public repository where the public at large has read access and only the team members are allowed to commit code.

^ Top ^

Class Schedule

Date Lecture Assignment Due
8/20/12 Introduction  
8/27/12 Software Engineering Fundamental and SE Ethics  
9/3/12 Labor Day - no class  
9/10/12 Software Processes and Agile Pitch your project idea, create a team
9/17/12 Requirements Engineering  
9/24/12 Project Management and Product Planning  
10/1/12 Software Testing  
10/8/12 Fall Break Day - no class  
10/15/12 Mid-semester Project Presentation (in lieu of Midterm Exam)  
10/22/12 Systems modeling and Architectural Design  
10/29/12 Design and Implementation  
11/5/12 Security Engineering  
11/12/12 Software Evolution  
11/19/12 Work on your project - this is the last stretch  
11/26/12 Project Presentations Team feedback due
12/3/12 Final exam  

Your instructor reserves the right to change this schedule.

^ Top ^

Important Events

Event Sections 1, 2, 3, 4
Last day to change/add/drop a class and receive full tuition refund 8/31/12
Last day to remove Spring and Summer 2012 incomplete grades 10/1/12
Midterm 10/15/12
Last day for official withdrawal 10/29/12
Last day of classes 12/1/12
Final exam 12/3/12, 7:30pm - 9:30pm, SB-104

For more important dates and detail go to the IIT site.

^ Top ^


Unless otherwise stated all papers you turn in will be TYPED. No handwritten work is accepted.

Each page will have a header as follows:

  • The left side: your name
  • Middle: page number and the total number of pages (ex. 2/5 indicates this is page 2 out of a total of 5)
  • Right hand side: name of the assignment (ex. Homework #2)

Each page will also have a footer:

  • The left hand side will contain the following text: cs487-section: Fall 2012 where section stands for the section you are in
  • The right hand side will contain the following text: Illinois Institute of Technology - Computer Science

^ Top ^

$Id: syllabus.html,v 1.2 2012/09/04 01:26:30 virgil Exp $