Resources for Tasks

Task 1: Testing

xUnit Frameworks

A list of xUnit testing frameworks is available at:

http://www.xprogramming.com/software.htm

This list is NOT complete. It omits for example things like HttpUnit (which is an add-on for JUnit for web testing) and jWebUnit, a simpler but less flexible successor to HttpUnit. If you're not sure if there's a xUnit framework for you, try guessing at what it would be called in Google. (Sorry, "cobolunit" had no results.)

Refactoring

Refactoring is a suite of well-defined well-structured techniques for making code cleaner, less redundant, and more reusable.

Martin Fowler keeps the Refactoring Home Page.

Bill Wake (author of Extreme Programming Explored) has an XPlorations site with a number of good essays on refactoring.

Task 3: Project Planning and Management

Effort Estimation

Roger Pressman's resource page -- lots of good links

There are quite a few articles on using Use Case Points for estimating project size, all quite similar to what's in the Jalote book). The Ribu thesis is the longest, but the most relevant to Task 3, because of her analysis of student use of UCP.

A predecessor to Use Case Points is Function Points. Function Points are a way of characterizing how complex a system is, even though it hasn't been built yet. FP was first applied to primitive form-based data base applications, and even though it has many adherents today, I never saw any description on-line or in textbooks that showed how to apply FP to modern interactive systems. However, that seems to have changed:

Finally, the following should be very helpful mapping points or SLOCs (source lines of code) to effort:

Task Planning

Estimation tells you how long a project will take. A project plan specifies how the work will be done, what the intermediate deliverables are, how risk will be managed, and so on. There are many good plans, but even more awful ones.

A project plan has to do more than just make sure everything gets built. It has to do so in a way that minimizes risk. That means frequent productive client involvement, early identification of project-killers, and so on.

Some relevant readings are:

Plans have lots of text, but a good chart is worth several thousand words:

Generally Useful Resources

Print Resources

Books

The following texts are classics in the field. By no means is this an exhaustive list of the "must-haves" for a software developer's library.

The Mythical Man-Month by Frederick P. Brooks, Jr.
A classic, now in a new revised anniversary edition. Why do large software projects fail? And does software engineering have any silver bullets?
Introduction to the Personal Software ProcessSM by Watts S. Humphrey
A highly-developed, very meticulous approach to project tracking and estimation, from the perspective of an individual developer. Will definitely make you feel guilty and disorganized.
Note: There's a good summary by Humphrey in "Using a Defined and Measured Personal Software Process" in IEEE Software, May 1996,13(3).
Object-Oriented Software Engineering: A Use Case Driven Approach by Jacobsen et al.
The inventors of use cases on how to use use cases for requirements analysis and design.
Programming as if People Mattered by Nathaniel S. Borenstein (Princeton University Press, ISBN 0-691-03763-9)
An attempt to bring human computer interaction (HCI) issues into software engineering.
Extreme Programming Explained by Kent Beck
Extreme Programming is the hot thing in software development right now. Take the iterated development approach of the Unified Software Development Process several steps further. While radical in many ways, it makes a lot of sense to many experienced developers.

The following are some standard texts in software engineering. At least one of them should go on your shelf for reference purposes, in case some asks you about "function points."

Software Engineering: A Practitioner's Approach, 5th ed. by Roger Pressman (McGraw-Hill)
This is probably the standard textbook for the field. Massive.
Software Engineering by Ian Sommerville (Addison-Wesley)
Another standard text.

Periodicals

An important thing to learn is the difference between refereed journals, magazines, and newsletters.

Software Engineering Notes
Thick newsletter published by the ACM. Don't trust everything you read here, but this is one of the best places to get a feeling for what the field is doing.
IEEE Software
A magazine. Good surveys, debates, case studies.
IEEE Transactions on Software Engineering
This is a refereed journal. In my personal opinion, it's of little interest to most programmers. Your mileage may vary.


Online Resources

General

Unified Software Process:

Extreme Programming (XP):

Links and comments from former C94 student Ryan C. Horner:

Kelly Mann has searched high and low for software engineering links:

Kelly Mann's Ton o' Links


Testing

Testing is more than running your program and seeing if it works!

Would you bet your job that your program will never crash, that it will never produce incorrect values, no matter what someone types into it? Would you bet thousands of company dollars or more? Would you bet someone's bank account? Their life? For examples where someone lost these bets, see http://www.softwareqatest.com/qatfaq1.html#FAQ1_3.

FAQ #1 at the Software QA/Test Resource Center
This answers basic questions like "What is software testing?"
FAQ #2 at the Software QA/Test Resource Center
Look in particular at the discussion of test plans and test cases
Code Coverage Analysis by Steve Cornett
An important issue in testing is knowing when to stop. One metric is code coverage: how much of your code has been executed by your tests?
The Software Testing FAQ
A very useful collection of answers to common basic questions in testing, with many links to other online resources.
STORM, the Sofware Testing Online Resources
STORM has links to many sites on testing
Testing Techniques by Roger Pressman
Roger Pressman is the author of one of the standard texts in software engineering. This is his list of testing resources.
ApTest
ApTest has a lengthy list of tools for testing.
Test Scenario Design for Software Products by Johanna Rothman
A misleading title. This is actually an interesting perspective on testing based on the much broader product development life-cycle, not just the software development process.
Automated Testing Software
Not only automated testing but coverage on creating White/Black box tests. (Finder: Ben McLean)

Project Estimation and Management

Some Useful Links
A few I've found recently.
Case Study: From "Chaos" to "Repeatable" in Four Months by Johanna Rothman
A nice brief introduction via a concrete example of process improvement, in terms of the first two levels in the CMM model of software development maturity.
The SEI Capability Maturity Model
From the software engineering archives -- a good description of the levels of the CMM and the point of the CMM.

Requirements Analysis

What is a quality use case? by Adolph et al.
A very readable overview of use cases with examples, including an example of a bad use case. NOTE: The InformIT web site has a lot of good material on a wide range of programming issues. You have to register to see it all, but registration is free.
SEED-Layout Requirements Analysis
A nice example of an in-depth requirements analysis in careful, but non-formal, terms.
Some Brief Diagram Notes
My own examples of STD's, DFD's, and sequence diagrams, inspired by common student mistakes.
Rational's UML Overview (PDF)
A nice description of what some of the basic UML diagrams are for, in what order to develop them, and how it all fits into a software development process.

NOTE: the examples frequently involve design not requirements, e.g., making a class CourseOffering is a design choice. For our purposes, stick to requirements. Only actors, servers, clients, data repositories, systems (e.g., the billing system) should appear in your sequence and collaboration diagrams. Class diagrams aren't that critical for us at this stage.

Beyer & Holtzblatt's Contextual Design web site for their company, InContext
This site has links to various short articles on this consulting group's approach to customer-centered design.

For use cases in particular, see the following.

Practitioner's Guide to Use Case Modeling
A decent overview with examples.
Alistair Cockburn's Structuring Use Cases with Goals and Use Cases 10 Years Later
Cockburn has done a lot of study of use cases and how they're used and misused.

For how use cases lead to an analysis model (a high-level semi-design):

A PDF/Powerpoint overview of the Unified analysis process
Jie Zhao's overview of the analysis process
A PDF summary of the formal mapping between of Objectory notation to UML
TogetherSoft's Description of Objects in Analysis Diagrams
Class notes from Gordon College showing UML diagrams for an ATM system


Comments? comment image Send mail to Chris Riesbeck.