CISC 475
Advanced Software Engineering
Fall 2009
Lecture: 220 Smith (SMI), Mon 1900–2200
Lab: 051 McKinly Laboratory (MKL), Wed 1640–1730 or 1800–1850
Instructor:
Walt Leipold E-mail: leipold@udel.edu Office: 441 SMI (Smith Hall) Office hours: Mon 1730–1845 Web: http://www.cis.udel.edu/~leipold |
Teaching Assistant:
Jiaquiang Xu E-mail: xjq@udel.edu Office: TBD Office hours: TBD |
About the course
Textbook
Schedule
Semester project
Final presentation
Final submission
Exams
Grading
Policies
Resources
Lecture materials
This is the Web page for CISC475, “Advanced Software Engineering”. It contains announcements, policies, and other pertinent material for the course. The page will be updated frequently—plan on checking for new or updated material at least twice a week.
Announcements
2009-11-24: The final presentation will be held in 308 Gore Hall at 1900 on 7 December.
About the course
CISC475 presents an introduction to object-oriented software engineering concepts, methodologies and tools. It covers the analysis, specification, design, and implementation of software systems using object-oriented development processes including the Unified Process and UML. The course includes a semester-long team development project using the techniques discussed in class.
Textbook
Fundamentals of Software Engineering |
Class schedule
The following class schedule is preliminary—it will almost certainly change as the semester progreses.
Class | Date | Topics | Activities | Reading |
---|---|---|---|---|
1 | 14 Sep | Intro to software engineering | ||
2 | 21 Sep | Unified Process Requirements analysis |
||
3 | 28 Sep | First submission Honors presentation 1 Vanguard presentation |
Chaps 1–3 | |
4 | 5 Oct | Domain model UP artifacts |
First presentation | Chap 4 |
5 | 12 Oct | More UP artifacts Software architecture Architectural patterns Software testing |
||
6 | 19 Oct | Capability Maturity Model Software maintenance Coupling & cohesion |
||
7 | 26 Oct | Design patterns Review for midterm |
2nd submission Honors presentation 2 |
|
8 | 2 Nov | Midterm exam | ||
9 | 9 Nov | More design patterns More UP artifacts |
2nd presentation | |
10 | 16 Nov | Refactoring Software architecture revisited Antipatterns |
3rd submission | Chap 5 |
11 | 23 Nov | Distributed architectures Planning & estimating |
||
12 | 30 Nov | Honors presentation 3 | ||
13 | 7 Dec | Final submission Final presentation |
||
14 | 14 Dec | Final exam |
Semester project
A major part of this course consists of a semester-long team project. The class will be divided into teams. Each team will analyze, design, document, and build a significant software application using the Unified Process, and will deliver a complete set of UP artifacts (use cases, domain model, sequence diagrams, operation contracts, and so forth) along with the operating software.
For this semester's project, each team will independently implement a scoring application for RC sailplane contests. This project was chosen because:
- It is complicated enough to exercise the team's engineering skills.
- It is not too complicated to finish within one semester.
- A community of interested, tech-savvy users is available to review the application.
Team member roles: Each team will consist of between four and seven students. Each student must have at least one well-defined role on the team. Part of each student's grade will be based on how well he carries out his declared role(s). Each team must have a team leader, but the other roles will depend on the team's task. Some typical roles might be:
- Team leader—coordinates activities, leads design and implementation efforts, interfaces with the customer
- Test engineer—designs, codes, and runs unit tests and integration tests.
- Configuration manager—documents the development process, develops deliverables with a consistent look and feel
- Lead developer—develops core classes, oversees work of other coders
- Coder—the "ground state" for team members; everybody should be doing some coding
- Database developer
Project tools: You must follow the Unified Process for this project, and deliver a number of UP artifacts. Your grade will be influenced by how well you adopt and use real software engineering tools, such as:
- Subversion for version control of both source code and artifacts.
- Ant to automate building, testing and deployment.
- JUnit to unit test your code.
- Javadoc to document your classes.
- A punchlist/issue tracking system (Mantis) to track bugs, missing features, potential refactorings, and other issues.
- A Wiki for collaborative document editing.
A separate wiki, Subversion repository, and punchlist have been created for each team.
Presentations: Each team will make a formal presentation of its progress to the class at three points through the semester. At the second presentation, you will be expected to demonstrate major parts of your code. At the final presentation, you will demonstrate your complete application, and allow the instructor to “test drive” its functionality.
Submissions: Each team will submit a set of UP artifacts at four milestones through the semester. In all four submissions, you will submit all of your UP artifacts on paper. This will allow the TA and instructor to mark up the submissions when grading. At the second and third milestones, you will also submit all UP artifacts via e-mail as a ZIP file. At the fourth milestone, you will submit all UP artifacts, source code, build/test/install scripts, README files, installation instructions, and other documents on CD-ROM. (See below for details.) The organization and professionalism of these submissions, and the ease with which the instructor can get your code running from them, will affect your grade.
3rd-party components: With the approval of the instructor, teams may use third-party libraries (for example, the Rhino JavaScript engine, the Hibernate object/relational persistence framework, the XStream XML serializer, the ANTLR parser generator, or the JFreeChart plotting package) as components in their projects. Except for such approved components, the code and documentation developed in this course must be the new, original work of the project team members.
Final presentation
Final project presentations will be held in 308 Gore Hall on Monday, December 7th, with the first presentation starting at 1900. The classroom will be open starting at 1830 to allow you to stage and test your equipment. Attendance at all presentations is mandatory for all students in all teams.
Each member of each team must introduce himself (not just be introduced by the team leader), and should make some part of the presentation. The instructor will take a photograph of each team.
Each presentation should take about 45 minutes, including setup/teardown and question/answer. Do at least one dress rehearsal of your presentation to make sure that everyone knows his part and that it will take about that amount of time.
Here are some examples of the things a good presentation will cover:
- Overview: Describe what the system does, and why you think it's a good idea.
- Architecture: How is your system organized? What processes run, where do they run, and how do they communicate? Where is data stored, and how is it accessed?
- Infrastructure: Show off your source code, build scripts, Wiki, punchlist, and version control system.
- Functionality: Demonstrate all of the main Use Cases for your system.
- Error handling: Describe how you handle error conditions.
- Pattern usage: Describe which design patterns you used in your code, and why you used each.
- Refactoring: What parts of your system did you refactor, and why you did it. Did it help?
- Automated testing: This will be especially impressive.
- Lessons learned: What went wrong during the project, and how would you prevent it next time?
You can't cover all of these areas thoroughly in 45 minutes, so you'll have to choose the areas to emphasize that are most likely to impress the instructor, the TA, and other faculty observers.
Final submission
Final project submissions are due at the beginning of class (7:00PM) on 7th December. The submission will consist of both printed and machine-readable versions.
You must turn in two copies of the printed submission and two copies of the electronic submission.
The printed submission must contain all project artifacts plus a table of contents, arranged as a single document with sequential page numbers. Do not include source or Javadoc printouts. The submission should be stapled together (no loose pages), should be printed single-sided, and should not contain any hand-drawn pictures.
The machine-readable version should be submitted on CD-ROM. It must contain:
- readme.txt (see below).
- An electronic version of the final printed submission, along with the raw files (e.g., Visio files) for all UP/UML artifacts.
- All your source code (including test and scaffolding code), Javadocs, and build and test scripts.
- All required 3rd-party libraries.
- A compiled version of the Javadocs, in their own directory. It should be possible to browse the Javadocs by double-clicking on index.html.
- Copies of all of your presentation materials from all three presentations (including the final presentation), in PowerPoint or OpenOffice format.
- Copies of your first three submissions.
The readme.txt file should be at the root of the disk. It should describe the organization of the submission. It must contain instructions for building and running your system, including detailed instructions for downloading, installing, and configuring any 3rd-party components necessary.
Organize the files into a reasonable and functional directory hierarchy. The instructor should be able simply to copy the CD contents to hard disk, update CLASSPATH, and run Ant to build your application or run JUnit.
If the submission includes any Microsoft Office documents, they must be readable in Office 2003 or OpenOffice.org 2.0. If your electronic submissions were in PDF format, you must include the source document (Word, OpenOffice, etc.) as well.
Exams
The midterm exam will cover all lectures, all reading assignments, and anything else discussed in any class prior to the exam date. It will probably include an extra-credit problem.
The final examination will cover all lectures, all chapters from the textbook, and anything else discussed in any class. It will probably include an extra-credit problem.
Grading
Grades for the semester will be based on:
Midterm exam: | 20% of final grade | |
Final exam: | 25% of final grade | |
Semester project: | 50% of final grade | |
Attendance and participation: | 5% of final grade |
Each student's project grade will be a combination of the group grade and an individual grade.
Policies
Exams: The course will include two exams, a midterm and a final. The lectures will introduce material not covered in the textbook, and this additional material will be on the exams. Exams will be closed-book.
Late assignments: There are no homework assignments (other than the project) in this course. There are four delivery milestones for components of the project, which must be met. No credit will be given for project materials turned in late.
Academic integrity: You will be expected to conform to the University's policy on academic integrity.
Grades by e-mail: The University has a strong policy on protecting PNPI (Personal Non-Public Information), and treats your grades as private, sensitive data. You may request that your grades for work in this class be sent to you via e-mail, but you are hereby warned that e-mail transmission is not secure and your grades may be visible to third parties.
Resources
- Violet, a simple open-source UML drawing tool
- ArgoUML, a free UML-based CASE tool
- UMLet, another UML drawing tool.
- Visual Paradigm offers a community edition of their UML modelling tool.
- Visio templates for drawing UML diagrams.
- UML 101, a basic introduction to UML notation and UML's history. (950k PEF)
- The UML Specification is available on the Object Management Group's Web site.
- Alistair Cockburn's usecases.org site.
- The periodic table of design patterns.
- A catalog of antipatterns.
- Subversion is a version-control system, the modern successor to CVS.
- TortoiseSVN is a Windows client for Subversion.
- Findbugs is an excellent bug detector for Java.
- How to write effective JavaDocs.
- How to track bugs.
- Sometimes not using a database is a good idea.
- An excellent article about character sets and Unicode.
- Teach Yourself Programming in Ten Years!
- How to write unmaintainable code.
- How to write maintainable code.
- Are IDEs evil? Charles Petzold wonders whether Visual Studio rots the mind.
- Joel Spolsky's advice to CS majors.
Here are some recommended books:
Effective Java Programming Language Guide Joshua Bloch ISBN: 0201310058 |
Unit Testing In Java: How Tests Drive the Code Johannes Link ISBN: 1558608680 |
|
The Pragmatic Programmer: From Journeyman to Master Andrew Hunt & David Thomas ISBN: 020161622X |
The PC is Not a Typewriter Robin Williams ISBN: 0938151495 |
Lecture materials
This section contains some of the PowerPoint slides and other materials from the lectures. Slides which duplicate material in the textbook may not be included—you should read the book instead. Many topics covered in the lectures are not on the slides but will be on the exams. Also, material in the textbook (at least in the chapters we're covering in lectures) can potentially be on the exams, whether discussed in class or not.
Remember that lecture slides are not a substitute for either attending the lectures or reading the textbook—see this version of the Gettysburg Address, this Wired article by Edward Tufte, and this Robert Cringely article for some reasons why.
14 Sept | — | Powerpoint slides |
21 Sept | — | Powerpoint slides |
28 Sept | — |
Powerpoint slides Vanguard presentation |
5 Oct | — | Powerpoint slides |
12 Oct | — | Powerpoint slides |
19 Oct | — | Powerpoint slides |
26 Oct | — | Powerpoint slides |
9 Nov | — | Powerpoint slides |
16 Nov | — | Powerpoint slides |
23 Nov | — | Powerpoint slides |
Last modified: Tuesday, 24 November 2009