Thursday, November 30, 2006

Final Presentations Dec 12

The final class meeting is Dec 12 10am-12pm. Each group will present their project. Presentations should be 15-20 min in length, and well rehearsed. Your presentations should:

  • Desribe what the project is.
  • Demonstrate the application.
  • Discuss the level of completion.
  • Discuss the group's working process, what worked and didn't work.

Saturday, October 28, 2006

Best of the web roundup

The site "Software Development in the Real World" has a nice roundup of websites that emphasize good design and organization.

Thursday, October 26, 2006

Object Oriented Programming in C

There are several in the class that have "C" as their native language. How then can they map all of our discussions of object oriented programming to this "arcane" procedural, portable assembly. The answer may surprise you, "Object oriented programming is a state of mind." It's away of solving problems, not a language paradigm necessarily. Laurent Deniau illuminates Object Oriented Programming in C. Here is a lengthy, detailed manual for doing OOP in C by Axel-Tobias Schriener. Yet another useful resource .

Thursday, October 19, 2006

Code Style and Conventions

Code Style and Conventions should appear in your SDD. The central aims in devising a coding style for your projects is predictability and readability:

  • Predictability Can members of your group identify semantic features of the code at a glance. You should avoid bad variable names (a, f(), etc), instead use nouns for variables and verbs for functions (m_date, up_vector, computeLocalTime()). Use names to indicate member variables "m_date". If you are using set/get style for member variables, use those names "setTime(), getTime()"; make sure you have symmetry in your names too.

  • Readability Can you read the code and tell what it does. The pinnacle of readable code is Literate Programming, which intertwines documentation and source. You can move toward this without a special programming environment by enforcing good names, liberal use of space, and frequent English comments to lead the eye through the code.


Since many of you are using a web interface, be sure to have conventions for your HTML and style sheets, even if they are automatically generated.

Standard Java conventions.

Details on Naming Conventions.

An example style guide for Mozilla code practice. Note, this style assumes "C" code. Here is a more java friendly style guide called "Turbine".

An example of a code style enforcer for visual studio.

Tuesday, October 17, 2006

System Design Document (SDD)

The system design document will be a very important component of your system. Yet more writing! This document is designed for internal use, for your team. It plays an important role in system documentation and maintenance. A successful SDD will capture the design philosophy and system at a high level, as well as detailed object level descriptions. This document should reflect your requirements document, i.e. reference reqs by number, and identify how the requirements were captured by the system. Brad Appleton has a nice template for SDDs. One might consider using Doxygen to generate at least some of the SDD directly from the code comments.

Monday, October 02, 2006

Requirements Recap

Karl Wiegers has a nice article about Writing Quality Requirements. This article covers strategies for validating your requirements. Please pay attention to the section Reviewing Requirements for Quality.

Because the quality of any product depends on the quality of the raw materials fed into it, poor requirements cannot lead to excellent software.

Startup Myths

Thanks to Peter for this one.
Top 10+1 Myths
of Business Geeks, by Ron Garret covers a few of the common misconceptions about starting a tech business. A few items are bit contrived, but important points.

As Dwight Eisenhower said: plans are useless, but planning is indispensable.

Thursday, September 28, 2006

Journal Entry: Plan and Process

Journal entry assignment three asks you to discuss your plan for getting code done and integrated into your system. Please discuss how you will approach the problem of fulfilling requirements and what process you will use. How will you keep on track and avoid procrastination? How will you motivate your teem to do the same. Please be specific about your strategy, and identify how you utilise or contradict the ideas from existing process frameworks (Agile or RUP for example).

... due Thurday Oct 5

Wednesday, September 27, 2006

Systems Engineering Lecture from JPL

Friday Sept. 29, 10:00am, ME 218
Brian Muirhead, chief engineer at JPL, will be giving a lecture, "Take Risk, Don't Fail: The Art and Science of Systems Engineering." Please plan to attend, extra credit will be given if you submit a short summary of the talk.

--This talk will provide a unique overview and insight into the process of systems engineering and qualities of the engineers who practice it. Examples of specific problems taken from recent NASA/Jet Propulsion Lab missions including the Mars Exploration Rover, Deep Impact and Mars Pathfinder will illustrate different approaches and skills needed to identify, assess, resolve, and validate solutions to complex, multi-disciplinary problems. This talk will emphasize the inherent "fuzziness" of systems engineering problems and the roles and characteristics of the teams who must solve them.

Tuesday, September 26, 2006

Alternatives to the "Waterfall process"

The waterfall process is the traditional view of software engineering, where the stages of development proceed sequentially. In recent years, a number of alternative methods have been formalized and studied. Of these IBM's "RUP" (Rational Unified Process) and Agile XP ( Extreme Programming) methods stand out. Both of these methods emphasize the importance of communication and iteration. In general, RUP is best suited to larger groups or sparse teams, i.e. best for groups that can't always work closely together. Agile methods emphasise tight group collaboration, this is especially true for extreme programing approaches. These alternative methods offer important strategies for accomplishing complex system developments with tight time constraints.

Here is a link to a more descriptive coverage of Agile Software Development.

Top Ad$ense earners

Google's Adsense provides a simple mechanism for generating advertisement based revenue from web pages. John Chow has the latest roundup of top Adsense earners. Notice that the top earner does it all by himself!

Wednesday, September 06, 2006

Assignment 3: Proposal Revision & Presentation

The next assignment involves revising and polishing your proposal. It will be due Tues 12 Sep. On this date you should also have a short, 7 minute presentation describing the project. This will be done in front of the class, and each presentation will be critiqued. There are some common issues with all of the proposals, be sure to address these in your revision:

  • Always have someone else read your proposal! Ask someone to give you feedback and explain your project to you. This will help you identify holes or unclear explanations.
  • Avoid informal language, like "you" and "I". These can be directly substituted with "one" and "we". Imagine that the document speaks for you and your "company", rather than it being written by you.
  • Background, background, background. Be sure to do your due diligence in finding competing work. It will be rare that you have truly novel idea, who else thought of it?
  • Make strong points. Avoid weak or self deprecating comments. This document should convince me that you are the right person/team for the job.
  • Avoid too much internal detail in system description. Your description should be detailed, but only with respect to system boundaries. Delving into specifics about its implementation will confuse the reader, and in many cases make the system seem fuzzier rather than more concrete. Focus on aspects of the description from an "outside" point of view.

Also, make sure that you have reasonable section headings, your cover sheet is only one page and contains your contact info, if you have an itemized budget be sure that it has a total at the bottom. You should go back through the assignment 1 description, and make sure you have addressed each of the topics. Your grade on this project will depend on the amount of improvement when compared to the draft you just submitted.

Monday, September 04, 2006

A Requirements Specification Template

The Volere Requirements Specification Template, available here , is a detailed breakdown of the requirements elicitation process. This document covers all of the categories you should consider when developing and negotiating the requirements for your project. While not all of the 26 categories will be immediately relevant to your work, this template can serve as a guide for evolving requirements during the lifetime of the software. Use this document in conjunction with chapters 4 and 12 in the book for the next phase of the project; negotiating requirements and deliverables.

Thursday, August 31, 2006

Free Security Engineering Book

Ross Anderson has just released his classic security book for free (as in beer). Have a look. Security is a seriously hot issue these days, and likely to continue into the foreseeable future. This is a whole other aspect of software engineering that is often overlooked.

UML Cheatsheet

Lou Franco has produced a nice, short UML Cheatsheet under the Creative Commons licence. Have a look and use it to keep your diagrams straight!

Journal Entry 2: Modeling and Rationale

Now that you are working on a more detailed proposal, I would like you to pick one aspect of your project and sketch a UML model of it. I want the journal entry to record how this model changed as you completed the sketch, and how it changed the proposal that you are writing. Refer to Chapter 12, Rationale, for some things to think about when discussing the changes that happened; what were the issues, alternatives, criteria, arguments, and decisions you made? Aspects of the project that you can model include, tasks (timeline), the user interface, the data model, etc. If this approach is helpful in the creation of your proposal, consider modeling multiple aspects; think about how these models interact.

Due Thursday Sept 7.

Tuesday, August 29, 2006

Ajax Demystified

"Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for creating interactive web applications. The intent is to make web pages feel more responsive by exchanging small amounts of data with the server behind the scenes, so that the entire web page does not have to be reloaded each time the user makes a change. This is meant to increase the web page's interactivity, speed, and usability."
-
from Wikipedia

Here is a nice article by Drew McLellan at xml.com about the design methodology. Article includes basic code examples!

Monday, August 28, 2006

Assignment 2: The Proposal

This assignment asks you to develop a full proposal for the project that you identified in the concept paragraph. You will end up doing two revisions in the course of two weeks, with a presentation at the end. Together, we will determine which of these proposals will become class projects. There will also be a special award for those who's project is chosen! Please start early, writing isn't easy, and you will have other work to do during that time.

Timing is Everything

Robert Martin contrasts traditional and agile project management and timeline methods in a nice article from 2003.

"Project plans are afflicted by uncertainties that turn schedules into random variables. Fortunately we can measure that randomness and use it to determine the probabilities that certain tasks will be complete by certain dates. Once we know the probabilities, we can manage the project by adjusting scope, manpower, and schedule so that the probability of a desirable outcome remains high."

Not to my surprise, Wikipedia has a concise but comprehensive description of Project Management from a number of perspectives.

Thursday, August 24, 2006

Educators from CMU discuss rapid game prototyping

Kyle Gabler, Kyle Gray, Matt Kucic, and Shalin Shodhan from CMU have a delightful Gamasutra article on ultra fast Game Prototyping. This article discusses a methodology for quickly exploring and developing new ideas. This methodology will be revisited later in the course, when we discuss development strategies like Agile XP.

Journal Entry 1: A Process Summary.

Your first required journal entry will be a one page description of the software engineering process, as you see it now. What steps, tools, and skills are involved? How do you predict the project will be managed?

Due Thursday Aug 31.

Nice, Short Proposal Writing Guide

Alice Reid covers general Proposal Writing concisely.

"The general purpose of any proposal is to persuade the readers to do something -- whether it is to persuade a potential customer to purchase goods and/or services, or to persuade your employer to fund a project or to implement a program that you would like to launch."

Wednesday, August 23, 2006

An excelent article on the (engineering) process

Gary Pollice discusses various issues related to the project development process.

Gary Pollice is a professor of practice at Worcester Polytechnic Institute, in Worcester, MA. He teaches software engineering, design, testing, and other computer science courses, and also directs student projects. Before entering the academic world, he spent more than thirty-five years developing various kinds of software, from business applications to compilers and tools. His last industry job was with IBM Rational software, where he was known as "the RUP Curmudgeon" and was also a member of the original Rational Suite team. He is the primary author of Software Development for Small Teams: A RUP-Centric Approach, published by Addison-Wesley in 2004. He holds a BA in mathematics and an MS in computer science.

Assignment 1: Concept Paragraph

Your task is twofold: 1) identify a "novel" idea suitable for a small group project, and 2) write a short, high-level overview of the project. Item 1 can involve picking up an unfinished project from a previous class, a pet project that has captured your interest but never made it to the top of the heap, or some other creative idea that you feel has some value or demand. I want you to identify something that has marketability, and doesn't directly copy some other, existing idea. For item 2, you should imagine a non-technical target audience. What is the thing you propose? What does it do, and who will use it? Consider previous work, and how this project differs from that. I want a clean, executive summary; no spelling or grammar errors please.

This assignment will be the introduction for Assignment 2, the project proposal, due a week later.

Welcome

Welcome to cs460: Software Engineering. Is it art, architecture, or bureaucracy? A bit of each, I guess. Mostly, it's a required, core cs class. Another hoop to jump through. For me, it's a bit more. Software Engineering encapsulates some of the most challenging aspects of "real" software design. While much of the course deals with formal methods for specification and project management, the real take-away is experience communicating about software design at multiple levels of abstraction.

The class syllabus is here.