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:

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

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.

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 Fri Sun
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