This course covers fundamental topics in software engineering, with an emphasis on requirements and design using the Unified Modeling Language (UML). The core topics are:
The course also covers some advanced topics, such as service-oriented architecture (SOA), cloud computing, and globalization of software development.
The course objectives are: (1) Introduce models of software development and methodologies for project planning, requirements analysis, and system/test design; (2) Provide experience in working as a team to produce software systems that meet specifications while satisfying an implementation schedule; (3) Train students to produce professional quality oral/written presentations of system designs, reviews, and project demonstrations; (4) Expose students to ethical issues in software design and computing in general.
You need a book on UML. It will be very useful in class (for use during in-class exercises), during the open-book exam, and during your team meetings. There are some decent on-line UML resources, such as Allen Holub's UML Quick Reference and OMG's UML Resource Page, but they are useful as supplements, not substitutes, for a good textbook. I evaluated about a dozen books on UML and recommend that you get one of the following:
Simon Bennett, John Skelton, and Ken Lunn, Schaum's Outline of UML, 2nd edition, McGraw-Hill, 2004. I recommend this book for its thorough coverage of UML, abundant examples, and low price. Unfortunately, it is out of print in the U.S. (although still in print in Europe), so the bookstore said they cannot stock it. Some used copies are available on-line, e.g., from Amazon. A copy is on 2-hour reserve in the Science and Engineering Library.
Russ Miles and Kim Hamilton, Learning UML 2.0, O'Reilly Media, 2006. This is a reasonably priced book with thorough coverage of UML. It uses a blog management system as a running example. This book should be in stock at the campus bookstore. It is also available on-line, e.g., from Amazon. Do not buy the electronic editions available at the publisher's website, because the exam is open book, but electronic devices are prohibited; see the exam guidelines for details.
Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, 3rd Edition, Prentice-Hall, 2004. This book is about twice as long and about 50% more expensive than Learning UML 2.0. It provides more coverage of the software development process and more guidance on good object-oriented design. It is available on-line, e.g., from Amazon.
In addition to a UML book, you should read: Scott W. Ambler. Mapping Objects to Relational Databases: O/R Mapping In Detail.
Most software engineering textbooks are fine as a reference for the material on software process models. Feel free to use any of them. The library has several; you shouldn't need to buy one. Two examples are: Shari Lawrence Pfleeger, Software Engineering: Theory and Practice (on 2-hour reserve in the library), and Ian Sommerville, Software Engineering.
Assignments and Course Documents are posted in Blackboard.
I also use Blackboard to send email to the class, so make sure that your email address in Blackboard is up-to-date.
William Jannen (half-time TA).
Their email addresses are in Blackboard under Staff Information.
Section 1: Tuesday and Thursday,
9:50am-11:10am, Javits 111
Section 2: Tuesday and Thursday,
12:50pm-2:10pm, Humanities 3017
Instructor's Office Hours: Tuesday and Thursday, 11:10am-12:40pm, in Computer Science 1429. Also by appointment, and when I am in my office and not unusually busy.
Grading. Each assignment is graded relative to some maximum number of points (e.g., 20), which is unrelated to the weight of the assignment in the course grade. Each score is normalized into a number between zero and one (e.g., 19/20 -> 0.95) and then multiplied by the weight of the assignment to obtain a weighted score. Course grades are based primarily on the sum of the weighted scores. The weights are as follows.
hw1-team | 0 |
hw2-requirements | 8 |
hw3-design | 10 |
hw4-dynamic-model | 4 |
hw5-design-review | 5 |
hw6-persistence-and-code1 | 15 |
hw7-ethics | 2 |
hw8-code2 | 10 |
hw9-code-review | 4 |
hw10-code3 | 30 |
hw11-demo | 2 |
exam | 10 |
TOTAL | 100 |
Grading of Teamwork. Each project assignment receives a score reflecting the quality of the work. At the end of the semester, each team member's score for that assignment is computed by multiplying that score by an individual contribution factor (ICF) that reflects the team member's overall contribution to the team effort for the entire semester. Ideally, every team member will contribute equally to the overall effort. In that case, every team member's ICF is 1. A team member who contributes less than his or her fair share will have an ICF less than 1; a team member who contributes more than his or her fair share will have an ICF larger than 1. Everyone should keep track of their contributions throughout the semester. We will evaluate each team member's contributions using all available information, including the team evaluations described next.
Students will periodically evaluate the contributions of all team members to the project. When a student's contribution is significantly below the team's expectations, the student's ICF may be reduced, and in severe cases, the student may be removed from the team. A student removed from a team must complete the remaining assignments as a one-person team.
Each team member is responsible for ensuring that he or she contributes. If you believe that your teammates are preventing you from contributing, discuss the situation with the instructor immediately.
Questions about Grading. To promote consistency of grading, questions and concerns about grading should be addressed first to Tomas and then, if that does not resolve the issue, to the instructor. You are welcome to contact Tomas by email or come to his office hour. If you would like to speak with him in person, and have a schedule conflict with his office hours, you are welcome to make an appointment to meet him at another time.
Submission of Assignments. All assignments except team evaluations must be submitted in two ways (yes, both): (1) Submit a printout of the specified material in class on the due date, and (2) Submit an electronic version of the specified material on Blackboard by 11:59pm on the due date, using the appropriate "View/Complete Assignment" link. The printout can also be submitted at the instructor's office (slide it under my door if I am not there) by the end of class on the due date. Any team member can submit the electronic version on Blackboard, but please coordinate so that exactly one team member submits it. If the printout or the electronic version is submitted late, then the assignment is considered to be submitted late, and a lateness penalty may apply. The first page of every printout should contain the team name, section number, and names of all team members. The name of every file uploaded to blackboard should contain the team name (e.g., Dream-Team-hw5.zip).
Team evaluations must be submitted on Blackboard by 11:59pm on the due date, using the appropriate "View/Complete Assignment" link.
Late Submissions. Assignments submitted after the deadline and within 24 hours of it receive a -3% penalty. Assignments submitted within the next 24 hours receive a -6% penalty, and so on. I am generally not too strict about this if one or two assignments are submitted a few hours late, but chronic offenders and significantly late assignments will be penalized. For assignments that involve presentations (design review, code review, and demo), the penalties are strictly enforced and may be larger (typically 4% per day).
Academic Integrity. In Fall 2006, the Undergraduate Council adopted the following statement and mandated that it be included in all undergraduate course syllabi.
Each student must pursue his or her academic goals honestly and be personally accountable for all submitted work. Representing another person's work as your own is always wrong. Any suspected instance of academic dishonesty will be reported to the Academic Judiciary. For more comprehensive information on academic integrity, including categories of academic dishonesty, please refer to the academic judiciary website at http://www.stonybrook.edu/uaa/academicjudiciary/If your team submits anything that includes any material created by other people, your team's submission must clearly identify that material and indicate its source; otherwise, it is plagiarism. Discussing assignments with other people is fine. However, each team must write its own code and documentation independently. Showing your team's code or documentation to other students, giving it to them, or making it accessible to them will be treated as a suspected instance of academic dishonesty.
Disabilities. The Provost requests that the following information be included in the syllabus for every course. If you have a physical, psychological, medical or learning disability that may impact your course work, please contact Disability Support Services, ECC (Educational Communications Center) Building, room 128, (631) 632-6748. They will determine with you what accommodations are necessary and appropriate. All information and documentation is confidential.
Critical Incident Management. Stony Brook University expects students to respect the rights, privileges, and property of other people. Faculty are required to report to the Office of Judicial Affairs any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students' ability to learn.
Information about the Undergraduate Lab is available at the Computer Science Department Windows Computing Facilities website. Click on the FAQs link for information about accounts.
Every team is encouraged to use a version control system, such as CVS or Subversion, to manage its project files. Netbeans and Eclipse both support CVS and Subversion, either natively or via a plug-in. Or you can use a stand-alone GUI client, such as TortoiseCVS or TortoiseSVN, or a command-line cvs or svn client (e.g., from cygwin).
The Undergraduate Lab has a Subversion server (click on Services > SVN for details). If your team would like a repository on it, send a request containing the team name and the names and SBU ID numbers of all team members to the instructor, and a repository will be created within a few days. You can then access your team's repository using your Undergraduate Lab username with your Stony Brook ID as the password.
You may use any DBMS for the project. You may run the DBMS yourself, or you may use the MySQL or Oracle server in the Undergraduate Lab (click on Services for more information). If your team would like an account on one of those servers, send a request specifying the DBMS (MySQL or Oracle) and containing the team name and the names and SBU ID numbers of all team members to the instructor, and an account will be created within a few days.
Every team is encouraged to use an Integrated Development Environment (IDE) for software development and debugging. Eclipse and Netbeans are available in the Transaction Lab and can be installed on your own computer.
Note that some tools lack support for some kinds of diagrams, and that you will need to draw a component diagram for hw3-design and a communication diagram for hw4-dynamic-model.
IBM Rational Software Architect: the market-leading UML-based model-driven development tool. You can use it to draw UML diagrams, generate Java code for interfaces and classes from UML class diagrams, reverse-engineer from code to UML diagrams, etc. I encourage you to try it, despite the learning curve, because it is powerful and widely used. It is installed in the Transaction Lab. A set of 2 DVDs containing the software is available in the North Reading Room of the Melville Library; you can borrow the DVDs and install the software on your own computer. If the person working at the checkout counter doesn't know where these DVDs are, tell them the DVDs are in the rack of "personal copy" discs on top of the taller filing cabinets along the back wall behind the checkout counter. IBM Rational Software Modeler is basically a subset of IBM Rational Software Architect; it is installed in the Transaction Lab and available on DVD from the same place (if your computer has less than 1GB RAM, I suggest you use Software Modeler, otherwise use Software Architect). Other DVDs available from the same place contain IBM Rational Data Modeller, a visual modeling and development environment for database applications, and IBM Rational RequisitePro, a requirements management tool.
Visual Paradigm for UML (Community Edition). The Community Edition is free for non-commercial use. It puts a "Community Edition" watermark on your diagrams; that's fine for this course. It runs on Windows XP/Vista/7, Linux, Mac OS X, etc.
StarUML: an open-source UML modeling tool. Runs on Windows only. Not under active development. According to the Wikipedia entry for StarUML, StarUML supports most of the diagram types specified in UML 2.0, except object, package, timing and interaction overview diagrams (though the first two can be adequately modeled through the class diagram editor).
UMLet: an open-source UML tool. Runs stand-alone or as an Eclipse plug-in on Windows, OS X, and Linux. UMLet supports class diagrams, use case diagrams, sequence diagrams, state diagrams, deployment diagrams, activity diagrams, and component diagrams (I think), but not communication diagrams.
Netbeans UML Plug-in: This plug-in is not recommended, because it does not support communication diagrams or component diagrams (last time I checked). It does support use case diagrams, class diagrams, activity diagrams, sequence diagrams, and state diagrams. It also supports forward and reverse engineering.
ArgoUML: an open-source UML modeling tool. ArgoUML is not recommended because it uses UML 1.4 notation. It's written in Java, so you must install a Java Run-time Environment (JRE), such as Sun's JRE, before installing ArgoUML.
Violet. Violet is not recommended because it does not support component diagrams, communication diagrams, or deployment diagrams, and it does not support loops, alternatives, etc. in sequence diagams. Violet does support use case diagrams, class diagrams, activity diagrams, sequence diagrams, state diagrams, and object diagrams.
You are encouraged to use one of the above UML tools to create UML diagrams. You could use one of the following diagramming tools instead. These tools present less of a learning curve when you get started, but they have some disadvantages, namely, they cannot generate code from class diagrams, and they do not check consistency of the diagrams. For example, a UML modeling tool can check that a method used in a sequence diagram is also declared in the appropriate class diagram; a diagramming tool cannot.
Microsoft Visio: a diagramming tool, with a library of UML shapes. Visio is available in the Transaction Lab and is available for download through MSDNAA. Visio is relatively easy to use, but I don't recommend it. It often produces ugly UML diagrams; for example, it automatically positions edge labels, but the positions are often less than optimal, and I did not find a way to manually override them.
Dia: an open-source diagramming tool, with a library of UML shapes.
Microsoft PowerPoint: Powerpoint can be used to draw UML diagrams, but not conveniently, because there is no library of UML shapes for it.
OpenOffice Draw Draw can be used to draw UML diagrams, but I don't know how conveniently. It does not come with a library of UML shapes. You could try Mark Lautman's UML Shapes for Draw; I don't know which types of UML diagrams it supports.