= CMPE 276: Software Engineering = '''Instructor:''' [http://www.soe.ucsc.edu/~luca Luca de Alfaro] [[BR]] '''Email:''' ''my_first_name''@ucsc.edu (please include "CE276" in the subject line) [[BR]] '''Location:''' 2:00-3:45, TTh, Baskin Engineering 156. [[BR]] '''Office Hours:''' 3-4pm Mondays, or by appointment. [[BR]] '''Class Wiki:''' [https://dvlab.cse.ucsc.edu/cmpe276-06-wiki/] [[BR]] '''Project Meeting:''' Alternates between Mondays, 3-4pm, and Tuesdays, 4-5pm, E2 339A. {*} Next project meeting: Tuesday Nov 21, after class. {*} Next class: Alisa Neeman will talk about design patterns. == About this year's edition of CMPE 276 == In this year's edition of CMPE 276, the principles of software engineering will be applied to the construction of an open-source, publicly-available piece of software. Although I don't want to give out the details of the software project before classes start, I can tell you that it is a fun project aimed at letting people cooperate, and share information, while on the go. You can think of a mix of social networking, mobility, wikis... that you can use even while on vacation! To find out more, attend the first class! == Homework Assignments == * ["/Assignment 1"], due Sunday, October 1. * {*} ["/Assignment 2"], due Tuesday, October 24. * ["/Evaluations"], due Tuesday, December 5. == Reading Material == === A generally interesting book for the project === * [http://philip.greenspun.com/seia/? Software Engineering for Internet Applications], or the "SEIA" book. === Material Covered in Class === * [attachment:lect1.ppt Lecture 1: Introduction] * [attachment:lect2.ppt Lecture 2: Waterfall model, rapid prototyping] * [attachment:lect3.ppt Lecture 3: requirement specification]; see also D. Harel, [http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf Statecharts: A Visual Formalism for Complex Systems], Sci. Comput. Programming 8 (1987), 231-274. * [attachment:intf_as_types.ppt Lecture 4: interfaces as types]. See also an [https://dvlab.cse.ucsc.edu/lucawiki/Publications?action=AttachFile&do=get&target=ticc-intro-techrep06.ps introductory paper on Ticc]. * [http://cm.bell-labs.com/who/god/verisoft/ Verisoft], with [http://cm.bell-labs.com/who/god/verisoft/paste04.pdf slides], and [http://cm.bell-labs.com/who/god/verisoft/popl97.ps POPL 97] and [http://cm.bell-labs.com/who/god/verisoft/smcvs03.ps FMSD] papers. Also see lectures [http://www1.bell-labs.com/user/god/stanford-lecture2.ps 2], [http://www1.bell-labs.com/user/god/stanford-lecture3.ps 3], [http://www1.bell-labs.com/user/god/stanford-lecture4.ps 4] from a [http://www1.bell-labs.com/user/god/stanford.html course] given by Godefroid at Stanford. * [http://mtc.epfl.ch/software-tools/blast/ BLAST]: [http://www.cs.ucla.edu/~rupak/Powerpoint/BlastTutorial/SPIN2005.ppt Powerpoint slides], [http://mtc.epfl.ch/%7Etah/Publications/temporal_safety_proofs_for_systems_code.html paper on system software verification using BLAST]. * The notes of my [attachment:blast_notes.pdf lecture on BLAST]. * [http://www.cs.ucsd.edu/~savage/papers/Tocs97.pdf Eraser]: a dynamic data race detector for multi-threaded programs [http://www.cs.ucsd.edu/~savage/papers/Sosp97.pdf conference version]. * DART: Directed Automated Random Testing: [http://cm.bell-labs.com/who/god/public_psfiles/pldi2005.pdf paper], [http://cm.bell-labs.com/who/god/public_psfiles/talk-pldi2005.pdf talk]. * [attachment:ip-talk.ppt Lecture on Copyright, Public Domain, and Software Licenses]. * [http://www.cag.lcs.mit.edu/~rinard/paper/osdi04.pdf Failure-oblivious computing], [http://www.cag.lcs.mit.edu/~rinard/paper/acsac04.pdf eliminating buffer overflows by returning other values], [http://www.cag.lcs.mit.edu/~rinard/paper/oopsla05.pdf fault acceptability], by M. Rinard and co-authors. == Class Organization and Grading == In this class, the students will develop a software project, following the entire sequence of steps from requirement discovery and analysis, to maintenance of a deployed system. Students will work in a team, and we will mimick some of the dynamics that goes on in a real medium-sized company trying to develop a product. Students will have to turn in weekly assignments related to the project (such as requirement documents, software architecture plans, ...), as well as a final project with a full set of documentation. The weekly assigments will contribute 70% of the class grade, and the final project submission will contribute the remaining 30%. Students will be evaluated both by the instructor, and by their fellow team-mates via regular evaluations - just like in a real company. Students who perform poorly in their role can be reassigned by the instructor to other roles - in fact, even students who perform great may be reassigned, to cover "staffing needs".