CSCI 240: Software Engineering — Fall 2014
Course Syllabus
Instructor
Joel Ross
email:
jross@pugetsound.edu
office:
Thompson 405
phone:
x3558
Class Meetings
Lecture: Mon/Wed/Fri 12:00pm to 12:50pm (Thompson 374)
Website:
http://cs.pugetsound.edu/~jross/courses/cs240/
Moodle:
https://moodle.pugetsound.edu/moodle/course/view.php?id=7676
GitHub Repositories:
https://github.com/UPS-CS240-F14
Many homework assignments will be submitted via this github repository. See
Hwk 1
for details.
Piazza:
https://piazza.com/class/hyg9eq2cs2942x
We will be using Piazza for class discussion and Q&A. The system is catered to getting you help fast and efficiently from classmates and from myself. Rather than emailing questions to me, I encourage you to post your questions here.
Office Hours
Feel free to stop by any time. I will definitely be in my office during "official" hours: Mon/Wed/Thu/Fri 1:00pm to 2:00pm, Tue 2:00pm to 3:00pm. We can also schedule to chat at a specific time.
Course Description
In this course, students will study concepts and methods related to the design and implementation of large software systems. Students will learn about organization and management of software development, as well as design patterns and tools that facilitate the creation of software systems. Students will gain experience working in a team programming setting as they design, document, and implement a medium-sized software project. Students will also study the social impacts of software development. This course emphasizes communication and writing skills in addition to programming and implementation.
Prerequisites: CSCI 261 with a grade of C- or better.
Course Goals
After completing this course, a student will be able to:
- Compare and contrast major software process models and their suitability for particular software systems and team organizations.
- Work on a team to complete a medium-to-large software project, with an understanding of the complexity of team management.
- Demonstrate the capability to use software tools, including version control systenm, in support of the development of a software product of medium size.
- Apply requirements elicitation to develop and document set of software requirements for a mediaum-sized software system.
- Describe architectural and design patterns for software systems, and select appropriate patterns for a scenario.
- Articulate and apply effective design principles (e.g., information hiding, coupling and cohesion) and coding practices.
- Describe and apply techniques for testing and validating software, including test-driven development.
- Evaluate social and ethical issues that arise in software development.
- Effectively communicate aspects of software design via written technical documents and formal presentations.
Students will also develop experience with a broader range of programming languages and libraries.
Textbook
Fox and Patterson.
Engineering Software as a Service: An Agile Approach Using Cloud Computing, 1e.
Strawberry Canyon, 2014. (required text).
Be sure you get the First Edition, version 1.1.0 or later, released July 2014
Note that you do not need a Kindle to read this; Kindle readers are available for all platforms.
Brinkman and Sanders. Ethics in a Computing Culture, 1st Edition. Cengage, 2013. Chapters 1-2 (required text; available as a course reader).
Further readings are available on Moodle (see the course calendar).
Resources
-
Bookware VM and instructions
This virtual machine image has all the tools used by the book (and hence this class) pre-installed. You can run this using VirtualBox, a free, open-source virtualization program. You can also install the appropriate software on your own machine (it will not be useless in the future!) -
Book website
You might be particularly interested in the list of resources for programming languages and frameworks used in this course.
There are many, many tutorials and guides available online for most course topics (git, Ruby, Rails, HTML/CSS, JavaScript, RSpec, etc). The effectiveness of these tutorials depends on your background and learning style. I recommend you look up further tutorials and share the ones that work for you!
Course Components
Due to the nature of the material, the quantity of new concepts encountered, and the large amount of design, documentation and programming required, this will be a time intensive course.
Group Project
In this course, students will work in groups to develop a medium-sized software project. These are real projects for real people--students will be developing software for an external customer from a campus organization. These are SaaS-based projects, though some may draw in further technologies (such as mobile devices).
This project is intended to give students a chance to interact with the material presented in class and to apply it to an actual software engineering project, as well as gain experience working on larger-scale programming tasks. While completing the project will involve mastering new programming skills, the primary goal is to develop software engineering skills such as project and team management. The project provides a structure for practicing these skills.
Projects will be implemented using an Agile approach, with multiple short iterations. Deadlines for these iterations are listed on the calendar, with further details found here.
Teamwork
This project also emphasizes the idea of developing software in teams. Most modern software companies employ a team structure to develop their products. Students will complete projects in teams of 5 of 6. Note that these are large teams--one of the course goals is to practice working within a larger group! Students will self-select teams (with support of the professor).
As a student, it is your responsibility to make sure that you and your team mates contribute equally to the project. All team members must take part in all project activities. However, you are welcome to divide up responsibilities (and we will discuss methods for doing so). Though the scope of individual effort on a single part of the project may vary, in the end all group members should have contributed equally to the project. Pair programming is also recommended.
Grading on projects will be shared among group members (the project gets a grade, not the students separately).Altogether, the project and its deliverables are worth approximately 50% of the course grade. Students will complete team evaluations to help the professor assess individual contributions.
Homework Assignments
While most of the course focuses on the semester-long project, students will also complete a number of smaller homework assignments. These assignments will give students a chance to practice with development technologies (e.g., new programming languages), or to synthesize theoretical concepts covered in class.
Homework assignments are intended to take about a week, and are required along side the project (though note that homeworks drop off as the project work ramps up). Altogether, homeworks are worth approximately 40% of the course grade. Note that homework assignments are given approximately the same weight despite differences in point values, unless explicitly indicated in the assignment description.
Participation
You are expected to be an active participant in this class, and this course component reflects that. The best way to earn participation points is to be both physically and mentally present! Show up to class, ask and answer revelant questions, share an opinion, and otherwise contribute to a conducive learning environment. Take part in class activities. Try to speak up every day.
Overall, Participation is worth about 10% of the course grade.
Course Policies
Respect
This class will likely involve in-class discussion of topics on which you and your classmates may have differences in opinion. Please be respectful of others (students or otherwise) at all times.
Correspondence
I will send out course announcements and information by email, so you should check your email daily. Note that this email will go to your pugetsound.edu address. If you prefer to read your email on another account, you should set your Pugetsound account to forward your email to your preferred account.
I have set up a public discussion forum through Piazza. This is a great place to ask (and answer!) technical or homework questions. You may get responses from other students faster than from me, and any answers can be shared with the entire class.
For more private correspondence, you are welcome to email me. When emailing, please make sure to sign your emails! This will let me know who is writing, and will help me to better answer any questions.
My office hours are listed above. I am more than happy to talk about any questions or concerns you may have about the course or its material. I highly recommend you take advantage of professor's office hours; it's one of the greatest benefits of attending a school like UPS.
Collaboration & Group Work
For much of this class, you will be working in teams. You are expected to be respectful of your teammates. This includes showing up to scheduled team meetings, completing agreed-upon work, considering others' opinions and suggestions, including the entire team, etc.. Software design can be very difficult, and there are bound to be disagreements between team members. Your job is to practice resolving these differences so that everyone is able to effectively and cheerfully work on the project.
If a team conflict arises, your team should try to tactfully address and resolve the issue. If this is not possible, let me know so I can help to mediate. We only have a short time to complete projects, so please let me know as quickly as possible so that nothing festers or holds us back. If it becomes apparent that a student is consistently not contributing to the group project, the I will take appropriate action---this may include grade penalty, dropping the student from the course, include requiring the student to complete the project all on their own, etc.
Attendance
Make every effort to attend each class meeting; we will often cover material that isn't directly in the textbook. Classes will prompty begin and (usually) end on time--so please do your best to get to class before the start of the hour. Students are expected to attend all lectures, with exceptions permitted in case of illness and family emergencies.
Technology in Class
Please silence all cell phones/pagers/etc. before the beginning of each class. Laptops are allowed in class, but only for class purposes: do not use class time to check your email, update your Facebook, read reddit, make LOLCats, etc. Such usage is distracting and interferes with learning both for you and for all the other students in the class. If the temptation is too much, simply don't bring your laptop--you will not need it for lectures. If another student's computer is distracting, please ask them to close it (or let me know outside of class).
Late Work
Late assignments will lose 15% per day late; assignments more than 2 days late will not be accepted. This is so I can grade and give feedback on assignments as quickly as possible.
If you find yourself falling behind, please check in with me ASAP; I am glad to help! It is better to seek help before the deadline.
Academic Honesty
Please review the Academic Honesty Policy in the Student Handbook and ask me if you have any questions regarding its application to this course. The consequences of academic dishonesty are not worth the risks. The simple rule is: do not claim anyone else's work, code, words, or ideas as your own. If you're in doubt, come talk to me in advance.
If you're having problems in the course, come and speak with me; never take the shortcut of copying someone else's work. It isn't worth it.
Special Accommodations
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.
Emergency Procedures
Please review university emergency preparedness and response procedures posted at http: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.
Finally, please consider getting a flu shot, to protect yourself and others!. Influenza is a miserable experience, and you do not need it while you are trying to complete a class. If you do get sick, stay home!. E-mail me and we will work around it.
Course Calendar
Below is the planned schedule for the course. This includes a list of topics to help students plan their work in this course, as well as assignments and required readings. Changes will (usually) be announced in class, and I will do my best to keep this schedule updated. Any changes to due dates will be announced.
- Readings are from the Fox and Patterson text unless specified otherwise.
- Assignments Due are due on the day listed (generally at midnight, though check each assignment for specifics).
Week | Date | Topic | Reading | Assignments Due |
1 | 09/01 | Introduction; Process Models | Fri: 1.1 - 1.13; for fun: Agile at Microsoft | |
2 | 09/08 | Version Control; Ruby Intro |
Mon: A.1 - A.7,
Wed: 10.4 - 10.5, 10.8 - 10.9 Fri: 3.1 - 3.4, 3.6 |
Hwk 1 - Setup and Git
due Thu
Project Iteration 0.0 due Fri |
3 | 09/15 | Ruby; Behavior-Driven Design |
Mon/Wed: 3.5, 3.7 - 3.11; 8.1 - 8.2
Fri: 7.1 - 7.3, 7.11 |
Hwk 2 - Ruby
due Project Iteration 0.1 due Fri |
4 | 09/22 | Requirements; Architecture and the Web |
Mon: 7.10,
Rawsthorne 2004
Wed: 2.1 - 2.11 |
|
5 | 09/29 | Rails |
Mon: 4.1 - 4.3
Wed: 4.4 - 4.5, 4.9, 4.11 Fri: 4.6 - 4.8, 5.1 - 5.2 |
Project Iteration 0.2
due Fri
Hwk 3 - Requirements due Fri |
6 | 10/06 | Rails continued; UI design; Testing |
Mon: 7.4 - 7.5;
Schneiderman 2009,
Rogers 2013
Wed: 5.3 - 5.9 Fri: 7.6 - 7.9 |
Hwk 4 - Rails due Sun |
7 | 10/13 |
Testing continued
Special guest: Kristen Spiese |
Mon: 8.3 - 8.6, A.7
Wed: 8.7 - 8.11, 10.6 |
Project Iteration 0.3 due Mon |
8 |
10/20
Mon-Tues: break |
Project Management |
Wed: 10.1 - 10.3, 10.7
Fri: Brooks 1975, http://nyti.ms/1e1kna8 |
|
9 | 10/27 | Coding Style; Refactoring; UML |
Mon: 9.4 - 9.5,
Wed: 9.6 - 9.8, http://sourcemaking.com/refactoring Fri: 11.1 - 11.2 |
Project Iteration 1 due Mon |
10 | 11/03 | Design Patterns | 11.3 - 11.11, http://sourcemaking.com/design_patterns | Hwk 5 - Pattern Presentation due in class |
11 | 11/10 | JavaScript; Open-Source Software |
Mon: 6.1 - 6.3
Wed: 6.4 - 6.11 Fri: Stallman 2009, Raymond 2000 (long) |
Project Iteration 2 due Mon |
12 | 11/17 | Software Ethics and Impacts |
Mon: Brinkman Ch 1
Wed: Brinkman Ch 2; ACM Code Fri: based on last name A-C: Abelson 2008 D-Ja: Abril 2007 Jo-P: Irani 2013 R-Y: Penzenstadler 2014 |
|
13 |
11/24
Wed-Fri: holiday |
work day | Project Iteration 3 due Mon | |
14 | 12/01 | Current Issues and Practice | Proc. ICSE 2014 | Hwk 6 - Ethics Paper (draft) due Mon |
15 | 12/08 | Conclusions | Hwk 6 - Ethics Paper (revised) due Mon | |
Finals | Final Exam Period: Monday 12/15, 12:00pm |
Project Iteration 4;
Final Presentations
due Mon
Hwk 7 - Final Write-Up due Fri |