Saturday, January 8, 2011

Here’s a quick survey of some other candidates for every programmer’s toolbox.

Testing Tools
FitNesse: http://fitnesse.org/
FitNesse is an acceptance testing tool that allows tests to be expressed as tables of input data and expected output data, described in Fit for Developing Software: Framework for Integrated Tests.

Watir: http://wtr.rubyforge.org/
Watir is an open source library for automating web browsers allowing automated testing of web applications. It started out on Internet Explorer on Windows but is in the process of being ported to other browsers.

Sahi: http://sahi.co.in/
Sahi is an automation and testing tool for web applications that runs as a proxy server.

The Grinder: http://grinder.sourceforge.net/
This is an open source load testing tool in which scripts are written Jython.

JMeter: http://jakarta.apache.org/jmeter/
This is an open source load testing tool in which scripts are written in Java.

QuickTest Professional and LoadRunner: http://www.hp.com/
QuickTest Professional is an automated functional GUI testing tool, and LoadRunner is a performance and load testing product.

Peach Fuzzing Platform: http://peachfuzzer.com/
Peach is a fuzzer that is capable of performing both generation and mutation-based fuzzing.

RFuzz: http://rfuzz.rubyforge.org/
RFuzz is a Ruby library that allows web applications to be easily fuzz tested.

Runtime Analysis Tools
Valgrind: http://valgrind.org/
Valgrind is an instrumentation framework for Linux and includes, among other things, memory analysis and profiling tools.

BoundsChecker: http://www.compuware.com/products/devpartner/visualc.htm
BoundsChecker is part of Compuware’s DevPartner for Visual C++ BoundsChecker Suite. It analyzes running programs to detect memory and other issues.

DTrace: http://opensolaris.org/os/community/dtrace/
DTrace is a highly regarded dynamic tracing framework created by Sun Microsystems for troubleshooting kernel and application problems. It is also incorporated in Mac OS X “Leopard,” including a GUI called Instruments.

Network Analyzers
If your software relies upon network communication (and it’s becoming difficult to find software which doesn’t), it can be very useful to see what’s really being transferred over the network. A network analyzer (sometimes called a packet sniffer) sits on the network capturing and analyzing all the packets crossing it. You can then filter these packets to extract only those that you’re interested in and examine their contents. Broadly speaking, a packet sniffer is a low-level tool. It can capture all the traffic on the network but doesn’t necessarily have a deep understanding of the protocol being used. So if, for example, the communication is encrypted, a packet sniffer is unlikely to be able to display the information being exchanged.

Wireshark: http://www.wireshark.org/
Wireshark (previously known as Ethereal) is an open source tool that provides similar functionality to TCPDUMP, but it has a graphical front end and a wider selection of built-in analysis tools.

Debugging Proxies
A debugging proxy is a higher-level tool than a network analyzer, targeted to a particular protocol. You normally need to configure your software slightly differently so that it communicates via the proxy rather than directly, but having done so very often you can get a deeper analysis of the conversation. Some debugging proxies can even view encrypted data.

Fiddler: http://www.fiddlertool.com/
Fiddler is a Windows HTTP proxy that, as its name suggests, allows you to “fiddle” with incoming or outgoing data.

Debuggers
In most cases, your choice of debugger is going to be governed by your choice of language, IDE, or tool chain, so there’s little value in me providing a list of choices here. There is one particular debugger that I have to mention, however:

Firebug: http://getfirebug.com/
Firebug has transformed web development by providing dramatically improved client-side debugging facilities. It allows you to inspect and edit the DOM and CSS, as well as monitor and profile network activity, and it provides full JavaScript debugging support.