CS 240: Software Engineering
410 Thompson Hall
My office hours for Fall 2016 are:
Mon, Tues, Wed, & Fri: 11:00-11:50
You can make an appointment to meet at other times also.
I try to respond to emails within 24 hours. You should not expect a response to emails received after 5:00 PM until the next day.
Attendance and lateness policy
Students are expected to attend class and labs. Multiple absences without a written excuse can result in a reduced grade for the class.
Please ensure that any work you take credit for is your own. Homework should be assumed to be individual work unless it is explicitly given as group work.
When working on individual coding assignments (i.e. all assignments not explicitly labeled as pair or group assignments) you should never look at other people's code for your benefit or allow them to look at yours for their benefit. You may look at another person's code in order to help them identify a problem they are having.
There are sophisticated tools available to identify code plagiarism. Simply changing superficial characteristics of code (variable names, line breaks, spacing) is not enough to conceal when a program has been cribbed. Aside from this, however, someone who copies code cheats themselves out of the opportunity to learn the material. Sooner or later, this will catch up to them.
If your work involves contributing to code written by other people (as is often the case when working with open source software) always be aware of and respectful of the license governing the use of the code, and always be clear about where your own contributions begin and end.
Soliciting answers to homework exercises on websites such as Stack Overflow is a breach of academic integrity and will be dealt with as such. Stack Overflow is a valuable resource for getting help with legitimate programming problems, so please use it appropriately. In addition to cheating yourself out of the opportunity to learn the material, posting homework questions pollutes Stack Overflow and shows disrespect for the efforts of your instructors in creating the exercises. You may turn to online resources (such as Stack Overflow or other forums) for help in overcoming programming hurdles, such as you may encounter working on your group project in CS 240. If you are not sure whether your question is appropriate for a public forum, check with me first. Once you post content on Stack Overflow, you will probably not be able to remove it, so don't post anything you may come to regret.
Finally, word of general advice for life in the Internet age. Do not assume your online behavior is anonymous, even if you have not intentionally identified yourself.
Devices in class
Please avoid using devices during class in ways that distract yourself or others.
The university is a place for respectful exchange of information and ideas.
University-wide policies regarding student conduct and integrity can be found in the UPS Student Handbook.
If you have any questions or problems related to this class or anything else I may be able to help with, please don't hesitate to email me or drop by my office any time to talk.
Academic accommodations are available for students with disabilities who are registered with the Office of the Office of Accessibility and Accommodations. If you have a physical, psychological, medical or learning disability that may impact your course work, please contact Peggy Perno, Director of the Office of Accessibility and Accommodations, 105 Howarth, 253.879.3395. She will determine with you what accommodations are necessary and appropriate. All information and documentation is confidential.
I also encourage all students having difficulty, whatever the reason, to consult privately with me at any time.
Please review university emergency preparedness and response procedures posted at www.pugetsound.edu/emergency/. There is a link on the university home page. Familiarize yourself with hall exit doors and the designated gathering area for your class and laboratory buildings.
If building evacuation becomes necessary (e.g. earthquake), meet your instructor at the designated gathering area so she/he can account for your presence. Then wait for further instructions. Do not return to the building or classroom until advised by a university emergency response representative. If confronted by an act of violence, be prepared to make quick decisions to protect your safety. Flee the area by running away from the source of danger if you can safely do so. If this is not possible, shelter in place by securing classroom or lab doors and windows, closing blinds, and turning off room lights. Lie on the floor out of sight and away from windows and doors. Place cell phones or pagers on vibrate so that you can receive messages quietly. Wait for further instructions.
In this class students will study tools and methodologies for planning and implementing medium to large-scale software systems. Topics covered include development processes, design patterns, code organization, version control, code testing, and collaboration. The class focuses heavily on putting these concepts into practice with a group project, with an emphasis on becoming familiar with an existing codebase.
There will be individual assignments as well as a group project on which progress will be evaluated incrementally throughout the course.
Prerequisites for this course
The prerequisite for this class is CSCI 261 with a grade of C- or better.
Goals of the class
By the end of this class students will
- Develop software collaboratively using state-of-the-art tools and methodologies.
- Carry out software development within an established, professional-quality codebase.
- Understand the strengths and weaknesses of various software development processes.
- Understand the importance of design and the significance of software design patterns.
- Acquire practical skills for developing web applications.
Lecture slides for this class will be posted soon after the lecture is completed. You can find them here.
Textbook & required materials
The following books are required for this course:
Getting MEAN with Mongo, Express, Angular, and Node by Simon Holmes
|1||1/18||Introduction; Process Models||The Mythical Man-Month, Ch 1 & 2
Ch 1, 2
Due Wed 1/25
Install Git, NVM (or NVM-windows), Node.js (via NVM), etc. and Atom
|2||1/23||Intro to JS; Automation; Version Control||GM Ch 3;
The Atlantic: Healthcare.gov
Due Fri 1/27
HW 2: Setting up a MEAN project
Due Mon 1/30
|3||1/30||Requirements; HTML & CSS; Web Application architecture & REST;||GM Ch 4;
Due Fri 2/3
HW 3: Working with Node.js and Express
(Find the typo
in Ch 4!)
Due Mon 2/6
|4||2/6||Node.js||GM Ch 5||HW 4: MongoDB and Mongoose
Due Mon 2/13
|5||2/13||Design patterns; MVC; Angular.js||UML Basic Principles
HS Ch 2
Due Fri 2/17
HW 5: Building RESTful web api
Due Tues 2/21
|6||2/20||Generation & Scaffolding; MEAN.js||GM Ch 6,7;
HS Ch 5
Due Fri 2/24
HW 6: Use Case
Due Mon 2/27
|7||2/27||UI Design & templating||HS Ch 3;
GM Ch 8, 9
(Working local installation of Group Project repo/MEAN.js app)
Due Fri 3/3
|8||3/6||Testing; Coding Style; Refactoring||HS Ch 6;
GM Ch 10
|GM Ch 11 (reading only)||HW 7: Building an SPA with Angular.js
(final book assignment)
Due Mon 3/13
No class Fri, 3/24
Due Fri 3/24
|11||3/27||Databases & CRUD|
Due Fri 4/7
|13||4/10||Software Ethics and Impacts||Brinkman & Sanders, 2013, Ch 1
Group readings Based on last name:
C-D: Abril, 2007
K-N: Bennefon, 2015
P-T: Irani, 2013
V-Z: Penzenstadler, 2014
Come prepared to discuss the reading in class on Friday
Software licensing & Open-Source; project work
Brinkman & Sanders, 2013, Ch 2
IEEE Ethically Aligned Design (Read: Executive Summary (Pp 2-14),
Chapter 2 (Pp 22-35),
New Committee Descriptions (Pp 93-102))
Due Fri 4/21
|15||4/24||Project work||HS Ch 8||HW 8: Ethics paper
Due Mon 4/24
|16||5/1||Troubleshooting & debugging; project work
Classes end Wed, 5/3
|Project presentations Mon 5/8, 8:00-10:00AM||Group Project
HW 9: Final project report
Due Wed 5/10
This course will be graded based on the following factors:
- 5% Attendance & participation
- 5% Quizzes
- 40% Individual homework
- 50% Group project
There are no midterms or final exams for this course. Quizzes will be announced at least one class period in advance.
Weighting values for individual homework assignments and group iterations can be found on the corresponding assignment or iteration's description page.
The centerpiece of this class is a group project, in which students will work together in groups to plan and implement a functioning software product.
Students will self-select their teams (with support of the professor). Teams will consist of 3 to 5 students (optimally 4).
All students will be expected to contribute approximately equally to the group project. A single value ranging from 0.0 to 1.0 will represent an individual's overall contribution to their group's project. The value defaults to 1.0 and will stay at that value if there are no issues with the individual's contribution. An individual's final grade for the group project (worth 50% of their course grade) will be multiplied by this value. Student contributions will be evaluated according to team evaluations, informal observation, the commit record on the project's GitHub repository, and any other relevant factors. Contributing meaningfully to the development of the group project (not just the final presentation) is the single most important factor in your grade in this class.
Students are responsible for the equitable distribution of work within the group. Group members should make an attempt to identify potential problems early and communicate to the professor if changes need to be made. If other members aren't pulling their weight, don't suffer in silence, for their own good as well as yours!
In addition to (and in preparation for) the group project, there are a number of individual homework assignments. These run parallel to group project iterations, but taper off as work on the group project becomes more intense.
Homework assignments as a whole will count for approximately 40% of the total grade. Your performance on homework will also be a factor that I will look at if there are doubts about your contributions on the final project.
Much of the homework involves following the tutorial-style presentation of the Getting MEAN book. This requires reading the text, entering the code, and producing a working version of the project described by the book.
Book chapter assignments are credited for being submitted by the deadline. Completion of the full book is weighted more heavily than individual chapters, so "late work" on book chapters is credited implicitly through credit on later chapters. This means that missed deadlines can not be made up. Be aware that these assignments are cumulative, and so catching up is increasingly difficult as you fall behind.
Attendance and participation in class count for 5% of the total grade, overall. However, attendance and participation issues may also be reflected in the contribution score for your final group project.
There will be occasional short quizzes covering recent reading and/or lecture material. These will be announced at least one class period in advance. Your average score on these quizzes will account for 5% of your total grade.
Primary online resources
The class will make use of several online resources:
The class Moodle page will be where you can turn in assignments and find some class materials.
Github for version/revision control.
Piazza for collaboration.
PivotalTracker for project management.
Portions of this syllabus and course are based on materials developed by Joel Ross.