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.
 
- Wiki
 
- 
  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.
 
Diagramming
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.
- IDEs
 
- 
 eclipse
 
- compilers/interpreters
 
- 
  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.