CSE 403



Calendar Lectures Assignments Turn-in Projects Software Tools Resources Old exams


Syllabus Grading Academic Conduct Accommodations


Forum Wiki Email archives

Software Tools

You have a great deal of latitude in choosing your own toolset. Your team is ultimately responsible for choosing and learning these tools. That said, the staff wants to help you as much as possible, so if you are stuck, please ask us! However, be aware that we don't know every tool that you might choose. Your whole team should work together to choose, understand, and use your tools — just like in the real world. You should be, or become, comfortable with reading documentation that is sometimes incomplete or confusing, and with installing and using new software. These are skills that will stand you in good stead, no matter where your career takes you.

Recommended software tools

Integrated development hosting
We strongly recommend Google code, which conveniently integrates the most important development tools. This includes version control, defect tracking tool, wiki, etc. The wiki is a good place to host your development homepage.
Version control
We require that you use a distributed version control system, such as Mercurial (recommended) or Git.
You might find this Mercurial tutorial useful if you're unfamiliar with distributed version control, or want to brush up. More details appear in Mercurial: The Definitive Guide.
We recommend, but do not require, that you use the Crystal conflict detector, which informs you about potential future conflicts in your codebase; this can prevent costly conflicts and merges. Here are some student quotes from previous quarters that motivate why you would want to use it, and a quick start guide for Crystal.
Web and database hosting
CSE's cubist server can host your team's website, database, etc. Please refer to this page to see what facilities are available, then talk to the staff about your specific needs and we'll send them along to CSE support as required. Do this early because it can take a couple of days to set up.
Unix groups
The staff will create a Unix group (for file system permissions) per team on request.
Mailing list
We require that your team has a mailing list with archives. All CSE 403 staff members must have permission to post to your list and to read its archives, but they should not receive email from your list.
You can create a team mailing list, with archives, through Mailman/C&C, Google Groups, and similar services.

Alternate software tools

Integrated development hosting
If you do not want to use Google Code, other sites such as SourceForge, GitHub, and Bitbucket provide similar functionality. Or, you can build your own development toolset, using the parts listed below.
Version control
Mercurial and Git are installed at CSE, and you can also set up a private repository at CSE if you prefer not to use Google Code or other hosting providers. Ask the course staff for details.
Web, database, and compute hosting
If you just need webpages (for your project's homepage), you can do that via Google Sites (clunky, but works), directly from Google Code (serve .html files in your repository directly), SourceForge, and many other sites.
If you need more sophisticated processing, or a database, or just compute cycles, you can use Amazon Web Services; the CSE 403 staff can provide you an account with $200 of credit, if you ask well in advance.
A wiki is a lightweight way for a group to share notes. You may create a team wiki page (using MediaWiki) from the CSE 403 wiki. Many code hosting services, including Google Code, also provide a wiki.
Defect tracking
The staff will set up one Bugzilla instance for each team who requests it.


Here are tools you can use to draw UML diagrams.

Programming tools

The CSE lab machines have a full complement of development environments/tools, including most or all of the following.

C, C++, C#, Java, Python, PHP, Ruby(-on-rails), etc.
unit test frameworks
Java: JUnit, TestNG, JUnitEE
JavaScript: JsUnit
C# and .NET: NUnit, csUnit
C: CUnit
PHP: PHPUnit, SimpleTest; CakePHP incorporates its own unit testing primitives
Ruby: Test::Unit, RSpec, ZenTest
Python: PyUnit
other testing tools
Selenium for replay of user actions (e.g., clicks) in a browser
code coverage
NoUnit, EMMA, Cobertura, Hansel, etc.

If you use Microsoft Windows on your personal computer, Cygwin might be helpful in interoperating with software hosted on CSE unix machines (such as version control repositories).

You may use any programming language you like. However, your project must obey professional standards of modularity and abstraction. Some languages make this very difficult to guarantee, and we strongly recommend against them.

Additional choices and requirements

If you need additional resources (a mobile phone, Amazon Web Services credit, software installed on attu or cubist, etc.), please tell the staff as soon as possible. We will do our best to accommodate such requests, but cannot make any guarantees.

It is required that your team project can be installed, by a staff member, on a fresh CSE virtual machine image (or on other readily available resources such as attu, cubist, or Amazon Web Services). If you have written a mobile device app, it must run both on an emulator and on some mobile device, but it does not have to run on arbitrary mobile devices.