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.