This course covers fundamental topics in software engineering, with an emphasis on object-oriented design using the Unified Modeling Language (UML). The core topics are:
The course also covers some advanced topics, such as:
This is a project-oriented course. You will work in a team of 4 students (normally) to develop a complex software system using the principles of software engineering.
The project requires use of a database, so you will find it helpful have knowledge of databases, from CSE 305 (Principles of Database Systems) or other experience. The project also requires development of a GUI front-end, so you will find it helpful to have knowledge of Web programming or other front-end technology, from CSE 333 (User Interface Development), CSE 336 (Internet Programming), or other experience. CSE 308 provides practical experience using these technologies and integrating them in more complex software systems, but teaching them is not one of the CSE 308 course goals, because the department offers separate courses on them.
The official course outcomes are:
You need to get one of the following two books on UML. 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. This book has thorough coverage of UML and abundant examples. It is out of print in the U.S., but inexpensive used copies are usually available, e.g., on Amazon.
Russ Miles and Kim Hamilton, Learning UML 2.0, O'Reilly Media, 2006. This is a reasonably priced book with thorough coverage of UML. New and used copies are available, e.g., on Amazon. Do not buy an electronic edition (e-book)! You can use a book printed by the publisher, but not an e-book or a printout of one, during the exam. (If dozens, or even a handful, of students each brought hundreds of printed pages to the exam, there is no realistic way I could check whether those stacks of paper contain only the textbook.)
In addition to a UML book, you should read: Scott W. Ambler. Mapping Objects to Relational Databases: O/R Mapping In Detail.
If you have not studied UI design (usability, not just technology), for example in CSE 333, it is worth spending a few hours studying it before designing your system's GUI. A good book on this topic is: Doug Van Duyne, James Landay, and Jason Hong, The Design of Sites, 2nd edition, Addison-Wesley, 2007. Cheap used copies are often available on Amazon and eBay. A book that is not as good, but free for SBU students, is: Jenifer Tidwell, Designing Interfaces. An online version is accessible for free via the SBU library. If you find other good online resources on UI design, let me know.
For other topics, the lecture notes are sufficient, but you can refer to almost any software engineering textbook for additional information, if you like. The library has numerous software engineering textbooks; well-known ones include Software Engineering: Theory and Practice by Shari Lawrence Pfleeger, and Software Engineering by Ian Sommerville. Another interesting book, from which some of the lecture notes are derived, is Software Engineering Best Practices: Lessons from Successful Projects in the Top Companies by Capers Jones.
You might also enjoy reading Head First Object-Oriented Analysis and Design by Brett D. McLaughlin, Gary Pollice, and Dave West. It's coverage of UML is incomplete, but it's a useful book on software design, with a lively writing style, and it's available to Stony Brook students for free through Safari books on-line.
I also recommend What Google Learned From Its Quest to Build the Perfect Team, by Charles Duhigg. It's not specific to software engineering, but it is very interesting, not very long, and may well help you become a better team player and manager.
Lecture notes, assignments, etc., are posted in Blackboard. I strongly recommend subscribing to content changes in the course: click the down arrow next to your name in the right part of the page header, select Settings in the resulting menu, and then select Edit Notifications Settings.
Blackboard discussion forums are an important communication tool in this course. Questions that do not require confidentiality or privacy should be posted in a discussion forum, so everyone can benefit from the answers. You are responsible for reading each discussion forum frequently or (more conveniently) subscribing to each discussion forum, by clicking the Subscribe button in the header row above the list of threads in the forum; you will then receive an email informing you of each post.
Section 2: Mon and Wed 8:30am-9:50am, Javits 103.
What to Bring. We will do several in-class exercises during roughly the first half of the semester. In-class exercises are done in the same teams as the project. To do them, you need to bring the following to class. (1) An electronic device (a cell phone is adequate) on which you can download from Blackboard and view the instructions for the exercise, which are contained in the same pdf file as that day's lecture notes, which will be posted shortly before class. (2) One of the two UML books listed above. (3) At least one person per team needs to bring either a few sheets of paper on which the team can write and submit its work, or a notebook computer on which the team can type text, draw a UML diagrams, and submit the work on Blackboard.
Instructor: Mon 12:30pm-2pm, and Wed 11:30am-1pm, in NCS 357. Also by appointment, and whenever I am in my office and not unusually busy.
Rohit Aich: Mon 10am-10:45am and Tue 12:30pm-1:15pm, in Computer Science 2217.
Yashu: Thu 2pm-2:45pm and Fri 12:30pm-1:15pm, in Computer Science 2217.
Academic Integrity. 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 (e.g., by putting it in a public repository) will be treated as a suspected academic integrity violation.
Course Grades. Each assignment is graded relative to some maximum number of points, 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 tentative weights are:
Exam. The exam covers object-oriented design and UML. It does not cover other topics. It may cover any type of UML diagram covered by the lecture notes posted on Blackboard. During the exam, you may use either (or both) of the recommended UML books listed above, in printed (not electronic) form. The goal of this policy is that you don't need to worry about memorizing UML syntax. You may not use any other printed materials (lecture notes, assignments, etc.) or any electronic devices. Do not miss the exam. Make-up exams will be given only in extenuating circumstances (e.g., with a doctor's note stating that you were ill and unfit to take the exam).
Helpful Postings. As an additional incentive for helpful postings (e.g., answering other students' questions), at the end of the semester, the two students with the largest numbers of helpful postings (provided it is at least three postings) will get +1% on their sum of weighted scores. I will determine which postings count. Please don't try to game the system.
Late Submissions. For assignments that involve presentations (design review, code review, and demo), lateness penalties are 10% per day and strictly enforced (except in extenuating circumstances), because rescheduling them is disruptive and inconvenient. For assignments that do not involve presentations, assignments submitted after the deadline and within 24 hours of it receive a -4% penalty. Assignments submitted within the next 24 hours receive a -8% penalty, and so on. Generally, I am not too strict about lateness penalties for non-presentation assignments, when one or two assignments are submitted a few hours late, but chronic offenders and significantly late assignments will be penalized.
Submission of Assignments. Assignments hw2, hw3, hw4, hw5, hw6, and hw7 must be submitted in two ways: (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 (do not put any comments in the Comment box; we don't read it). 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 and the names of all team members. The name of every file uploaded to Blackboard should contain the team name and assignment name (example: DreamTeam_hw5.zip). The printout is needed for grading (we write comments on it); a team that does not submit a printout does not get a grade for the assignment. The electronic submission is needed so that we have a copy of the team's work after we return the graded printout.
Teamwork. Each team member is responsible for ensuring that he or she contributes equally. If you believe that your teammates are preventing you from contributing your fair share, or that one of your teammates is not contributing his or her fair share, discuss the situation with the instructor promptly. Team members not contributing their fair share may be removed from the team, with consent from the instructor, and would then need to work on the project (with some requirements scaled down) on their own.
Electronic Communication Statement. Email and especially email sent via Blackboard is one of the ways the faculty officially communicates with you for this course. It is your responsibility to make sure that you read your email in your official University email account. For most students that is Google Apps for Education, but you may verify your official Electronic Post Office (EPO) address.
Academic Integrity. 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. Faculty is required to report any suspected instances of academic dishonesty to the Academic Judiciary. Faculty in the Health Sciences Center (School of Health Technology & Management, Nursing, Social Welfare, Dental Medicine) and School of Medicine are required to follow their school-specific procedures. For more comprehensive information on academic integrity, including categories of academic dishonesty please refer to the academic judiciary website at http://www.stonybrook.edu/commcms/academic_integrity/.
Student Accessibility Support Center Statement. If you have a physical, psychological, medical or learning disability that may impact your course work, please contact Student Accessibility Support Center, ECC (Educational Communications Center) Building, Room 128, (631)632-6748. They will determine with you what accommodations, if any, are necessary and appropriate. All information and documentation is confidential. Students who require assistance during emergency evacuation are encouraged to discuss their needs with their professors and Student Accessibility Support Center. For procedures and information go to the following website: http://www.stonybrook.edu/ehs/fire/disabilities.
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 University Community Standards any disruptive behavior that interrupts their ability to teach, compromises the safety of the learning environment, or inhibits students' ability to learn. Faculty in the HSC Schools and the School of Medicine are required to follow their school-specific procedures. Further information about most academic matters can be found in the Undergraduate Bulletin, the Undergraduate Class Schedule, and the Faculty-Employee Handbook.
Visual Paradigm for UML (Community Edition). I recommend that you use this one. It supports all of the types of UML diagrams used in this course, with comprehensive support for their features. It is relatively well documented and free for non-commercial use. It runs on Windows Vista/7/8, Linux, Mac OS X, etc. It is installed on the computers in the Windows Lab. It puts a "Community Edition" watermark on the diagrams; that's fine for this course. There is a free online course on Visual Paradigm Essential.
Lucidchart and draw.io are good web-based diagramming tool with a library of shapes for UML diagrams. Unlike Visual Paradigm for UML, which performs UML-specific error checking, these general-purpose diagramming tools will happily let you draw invalid diagrams.
UMLet: a lightweight open-source UML tool. It supports class diagrams, use case diagrams, sequence diagrams, state diagrams, deployment diagrams, activity diagrams, and component diagrams (I think), but not communication diagrams. I don't know whether it supports all features of those diagrams (e.g., loops in sequence diagrams).
Violet. Not recommended. It does not support component diagrams, communication diagrams, or deployment diagrams, and it has limited support for sequence diagrams (lacks support for actor icons, loops, alternatives, conditions, etc.).
Microsoft PowerPoint, LibreOffice Draw, etc., can be used to draw UML diagrams, but not conveniently, because they do not come with a library of UML shapes.
Every team is encouraged to use an Integrated Development Environment (IDE) for software development and debugging. Several teams from prior years recommend also using a build system such as Jenkins continuous integration server or Maven.
Skype for Business is free for all SBU students. It is available on Windows (in the Start menu, it might be at top level or in the Microsoft Office folder) and Mac. It can record a selected window or the entire screen. Here are screen recording instructions (note: in step 2, you need to click on the small downward-facing triangle, not the settings gear next to it). To access the recording after closing meeting window, click on that downward-facing triangle again and then select Tools then Recording Manager. Before recording, you can set the desired image resolution by clicking on the settings gear next to that downward-facing triangle, selecting Recording, and then setting the resolution.
Open Broadcaster Software is an open-source software for streaming and recording video. Available on Windows, Linux, and Mac. I haven't tried it, but it looks promising.
Every team is encouraged to use a version control system, such as Subversion or git, to manage its project files. Do not put your code in a public repository during the semester, because there is a risk that another team will copy it and both teams will be charged with suspected academic integrity violations for code sharing.
Subversion: On the server side, the Computer Science Department has a Subversion server. If your team would like a repository on it, send a request for a repository, mentioning that it is for CSE308, and specifying the names and SBU ID numbers of all team members, to email@example.com. A repository will be created within a few days. You can then access your team's repository using your Computer Science Department Windows Lab username with your Stony Brook ID as the password. On the client side, Netbeans and Eclipse both support Subversion, either natively or via a plug-in, or you can use a stand-alone client, such as TortoiseSVN on Windows.
Git: On the server side, Git repositories on bitbucket are free for up to 5 developers. Private Git repositories on GitHub are $7/month for a Developer account but free with the Github Student Developer Pack (free GitHub accounts normally have only public repositories). On the client side, git is supported in Netbeans and Eclipse, and there are stand-alone git clients, including several listed here, and Tortoise Git.
You may use any database server. One option is the Computer Science Department's database server. To get an account on it, send a request, mentioning that it is for CSE308, and specifying the desired DBMS (MySQL, Oracle, or DB2) and the names and SBU ID numbers of all team members, to firstname.lastname@example.org. An account will be created within a few days.