198:431                    Spring 2006
Software Engineering

"Sofware Engineering is to programming as literature is to the mastery of English" (paraphrase of B.I.Blum)
 
Contents


GENERAL COURSE INFORMATION 
  • Instructor: Professor Alex Borgida      (borgida at cs rutgers edu)  [Please put 431 in the e-mail Subject line.] 

  • Office hours: Wednesday, 3:00pm-5:00pm, or  by e-mail appointment, almost any time. 
    Office: Core 315.  Phone 732 445 4744 
  • Teaching Assistant: Mohammad Tanvir Alam (moalam at paul)
  • Time and place

  •  
    Lecture / recitation  Tuesday 6:40pm - 8:00 pm  Hill 120 (used to be ARC 206)
    Lecture  Thursday 6:40pm - 9:20 pm  Hill 254

    (Lectures will normally be held on Thursdays, in a double period; in order to fit in a lot of material that you needed to get started with the project, I will often also lecture on Tuesdays in the first half of the course. In compensation, some classes will be cancelled at the end of the term.) 

  • Textbook 
    • There is no official textbook required for the course because I do not think the cost-benefit ratio is good enough for any book I have seen. The following book is recommended since I will present some lectures from it; there will be a copy of it on reserve in the SERC library.
      • Ian Sommerville, Software Engineering, Addison Wesley
        There are many editions of this book, and I am not wedded to any one of them. If you can find a used copy at a good price, go for it.
        This books has an associated web-site , which not only has slides for all the chapters, but a rather nice "Further Readings" page, with pointers to all sorts of other neat stuff.
      The following are other general books that are widely used
      • Roger Pressman, Software Engineering: A practicioner's Approach, McGraw Hill
      • Hans van Vliet, Software Engineering: Principles and Practice, Wiley
      • Bernd Bruegge and Allen Dutoit, Object Oriented Software Engineering, Prentice Hall
      • Sari Pfleeger Software Engineering: theory and practice, Prentice Hall.
      • Barbara Liskov and John Guttag, Program Development in Java, Addison Wesley. (An earlier, IMHO better, version was called Abstraction and specification in Program Development [1986] -- ON RESERVE)
      • Craig Larman Applying UML and Patterns: An intro to object-oriented analysis and design, Prentice Hall -- ON RESERVE
    • I will be drawing on material from a variety of books, articles, and web resources, which will be referenced with the appropriate lecture notes. They will be on reserve in the SERC Reading Room under my name.


    LECTURE NOTES [Readings]
    (Most lectures will not be available as full sets of slides. I will however occasionally have slides of graphs, programs, etc. which will appear here.)

  •  Maurro Pezze and Michal Young have gracioulsy made available on the web the existing chapters of their forthcoming book on testing; chapters 13 and 14 are more than enough for clear and black box testing.
  • The relevant chapters in Sommerville are 22 and 23.
  • Chapter 9 on testing and debugging in Liskov and Guttag is again, very enlightening. It talks about testing ADTs, and provides nice suggestions about how to debug software.


    Copyright policy concerning material on this web site: Please remember that it takes effort for people to produce this "intellectual capital". I can do no better than quote my esteemed colleague, Professor Vasek Chvátal: "Whoever links to these notes will show exquisite taste. Whoever copies these notes (without permission) will be prosecuted to the hilt." Of course, I gratefully acknowledge those on whose work this course is built, usually with their permission: Their (growing) list includes Prem Devanbu, Steve Easterbrook, John Dalbey, John Guttag.




    OVERVIEW AND SYLLABUS
    • Course principles

    • Software engineering is distinguished by several major problems not encoutered in usual CS courses: (i) requirements acquisition (figuring out what the customer wants); (ii) building large products, which require team-work; (iii) the need to maintain/evolve the software product even after it has been deliverd.  (iv) the need to use computer tools and re-use previously written code, in order to achieve better quality products.

      To learn this material, you will be following the general topics outlined in the syllabus below, while working on a major software project, in groups of 5.  The class lectures will present material which should help you do the course project; the issues arising out of running a project are described in a separate document. Because the schedule is very tight, a good number of recitations at the beginning of the course will be taken over for lectures. The remainder of the recitations will usually focus on technical details needed for doing the project, e.g., using the Eclipse programming environment.

      Since the material covered in lectures is by and large not available in textbooks (and comments I will be making about the project are especially "transient"), attendance at lectures will be taken. If you miss a lectures or recitation, it is your responsibility to make up the work and keep informed as to any announcements. Deadlines in this course are firm; there is too much work in this course to allow slippage in the due dates.
       

    • Prerequisites
      • 198:314 Principles of Programming Languages (and its prerequisites) 
        198:344 Design and Analysis of Algorithms

    • Expected work and grading: 

    • Your grade will be based on roughly three equal components (with slightly more weight on the third one): (i) Performance of the entire group on the project. (ii) Individual effort and achievement in the parts of the project (including editing documents, and contributing to them). (iii) Individual class work, including homeworks, and a take home or in-class exam which measures what you learned from the lectures. Note that because of this break-down of grades, no one can expect to "coast" on the coat-tail of the work of others in the team, and at the end of the course I might ask team members to rate each other on their effort and effectiveness.

      Furthermore, any group which does not produce a working program for the demonstration at the end will get no credit for the project. (Welcome to the real world!)
       

      Policy on Academic Integrity: please read the DCS policy statement on academic integrity to which this course will adhere.This is particularly important in this course, where you are encouraged to reuse software or design ideas BUT ONLY IF YOU ACKNOWLEDGE IT PROMINENTLY IN YOUR DOCUMENTATION Please don't jeopardize your academic career by copying, and collaborating beyond permissible limits, (this applies to teams copying from other teams too). 

    • Topics
      The following is a tentative list of topics to be covered:
      1. Problems of SE. The software lifecycle and our project.
        1. [F.Brooks, ``No silver Bullet'', IEEE Computer Journal, April 1987, pp.10-18.] 
      2. User Interface Design: A checklist of principles to be observed in designing interactive systems. Critique of some existing UIs. Example of engineering the UI of a simple KWIC index program. 
        1. [B.Gaines, ``The technology of interaction --- dialogue programming rules'', Int. Journal of Man-Machine Studies, vol 14, 1981, pp.133-150.]
      3. Requirements Engineering. Domain Analysis. Use cases, functional requirements and traceability. Non-functional requirements. UML notation for domain modeling. ?The SADT technique.? 
      4. Architectural Design
        • Traditional approach, based on functional analysis
        • Modules for information/decision hiding - the KWIC index example.
          • [Parnas, "On the criteria to be used in decomposing systems into modules",1971] 
        • Modularization by "helper" finding: procedures, data abstractions, iterators 
          • [Liskov & Guttag]
        • Architectural patterns and frameworks
        • Object-Oriented Design: patterns, contracts
      5. Implementation
        • Specification and implementation of data abstractions (invariants, representations)
        • New features of Java 1.5: generics, iterators, etc.
        • Code reuse, libraries
        • Good programming style in new and old languages
      6. Testing and Debugging. Principles. Non-computer testing. 
        • Test-case design for module testing: blackbox and whitebox techniques. 
        • Integration testing: various approaches (topdown, bottom-up, etc) and their relative merits.
        • Asserts and debugging.
      7. Computer Aids for Software Engineering: Eclipse (you learn about this in recitation), UNIX tools.
      8. Efficiency and implementation: when and how? [J.Bentley]
      9. Software Project Planning and Management
      10. State-of-the-art 
        • Formal Specification of Software [Z/VDM]
        • Early Requirements Analysis (agents, goals, "soft-goals") [i* model of Yu/Mylopoulos]