Showing posts with label Test. Show all posts
Showing posts with label Test. Show all posts

Monday, March 16, 2009

Test take place of print

[Martin Fowler]: Whenever you are tempted to type something into a print statement or a debugger expression, write it as a test.

Saturday, October 11, 2008

Test javascript e4x in firefox3

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test javascript e4x</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>

也可以将script的type直接写成"text/javascript"<br/>
<script type="text/javascript;e4x=1">

var person = <description>
<name>_test</name>
<sex>male</sex>
<age>30</age>
</description>;

document.write("The person' name is '" + person.name + "'");

</script>

</body>
</html>

Thursday, October 02, 2008

jQuery event model test


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" charset="utf-8" src="/lib/jquery/jquery-1.2.6.js"></script>
<style type="text/css" media="screen">
div, p {
margin: 2px;
border: #eee 1px solid;
min-height: 20px;
}
table, td {
width: 100%;
border: #ddd 1px solid;
}
.block {
position: relative;
width: 200px;
background-color: #828;
}
.data {
background-color: #333;
}
</style>
</head>
<body>
<p>Click or double click here.</p>
<span></span>
<div class="data">click here and see console log</div>
<p id="myCustom">Has an attached custom event.</p>
<button id="customButton">Trigger custom event</button>
<span style="display:none;" id="eventSpan"></span>

<div>
<p>
Binds a handler to a particular event (like click) for each matched element. Can also bind custom events.<br>
The event handler is passed an event object that you can use to prevent default behaviour. To stop both default action and event bubbling, your handler has to return false. Note that this will prevent handlers on parent elements from running but not other jQuery handlers on the same element.
</p>
<p>
In most cases, you can define your event handlers as anonymous functions (see first example). In cases where that is not possible, you can pass additional data as the second parameter (and the handler function as the third), see second example.
</p>
<button id="go">Go</button>
<button id="stop">STOP!</button>
<button id="back">Back</button>
<div class="block">div.block has animation</div>
</div>

<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<div class="oneClick"></div>
<p id="p4click">Click a green square...</p>

<button id="button1">Button #1</button>
<button id="button2">Button #2</button>
<div><span id="spanFirst">0</span> button #1 clicks.</div>
<div><span id="spanLast">0</span> button #2 clicks.</div>

<button id="old">.trigger("focus")</button>
<button id="new">.triggerHandler("focus")</button><br/><br/>
<input type="text" value="To Be Focused" class="handler"/>

<script type="text/javascript" charset="utf-8">
$("p").bind("click", function(e){
console.log(e);
var str = "( " + e.pageX + ", " + e.pageY + " )";
$("span").text("Click happened! " + str);
});
$("p").bind("dblclick", function(){
$("span").text("Double-click happened in " + this.tagName);
});

function handler(event) {
console.log(event.data.foo);
}

// You can pass some extra data before the event handler:
$("div.data").bind("click", {foo: "bar"}, handler)

// To cancel a default action and prevent it from bubbling up, return false:
$("form").bind("submit", function() {return false; })

// Can bind custom events too.
$("p").bind("myCustomEvent", function(e, myName, myValue){
$(this).text(myName + ", hi there!");
$("#eventSpan").stop().css("opacity", 1)
.text("myName = " + myName)
.fadeIn(30).fadeOut(1000);
});
$("#customButton").click(function () {
$("#myCustom").trigger("myCustomEvent", [ "John" ]);
});

// Start animation
$("#go").click(function(){
$(".block").animate({left: '+=100px'}, 2000);
});

// Stops all the currently running animations on all the specified elements.
// If any animations are queued to run, then they will begin immediately.
// Stop animation when button is clicked
$("#stop").click(function(){
$(".block").stop();
});

// Start animation in the opposite direction
$("#back").click(function(){
$(".block").animate({left: '-=100px'}, 2000);
});

var n = 0;
$("div.oneClick").one("click", function(){
var index = $("div.oneClick").index(this);
$(this).css({ borderStyle:"inset",
cursor:"auto" }).text("this div be clicked");
$("#p4click").text("Div at index #" + index + " clicked." +
" That's " + ++n + " total clicks.");
});

$("#button1").click(function () {
update($("#spanFirst"));
});
$("#button2").click(function () {
$("#button1").trigger('click');
update($("#spanLast"));
});

function update(j) {
var n = parseInt(j.text(), 0);
j.text(n + 1);
}

// To pass arbitrary data to an event:
// $("p").click( function (event, a, b) {
// when a normal click fires, a and b are undefined
// for a trigger like below a refers too "foo" and b refers to "bar"
// } ).trigger("click", ["foo", "bar"]);
$("#p4click").bind("myEvent", function (event, message1, message2) {
console.log(message1 + ' ' + message2 + " from element: " + this.id);
});
$("#p4click").trigger("myEvent", ["Hello","World!"]);

// This particular method triggers all bound event handlers on an element (for a specific event type) WITHOUT executing the browsers default actions.
$("#old").click(function(){
$("input.handler").trigger("focus");
});
$("#new").click(function(){
$("input.handler").triggerHandler("focus");
});
$("input.handler").focus(function(){
console.log(arguments[0]); // Pass along a fake event by jQuery and no need to fix fake event
$("<span>Focused!</span>").appendTo("body").fadeOut(3000);
});
</script>
</body>
</html>

Tuesday, July 01, 2008

用maven快速建立一个tapestry5的测试项目

$> mkdir -p ~/eclipse/workspace
$> cd ~/eclipse/workspace
$> mvn archetype:create -DarchetypeGroupId=org.apache.tapestry -DarchetypeArtifactId=quickstart -DgroupId=org.example -DartifactId=myapp -DpackageName=org.example.myapp -Dversion=1.0.0-SNAPSHOT

$> cd myapp
$> mvn jetty:run

open firefox and go to http://localhost:8080/myapp

Wednesday, May 21, 2008

ruby script/server lighttpd

在一个jruby on rails目录下面运行以下命令时报错:
$> ruby script/server lighttpd
.....
Couldn't find any pid file in '/Users/yu/Sites/RubyOnRails/tmp/pids' matching 'dispatch.[0-9]*.pid'
(also looked for processes matching "/Users/yu/Sites/RubyOnRails/public/dispatch.fcgi")
在lighttpd的log中看到如下信息:
2008-05-21 00:23:33: (log.c.75) server started
2008-05-21 00:23:33: (mod_fastcgi.c.1029) the fastcgi-backend /Users/yu/Sites/RubyOnRails/public/dispatch.fcgi failed to start:
2008-05-21 00:23:33: (mod_fastcgi.c.1033) child exited with status 9 /Users/yu/Sites/RubyOnRails/public/dispatch.fcgi
2008-05-21 00:23:33: (mod_fastcgi.c.1036) If you're trying to run PHP as a FastCGI backend, make sure you're using the FastCGI-enabled version.
You can find out if it is the right one by executing 'php -v' and it should display '(cgi-fcgi)' in the output, NOT '(cgi)' NOR '(cli)'.
For more information, check http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI#preparing-php-as-a-fastcgi-programIf this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2008-05-21 00:23:33: (mod_fastcgi.c.1340) [ERROR]: spawning fcgi failed.
2008-05-21 00:23:33: (server.c.908) Configuration of plugins failed. Going down.

经google后才发觉script/server lighttpd只能用于ruby on rails的项目上,通过以下命令:
$> /usr/local/lighttpd/bin/spawn-fcgi -f /Users/yu/Sites/RubyOnRails/public/dispatch.fcgi -p 12000 -s /tmp/rails-fcgi.socket
会得到成功的结果如下:
spawn-fcgi.c.197: child spawned successfully: PID: 2275
而在jruby的项目下调用spawn-fcgi则会报脚本错误。

另附dispatch.sh[reference: http://www.javaeye.com/topic/168989]


#!/bin/sh

DISPATCH_PATH=/Users/yu/Sites/cv2/public/dispatch.fcgi
SOCKET_PATH=//Users/yu/Sites/cv2/tmp/sockets
RAILS_ENV=developement
export RAILS_ENV

case "$1" in

start)
for num in 0 1 2
do
/Users/yu/Programs/lighttpd/bin/spawn-fcgi -f $DISPATCH_PATH -s $SOCKET_PATH/rails.socket-$num
done
;;

stop)
killall -9 dispatch.fcgi
;;

restart)
$0 stop
$0 start
;;

*)
echo "Usage: dispatch.sh {start|stop|restart}"
;;

esac

exit 0

Wednesday, May 07, 2008

test scope of this in closure and in anonymous functions

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>test scope of this in closure and in anonymous functions</title>
<script type="text/javascript">
var foo = 'this is window.foo!';
var d = [1, 2, 3];
// timeout functions
function Constructor() {
this.foo = 'this is Constructor.foo!';
var that = this;
this.timerId = window.setTimeout(function() {
// alert(this); // will get [object Window]
alert("this.foo = " + this.foo);
alert("that.foo = " + that.foo);
} , 1000);
}
// local functions
Constructor.prototype.getFoo = function() {
alert(this); // [object Object]
var getExternalFoo = (function() {
// alert(this); // will get [object Window]
return d.concat(this.foo)
})();
return getExternalFoo;
};
// using Function.call(object)
Constructor.prototype.getBar = function() {
var getInternalFoo = (function() {
// alert(this); // will get [object Object]
return d.concat(this.foo)
}).call(this);
return getInternalFoo;
};
var f = new Constructor();
document.write(f.getFoo());
document.write("<br />");
document.write(f.getBar());

</script>
</head>
<body>
</body>
</html>

在window.setTimeout和全局环境中的匿名方法中的this是指向window对象的,所以在调用过程中可以将此匿名方法做为实际的某个对象(如this对象)的方法来调用.

Sunday, September 16, 2007

rcov: code coverage for Ruby and Rails rcov plugin

rcov reference
Install:
shell> sudo gem install -y rcov
How do I use it? What does it look like?
shell> rcov --help
shell> rcov test/*.rb

Rails Rcov Plugin:
Install:
./script/plugin install http://svn.codahale.com/rails_rcov
Usage

For each test:blah task you have for your Rails project, rails_rcov adds two more: test:blah:rcov and test:blah:clobber_rcov.
Running rake test:units:rcov, for example, will run your unit tests through rcov and write the code coverage reports to your_rails_app/coverage/units.
Running test:units:clobber_rcov will erase the generated report for the unit tests.
Each rcov task can take a few options:


rake test:units:rcov SORT=(name|loc|coverage)
rake test:units:rcov SORT_REVERSE=(YES|Y|TRUE|T|1)
rake test:units:rcov THRESHOLD=(INT)
rake test:units:rcov NO_COLOR=(YES|Y|TRUE|T|1)
rake test:units:rcov PROFILE=(YES|Y|TRUE|T|1)
rake test:units:rcov SHOW_WARNINGS=(YES|Y|TRUE|T|1)

These options parallel the rcov options, so check the rcov documentation if this isn’t clear.
Running rake test:rcov will run the unit tests, functional tests, and integration tests sequentially via rcov, and output the results to your_rails_app/coverage/(units|functionals|integration).

Rspec and Rspec::Rails install and usage

shell> gem install rspec

Overview
RSpec is a framework which provides programmers with a Domain Specific Language to describe the behaviour of Ruby code with readable, executable examples that guide you in the design process and serve well as both documentation and tests.

Here is how you do it
Start with a very simple example that expresses some basic desired behaviour.


# bowling_spec.rb
require 'bowling'

describe Bowling do
before(:each) do
@bowling = Bowling.new
end

it "should score 0 for gutter game" do
20.times { @bowling.hit(0) }
@bowling.score.should == 0
end
end

Run the example and watch it fail.

$ spec bowling_spec.rb
./bowling_spec.rb:4:
uninitialized constant Bowling

Now write just enough code to make it pass.

# bowling.rb
class Bowling
def hit(pins)
end

def score
0
end
end

Run the example and bask in the joy that is green.

$ spec bowling_spec.rb --format specdoc

Bowling
- should score 0 for gutter game

Finished in 0.007534 seconds

1 example, 0 failures


Install Rspec::Rails
ruby script/plugin install svn://rubyforge.org/var/svn/rspec/tags/CURRENT/rspec
ruby script/plugin install svn://rubyforge.org/var/svn/rspec/tags/CURRENT/rspec_on_rails
Bootstrap
Once the plugin is installed, you must bootstrap your Rails app with RSpec. Stand in the root of your Rails app and run:
ruby script/generate rspec
This will generate the various files needed to use RSpec with Rails.
Run specs with rake …
rake spec
... or run specs with scripts/spec
ruby script/spec spec

Monday, August 13, 2007

Hpricot CSS Selector speed test

require 'rubygems'
require 'scrubyt' # mechanize hpricot open-uri rubyinline parse-tree ...

doc = Hpricot(open('http://extjs.com/playpen/slickspeed/system/template.php?include=prototype.js&function=$$&modifier=&nocache=1187009411'))


def step(doc, selector)
print selector + "\t\t"
start_time = Time.now.to_f
rs = doc/selector
end_time = Time.now.to_f
print rs.length.to_s + "\t\t"
puts ((end_time - start_time) * 1000).round # !> (...) interpreted as grouped expression
end

step(doc, "*")
step(doc, "div:only-child")
step(doc, "div:contains(CELIA)")
step(doc, "div:nth-child(even)")
step(doc, "div:nth-child(2n)")
step(doc, "div:nth-child(odd)")
step(doc, "div:nth-child(2n+1)")
step(doc, "div:nth-child(n)")
step(doc, "div:last-child")
step(doc, "div:first-child")
step(doc, "div:not(:first-child)")
step(doc, "div:not(.dialog)")
step(doc, "div > div")
step(doc, "div + div")
step(doc, "div ~ div")
step(doc, "body")
step(doc, "body div")
step(doc, "div")
step(doc, "div div")
step(doc, "div div div")
step(doc, "div, div, div")
step(doc, "div, a, span")
step(doc, ".dialog")
step(doc, "div.dialog")
step(doc, "div.dialog.emphatic")
step(doc, "div .dialog")
step(doc, "div.character, div.dialog")
step(doc, "#speech5")
step(doc, "div#speech5")
step(doc, "div #speech5")
step(doc, "div.scene div.dialog")
step(doc, "div#scene1 div.dialog div")
step(doc, "#scene1 #speech1")
step(doc, "div[@class]")
step(doc, "div[@class='dialog']")
step(doc, "div[@class^='dia']")
step(doc, "div[@class$='log']")
step(doc, "div[@class*='sce']")
step(doc, "div[@class|='dialog']")
step(doc, "div[@class!='madeup']")
step(doc, "div[@class~='dialog']")

# >> selector founded time
# >> * 755 24
# >> div:only-child 22 223
# >> div:contains(CELIA) 26 130
# >> div:nth-child(even) 106 70
# >> div:nth-child(2n) 14 65
# >> div:nth-child(odd) 137 116
# >> div:nth-child(2n+1) 14 191
# >> div:nth-child(n) 31 65
# >> div:last-child 53 101
# >> div:first-child 51 89
# >> div:not(:first-child) 192 100
# >> div:not(.dialog) 192 49
# >> div > div 242 171
# >> div + div 0 35
# >> div ~ div 240 6882
# >> body 1 20
# >> body div 243 37
# >> div 243 26
# >> div div 242 287
# >> div div div 241 525
# >> div, div, div 729 72
# >> div, a, span 243 184
# >> .dialog 51 41
# >> div.dialog 51 48
# >> div.dialog.emphatic 5 52
# >> div .dialog 51 318
# >> div.character, div.dialog 99 104
# >> #speech5 1 3
# >> div#speech5 1 165
# >> div #speech5 1 26
# >> div.scene div.dialog 49 101
# >> div#scene1 div.dialog div 142 240
# >> #scene1 #speech1 1 3
# >> div[@class] 103 40
# >> div[@class='dialog'] 45 50
# >> div[@class^='dia'] 51 47
# >> div[@class$='log'] 45 57
# >> div[@class*='sce'] 1 201
# >> div[@class|='dialog'] 45 62
# >> div[@class!='madeup'] 243 46
# >> div[@class~='dialog'] 51 51

Saturday, July 14, 2007

test and exec of Javascript Regular Expression


<script type="text/javascript" charset="utf-8">
var p = new RegExp("http", "i");
document.write(p.test("Http://www.google.com"));

var customer = "Alan Turing 555-1212";
var pattern = /(\w+) \w+ ([\d-]{8})/;
document.write("<br/>" + pattern.test(customer));
if (pattern.test(customer))
{
document.write("<br/>Groups Results:");
document.write(RegExp.$1 + " " + RegExp.$2);
}

var cat = new RegExp("cat", "im");
var inputStr = "where is the white cat and the blank cat?";
var rs = cat.exec(inputStr);
document.write("<br/><br/>rs.length = " + rs.length);
document.write("<br/>rs.index = " + rs.index);
document.write("<br/>cat.global = " + cat.global);
document.write("<br/>cat.multiline = " + cat.multiline);
document.write("<br/>cat.ignoreCase = " + cat.ignoreCase);
document.write("<br/>cat.source = " + cat.source);
document.write("<br/>cat.lastIndex = " + cat.lastIndex);
document.write("<br/>rs.input = " + rs.input);
document.write("<br/>");
document.write("<br/>RegExp['$_'] = " + RegExp['$_']);
document.write("<br/>RegExp['$&] = " + RegExp['$&']);
document.write("<br/>rs = " + rs);

var lucky = "The lucky numbers are 3, 14, and 27";
var pattern = /\d+/;
document.writeln("<br/>" + "Without global we get:");
document.writeln("<br/>" + pattern.exec(lucky));
document.writeln("<br/>" + pattern.exec(lucky));
document.writeln("<br/>" + pattern.exec(lucky));
pattern = /\d+/g;
document.writeln("<br/>" + "With global we get:");
document.writeln("<br/>" + pattern.exec(lucky));
document.writeln("<br/>" + pattern.exec(lucky));
document.writeln("<br/>" + pattern.exec(lucky));
</script>

Thursday, June 28, 2007

Ruby Catch Throw Test


catch :label do
(1..10).each do |i|
(11..13).each do |j|
puts 'i=' + i.to_s + ', j=' + j.to_s
throw :label if i == 3 and j == 12
end
end
end

puts 'over'

Saturday, April 21, 2007

网站压力测试工具集

工具 相关网址
LoadRunner http://www.mercuryinteractive.com/products/loadrunner/
SilkPerformer http://www.segue.com/
QALoad http://www.compuware.com/products/qacenter/qaload.htm
WebLoad
OpenSTA 开源
Jmeter 开源

自动测试工具集
WinRunner http://www.mercuryinteractive.com/products/winrunner/
SilkTest http://www.segue.com
QARun http://www.compuware.com/products/qacenter/qarun.htm
SAFS http://safsdev.sourceforge.net/Default.htm

Bug追踪系统
JIRA http://www.atlassian.com/software/jira/
Bugzilla http://www.bugzilla.org
TestDirector http://www.mercuryinteractive.com/products/testdirector/
GNATS http://www.gnu.org/software/gnats/
TestTrackPro http://www.seapine.com/ttpro.html

软件测试网站
http://www.51cmm.com
http://www.sqe.com
http://www.qadirect.com
http://www.bonoy.com
http://www.sztest.net
http://www.testage.net
http://www.sqatester.com
http://www.testingfaqs.org

软件测试工具集锦见正文
ALLPAIRS http://satisfice.com/
Caliber-RBT http://www.tbi.com
Caliber-RM http://www.tbi.com
DARTT http://home.t-online.de/home/bsse.info/
Datatect http://www.datatect.com
DGL http://www.csee.usf.edu/~maurer/
McCabe Test http://www.mccabe.com
McCabe TestCompress http://www.mccabe.com
Multi http://www.testing.com/
Panorama C/C++ http://www.softwareautomation.com
Reactis Tester http://www.reactive-systems.com
TDGEN http://www.soft.com/Products/index.html
T-VEC Test Generation System http://www.t-vec.com

GUI测试驱动器
Android http://www.smith-house.org/open.html
Atesto Functional Testing Service http://www.atesto.com/
AutoTester for Windows http://www.autotester.com
AutoTester for OS/2 http://www.autotester.com
CAPBAK http://www.soft.com/Products/index.html
Certify http://www.worksoft.com/
CitraTest http://www.tevron.com
e-Monitor http://www.empirix.com/
e-Tester http://www.empirix.com/
eValid http://www.e-valid.com/
imbus GUI Test Case Library http://www.imbus.de
QARunTM http://www.compuware.com/qacenter
Panorama-2 http://www.softwareautomation.com
QC/Replay http://www.centerline.com
QES/EZ for GUI http://www.qestest.com
Monitor Master http://www.argogroup.com
SilkTest http://www.segue.com
Smalltalk Test Mentor http://www.silvermark.com
Test Now http://www.stlabs.com/
TestQuest Pro Test Automation System http://www.testquest.com
TestRunner http://www.qronus.com/
WinRunner Mercury Interactive http://www.merc-int.com
xrc - X Remote Control http://www.absol.com/
Xrunner http://www.merc-int.com

负荷和性能工具 ANTS - Advanced .NET Testing System http://www.red-gate.com/
Atesto Automated Load Test http://www.atesto.com/
AutoController http://www.autotester.com
AutoController with Virtual DirectTest http://www.autotester.com
Benchmark FactoryTM http://www.quest.com
Capacity Calibration http://www.capcal.com
Chariot? http://www.ganymedesoftware.com
CYRANO ServerPack http://www.cyrano.com
e-Load http://www.empirix.com/
FORECAST http://www.facilita.co.uk
ITF - Internetworking Test Facility http://www.acomtech.com
Load http://www.pushtotest.com
Load Runner Product Family http://www.merc-int.com
Microsoft Web Application Stress Tool (WAS) http://webtool.rte.microsoft.com/
NetPressure http://www.syntheticnets.com
PegasusTM http://www.ganymedesoftware.com
Portent http://www.loadtesting.com
preVue-ASCII http://www.rational.com/products/prevue/
preVue-X http://www.rational.com/products/prevue/
PureLoad http://www.minq.se
QALoadTM http://www.compuware.com
Rational Suite PerformanceStudio http://www.rational.com/products/pstudio/
Rational SiteLoad http://www.rational.com/products/siteload/
RemoteCog Product Family http://www.fiveninesolutions.com
Scapa StressTest for Citrix MetaFrame http://www.scapatech.com
SilkPerformer http://www.segue.com/
Teleprocessing Network Simulator http://www.networking.ibm.com/tns/tnsprod.htm
WebLoad 3.0 http://www.radview.com
Web Roller http://webapplicationstesting.com
Webserver Stress Tool http://www.paessler.com
WebSpray http://www.redhillnetworks.com

非GUI测试驱动器
AdaTEST http://www.qcsltd.com
ANVL http://www.midnight.com/
AutoAdviser http://www.autotester.com
AutoTester Client/Server for use with SAP R/3 http://www.autotester.com
Cantata http://www.qcsltd.com
CONVEX Integrated Test Environment (CITE) http://www.cirr.com/
CTA++ http://www.testwell.fi
CTB http://www.testwell.fi
ITF - Internetworking Test Facility http://www.acomtech.com/
OTF - An Object Testing Framework http://www.mcgsoft.com/
QADirector? http://www.compuware.com/qacenter
QCIT http://www.qistest.com
QES/Architect http://www.qestest.com
QES/EZ http://www.qestest.com
QMTest http://www.codesourcery.com/
SilkPilot http://www.segue.com
SMARTS http://www.soft.com/Products/index.html
SDTF - SNA Development Test Facility http://www.acomtech.com
TALC2000 http://www.talc2000.com
TBGEN http://www.testwell.fi
TEO http://www.gako.fr
Test Manager http://www.launchsoftware.com
Test Mentor - Java Edition http://www.javatesting.com
Test Library Manager http://www.autotester.com
Test Station http://www.autotester.com
TestWorks http://www.soft.com/Products/index.html
VectorCAST http://www.vectors.com
VersaTest http://www.softsell.com

测试实现工具
Access for DB2 http://www.princetonsoftech.com/
Aprobe http://www.ocsystems.com
Aqtest http://www.automatedqa.com/
BoundsChecker compuware http://www.numega.com/
C++Test http://www.parasoft.com
DateWise FileCompare http://www.datewise.com/mt
dmalloc http://www.dmalloc.com/
EXDIFF http://www.soft.com/Products/index.html
fakesmtpd http://www.jera.com/
FREstimate http://www.softrel.com/
HeapAgent http://www.microquill.com
InCtrl5 http://www.zdnet.com/downloads/stories/info/0,77424,.html
JSUnit http://www.edwardh.com/jsunit/
Junit http://www.junit.org/
MDBDiff http://jupiter.drw.net
Move for DB2 http://www.princetonsoftech.com/
mpatrol http://www.cbmamiga.demon.co.uk/mpatrol/
ObjectTester http://www.obsoft.com
Inuse http://www.parasoft.com
Rational Purify http://www.rational.com/products/purify_unix/index.jtmpl

Rational Test RealTime http://www.rational.com
SilkRealizer http://www.segue.com
WhenToStop http://www.softrel.com/
ZeroFault http://www.tkg.com

测试评估工具
AdaTEST95 http://www.qcsltd.com
Aonix Validator/Req http://www.aonix.com/
C-Cover http://www.bullseye.com
Cantata++ http://www.qcsltd.com
CodeTEST http://www.amc.com
CTC++ http://www.testwell.fi
Glass JAR Toolkit http://glassjartoolkit.com/gjtk.html
Hindsight/TCA http://www.integrisoft.com
Hindsight/TPA http://www.integrisoft.com
Insure++ http://www.parasoft.com
Java Test Coverage http://www.semdesigns.com/Products/TestCoverage/index.html
LDRA Testbed http://www.ldra.com
LOGISCOPE toolset http://www.telelogic.com/
ObjectCoverage http://www.obsoft.com
Panorama C/C++ "http://www.softwareautomation.com
Rational PureCoverage http://www.rational.com/products/purecoverage/index.jtmpl
TCMON http://www.testwell.fi
TCA http://www.parasoft.com
TCAT C/C++ http://www.soft.com/Products/index.html
TCAT for Java http://www.soft.com/Products/index.html
TCAT-PATH http://www.soft.com/Products/index.html
T-SCOPE http://www.soft.com/Products/index.html
TestWorks/Coverage http://www.soft.com/Products/index.html

静态分析工具
AccVerify SE for FrontPage http://www.hisoftware.com/msacc/
Aivosto Project Analyzer http://www.aivosto.com/vb.html
ASSENT http://www.tcs.com
ccount http://www.cs.umd.edu/users/cml/resources/cmetrics/
Cleanscape lint-Plus http://www.cleanscape.net/stdprod/lplus/index.html
ClearMaker http://www.balthazar.hu
CMT++ http://www.testwell.fi
CodeCompanion http://www.jenssoft.com
CodeSurfer http://www.grammatech.com
Dependency Walker http://www.dependencywalker.com/
floppy/fflow http://netlib2.cs.utk.edu/floppy/
ftnchek http://www.dsm.fordham.edu/~ftnchek
Hindsight/SQA http://www.integrisoft.com
Krakatau http://www.powersoftware.com/
McCabe QA http://www.mccabe.com
METRIC http://www.soft.com/Products/index.html
ObjectDetail http://www.obsoft.com
CodeWizard http://www.parasoft.com
Jtest http://www.parasoft.com
PC-lint/FlexeLint http://www.gimpel.com/
PC-Metric http://www.molalla.net/~setlabs
PolySpace Verifier http://www.polyspace.com
Plum Hall SQS http://www.plumhall.com
QA C http://www.prqa.co.uk
QA C++ http://www.prqa.co.uk
QA Fortran http://www.prqa.co.uk
QStudio Java http://www.qa-systems.com
Safer C Toolset http://www.oakcomp.co.uk/SoftwareProducts.html
SofAudit http://www.soring.hu/index.html
STATIC http://www.soft.com/Products/index.html
TestBed http://www.easternsystems.com
TestWorks/Advisor http://www.soft.com/Products/index.html

缺陷跟踪工具
1CR http://www.plus-one.com/+1CR_fact_sheet.html
Aardvark http://www.red-gate.com/
AdminiTrack http://www.adminitrack.com
Alcea Fast BugTrack http://www.alceatech.com/
AllChange 2000 http://www.intasoft.co.uk/intasoft/
BugAware http://www.bugaware.com
Bugbase 2000 http://www.threerock.com
Bugcentral.com http://www.bugcentral.com/
BugCollector Pro http://www.nesbitt.com/
Bug/Defect Tracking Expert http://www.bug-defect-tracking-expert.com/
Buggit http://www.pb-sys.com/
Buggy http://www.novosys.de/Buggy/Buggy.html
Bugzero http://www.websina.com/bugzero/
Bugzilla http://www.mozilla.org/projects/bugzilla/
Census http://www.metaquest.com/
ClearQuest http://www.rational.com/products/clearquest/
CustomerFirst http://www.custfirst.com/products.html
Debian Bug Tracking System http://www.chiark.greenend.org.uk/~ian/debbugs/
Defect Tracker (New Fire) http://www.newfire.com/
Defect Tracker (Pragmatic) http://www.Pragmaticsw.com/Pragmatic/DefectTracker.asp
Defect Tracking System (DTS) http://www.open.com.au/dts/
defectX http://www.defectx.com/
DevTrack http://www.techexcel.com/
d-Tracker http://www.empirix.com/
elementool http://elementool.com/
ExtraView http://www.extraview.com/extraview_home.html
FogBUGZ http://www.fogcreek.com/FogBUGZ/
JitterBug http://samba.anu.edu.au/cgi-bin/jitterbug
Keystone Problem Tracking System http://www.stonekeep.com/
NeumaPT http://www.neuma.com/
SWBTracker http://www.softwarewithbrains.com/swbtrack.htm
Squish http://www.squishlist.com
T-Plan Incident Manager http://www.t-plan.co.uk
TeamTrack http://www.teamshare.com
TeamTrack Workgroup http://www.teamshare.com
Team Tracker http://www.hstech.com.au/TeamTracker/
TestTrack http://www.seapine.com
TrackWeb Defects http://www.soffront.com/
Trackgear http://www.logigear.com/
TrackRecord http://www.numega.com/devcenter/tr.shtml
Trackwise http://www.sparta-systems.com/