﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-牵着老婆满街逛-随笔分类-软件工程</title><link>http://www.cppblog.com/tx7do/category/2131.html</link><description>危机感是一种强大前进的动力！&lt;/br&gt;
GMail/GTalk: yanglinbo#google.com;&lt;/br&gt;
MSN/Email: tx7do#yahoo.com.cn;&lt;/br&gt;
QQ: 3 0 3 3 9 6 9 2 0 .</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 14:21:03 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 14:21:03 GMT</pubDate><ttl>60</ttl><item><title>用例驱动的需求过程实践</title><link>http://www.cppblog.com/tx7do/archive/2006/08/23/11619.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 23 Aug 2006 11:04:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/23/11619.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11619.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/23/11619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11619.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11619.html</trackback:ping><description><![CDATA[一、需求矛盾<br />　　根据CHAO的权威统计，虽然自"软件危机"提出以来，软件工程方法得到了长足的发展与进步，但在去年的软件项目成功率仍然不足30％，绝大多数的软件项目仍然超进度、超成本。而在这些不成功的项目中，由于需求不清晰、需求不完整等方面的因素，占到了60％左右。<br />　　下面的这幅漫画虽然不乏夸张，但却是能够激起我们的深思：<br /><img height="401" src="http://www.51cmm.com/Requirement/images/No038-1.gif" width="500" /><br />　　根据笔者多年来从事软件需求捕获、分析工作的实践经验，认为造成这一现象的根本原因在于客户与开发人员之间的沟通存在障碍，双方都以自己的角度、自己的专业术语进行沟通，这使得大家并不能够很好地就软件需求达成共识。<br />　　由于帮助客户更好地利用信息化工具提高工作效率，是我们软件开发团队的责任，因此我们没有权利让用户理解我们所用的语言，而是反过来，我们有义务去理解用户的语言，站在用户的角度看问题。<br />　　而事实上，许多开发团队经常抱怨"我们的客户连需求都说不清楚"、"我们的客户对计算机了解太少了"。多年以来，大家都习惯从自己的角度来定义、分析问题，这也就造成了软件行业成为了一个最缺乏信任的行业，我们需要改一下习惯了。<br />二、现代需求实践<br />　　针对这些现象，许多先贤们开始了实践，并且总结出了一系列优秀的需求实践：<br />1）Use case：用例分析技术<br />　　鼎鼎大名的RUP是这样总结自己的：用例驱动，以体系结构为中心，迭代、增量的开发过程。Use case也伴随着RUP、UML一起名扬天下。<br />　　用例用来描绘一个系统外在可见的需求情况，是代表系统中各个项目相关人员（风险承担人，Stakeholder）之间就系统的行为所达成的契约。<br />2）User Story：用户故事、用户素材<br />　　用户故事是Kent Beck在极限编程（XP）方法论中推荐的最佳实践之一。它由客户参与编写，说明他们需要系统为他们做什么，一般用客户的术语写就，三句话左右。<br />3）Feature：特征<br />　　这是特征驱动开发（FDD）方法论的核心实践之一。一个特征就是一个小的，具有客户价值的功能，通常表示为&lt;action&gt;&lt;result&gt;&lt;object&gt;。<br />　　从上面的定义来看，这三种现代软件工程需求实践无一例外地遵从两个原则：一是站在用户的角度看待系统、定义系统；二是用用户看得懂的语言表达。而在笔者的实践中，鉴于以下两点考虑还是先在团队中应用了"用例分析技术"：<br />1）用户故事略显粗糙，掌握起来需要经验，没有详细的规则用于按部就班，一开始采用容易迷失方向；而用例相对来说更加形式化，易于上手；<br />2）特征看上去很有吸引力，但毕竟相关的理论还未完整，引入团队实践有些困难。<br />三、用例分析技术简介<br />　　用例分析技术是Rational三友之一Ivar Jacobson先生于1967年在爱立信公司开发AXE交换机时开始研究，并于1986年总结、发布的一项源于实践的需求分析技术。Ivar先生在加盟Rational之后，与三友合作提出了UML、完善了RUP，用例分析技术也因此被人广泛了解和关注。<br />　　用例分析技术为软件需求规格化提供了一个基本的元素，而且该元素是可验证、可度量的。用例可以作为项目计划、进度控制、测试等环节的基础。而且用例还可以使开发团队与客户之间的交流更加顺畅。<br />　　许多人是在学习UML的时候接触到Use case，所以许多人都误解其为一种图表，把用例图当作用例分析的全部，其实这是错误的，用例描述才是用例分析技术的核心。下面是一个简单的例子：<br /><img height="391" src="http://www.51cmm.com/Requirement/images/No038-2.gif" width="480" /><br />3.1 参与者，Actor<br />　　参与者，定义了用户在系统交互过程中扮演的角色，其可以是一个人，也可以是另一个相关的系统。<br />3.2 用例，Use case<br />　　用例实例（场景）是在系统中执行的一系列动作，这些动作将生成特定参与者可见的价值结果，一个用例定义一组用例实例（场景）。<br />　　一个用例应为参与者提供（实现）一个价值。<br /><img height="445" src="http://www.51cmm.com/Requirement/images/No038-3.gif" width="480" /><br />3.3 事件流 <br />　　就像类对应于对象一样，一个用例的实例就是使用场景，用例就是对使用场景进行抽象的总结：<br />　　1）前置条件：指在用例启动时，参与者（Actor）与系统应置于什么状态，这个状态应该是系统能够检测到的、可观测的；<br />　　2）后置条件：用例结束时，系统应置于什么状态，这个状态也应该是系统能够检测得到的、可观测的；<br />　　3）基本事件流：基本事件流是对用例中常规、预期路径的描述，也被称为Happy day场景，这时大部分时间所遇到的场景；它将体现系统的核心价值；<br />　　4）扩展事件流：主要是对一些异常情况、选择分支进行描述。<br />　　建议大家在编写事件流时，注意以下几点：<br />　　1）使用简单的语法：主语明确，语义易于理解；<br />　　2）明确写出"谁控制球"：也就是在事件流描述中，让读者直观地了解是参与者在控制还是系统在控制；<br />　　3）从俯视的角度来编写：指出参与者的动作，以及系统的响应，也就是第三者的角度；<br />　　4）显示过程向前推移：也就是第一步都有前进的感（例如，用户按下tab键做为一个事件就是不合适的）；<br />　　5）显示参与者的意图而非动作（光有动作，让人不容易直接从事件流中理解用例）；<br />　　6）包括"合理的活动集"（带数据的请求、系统确认、更改内部、返回结果）；<br />　　7）用"确认"而非"检查是否"：（如系统确认用户密码正确，而非系统检查用户密码是否正确）；<br />　　8）可选择地提及时间限制；<br />　　9）采用"用户让系统A与系统B交互"的习惯用语；<br />　　10）采用"循环执行步骤x到y，直到条件满足"的习惯用语。<br />四、Alistair Cockburn眼中的用例分析技术<br />　　在使用用例分析技术时，很多人都觉得如何确定用例的粒度是一个难点，而且感觉到用例没有什么规则遵从，甚至有无所适从的感觉。正如Cockburn先生提出的学习用例分析技术的"守、破、离"的三个阶段：<br />　　1）守：练习基本功夫，遵循规则，照章行事；<br />　　2）破：能突破传统，因地制宜地灵活应用； 3）离：超脱任何招式与规则，达到无招胜有招的境界。<br />　　但用例分析技术却让第一阶段的初学者感到无法很快地掌握。而其所著"编写有效用例"则想为用例分析技术补充规则，让大家能够更好地掌握。<br />　　Cockburn先生在Ivar Jacobson的基础上，做了一些补充：<br />　　1）用例是契约，是系统与涉众之间达成的契约。也就是将用例朝着形式化的方向发展；<br />　　2） 将用例分成三级：<br />　　◆ 概要级：包括多个用户目标（显示用户目标运行的语境，显示相关目标的生命周期、为低层用例提供一个目录表）；<br />　　◆ 用户目标级<br />　　◆ 子功能级<br />　　不过，对于Cockburn先生的贡献，用例始祖Ivar大师并未做出任何反应。本人在实践中认为，Cockburn先生的思路与理念对于初学用例分析技术的人来说，十分有价值，使得用例分析技术更具操作性，当其同时也有点画地为牢的感觉，也许Cockburn先生也意识到这点，因此第三阶段就是"离"，没有规则，按需灵活使用。<br />五、如何在开发过程中应用用例分析技术 <br />　　用例分析技术在需求过程中的地位如下图所示：<br /><img height="310" src="http://www.51cmm.com/Requirement/images/No038-4.gif" width="480" /><br />　　对于用例分析技术理解上的两个最大的误区是：<br />　　1）用例分析技术包括了整个需求过程：它只是一个需求分析技术，是在传统的需求捕获技术的基础上使用的，并无法替代这些技术；<br />　　2）用例分析技术是分解技术：其实用例分析技术是一种合成技术，将在需求捕获中收集而来的零散的特性合成为用例：<br /><img height="267" src="http://www.51cmm.com/Requirement/images/No038-5.gif" width="450" /><br />5.1 用例分析前的工作<br />　　在用例分析之前，应该完成以下工作：<br />　　1）确定涉众（Stakeholder）和用户类型（命名、简要描述、涉众代表、特征、能力）；<br />　　2）确定涉众代表（命名、简要描述、责任、参与）；<br />　　3）在项目中加入涉众代表（访谈、问卷、顾问、评审、角色扮演）；<br />　　4）创建共同的构想（问题定义、系统范围、用户目标、非功能需求à前景文档）；<br />　　5）采用传统的需求捕获技术捕获需求；<br />　　6）组建用例分析队伍（少量、有问题域知识）。<br />5.2 用例分析过程中的注意事项<br />　　用例分析的过程如下图所示：<br /><img height="260" src="http://www.51cmm.com/Requirement/images/No038-6.gif" width="480" /><br />　　在使用中要注意：<br />　　1）用例源于涉众，请不要自己杜撰出用例；<br />　　2）用例的事件流的编写过程中，应充分加入团队的参与；<br />　　3）虽然用例源于涉众，但不要企图向他们直接问"你还有什么用例?这样的问题 <img src ="http://www.cppblog.com/tx7do/aggbug/11619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-23 19:04 <a href="http://www.cppblog.com/tx7do/archive/2006/08/23/11619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>特性、用例、需求－－ Rational软件白皮书</title><link>http://www.cppblog.com/tx7do/archive/2006/08/23/11618.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 23 Aug 2006 11:03:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/23/11618.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11618.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/23/11618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11618.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11618.html</trackback:ping><description><![CDATA[引言<br />作为 BU（UML 出现之前）时代面向对象技术的追随者和支持者，我必须承认当时的业内思想领袖所传播的各种方法和表示法对我具有某种魔力。在 UML 出现之前的两到四年中，您可以走进一个挤满 OO 鼓吹者的房间，并提问以下问题： 
<p class="content">我认为这种 OO 技术很有前途，但是告诉我，既然对象共享行为和数据，那么您如何称呼对象为实现它的行为义务而做的事情呢？</p><p class="content">您可能得到如下答案：</p><ul xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><li class="content">"它是一个职责！"（Wirfs-Brock） 
</li><li class="content">"它是一项操作"（Booch） 
</li><li class="content">"它是一项服务"（Coad/Yourdon） 
</li><li class="content">"它是一个（虚）函数"（Stourstrup） 
</li><li class="content">"它是一个方法"（其他很多人） </li></ul><p class="content">如果这还不足以让您混淆的话，那么就不要问您如何用图形表示我们称之为对象和类的东西了。（它是一个矩形、一片云，等等。）虽然这看上去很愚蠢，但是实际情况是，我们<a href="http://tech.acnow.net/Html/Program/Soft_Project/" target="_blank">软件工程</a>领袖的其中一些最显著的共识（继承、关系、封装），由于在术语和表示法上的微小区别而无法得到共享，或者至少变得混乱。换言之，不管是 OO 工程科学还是将要获得的利益都不能继续向前发展，因为还没有发明用来描述该科学的语言。当然，要在这些作者、方法学家 和独立思想者中达成共识不是一件小事情，但是最终UML面世了，软件工程科学又向前迈进了一大步。</p><p class="content">虽然需求管理方法学可能不像 UML 出现之前的 OO 方法学所形成的巴比塔那样糟，但是它却经历了同样的一些问题--尤其是对常见词汇的模糊、不一致和过度使用非常盛行。这些词汇（包括诸如"用例"、"特性"和"需求"这样的基本概念）是"每个人都理解"的日常词汇，但是在给定的上下文中每个人又赋予了它们自己的含义。结果就是沟通不畅。这种情况仅在将达成共识作为成功标准的领域中发生。Booch [Booch 1994]引用了 Stepp 的说法：</p><p class="content">科学中普遍存在的一个问题是为观察到的对象和情形构造有意义的分类。这样的分类能推动人们对观察以及后续的科学理论开发的理解。</p><p class="content">为了推动需求的"科学理论"，我们不得不面对术语的问题。</p><p class="content">本文的目的在于，通过定义并描述用于说明系统软件需求的一些最常见术语和概念，来初步探讨一下软件工程的原理。为此，我们希望提供一个能让所有涉众（用户、经理、开发人员等）达成共识的基础。当然如果我们更有效地交流并因此获得一致看法，那么就可能更快地开发并交付更高质量的系统。</p><p class="content">本文重点不在于需求管理的原理--关于这方面笔者在建议读物中推荐了很多参考书目。本文的目的仅是帮助该领域中的从业者提高他们对系统正确行为的基本认识。</p><p class="content">问题域与解决方案域的对比<br />在开始描述具体的术语之前，我们首先要意识到需要从两个完全不同的方面定义术语：问题方面和解决方案方面。我们分别称之为问题域和解决方案域。</p><p class="content">问题域<br />如果我们在问题域上做一次"低空滑翔"，就会发现许多实际生活周围的事物。比如"滑翔"过人力资源部门时，会看到雇员、负责发工资的职员以及工资支票。"滑翔"过重型设备工厂时，我们会看到焊工、焊接控制器、焊接机器人和电极。"滑翔"过万维网时，我们会看到路由器和服务器群集，以及具有浏览器、电话机和调制解调器的用户。换句话说，在任何问题域中，我们可以轻易地识别出我们看到和接触到的事物（实体）。有时候，我们甚至可以看到这些事物之间的关系；比如，web 用户和浏览器之间就是一对一的关系。我们可能还会看到从一个事物传递到另一个事物的消息："焊接工似乎正在往焊接机器人的'大脑'中编制工作次序"。</p><p class="content">如果我们是敏锐的观察者，可能会发现亟待解决的问题："焊接工对不能安排正确的工作次序感到气馁"或者"注意到雇员输入薪水数据与收到支票之间有令人不愉快的时间延迟！"。有些问题似乎只是在乞求一种解决方案。也许我们可以构建一个系统（更好的可编程控制器、更有效的工资处理）以帮助那些可怜的用户解决这些问题。<br /><br /> </p><p></p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">基于用户和涉众需求</b></p><p class="content">然而在我们构建新系统之前，我们需要确保理解了该问题域内用户的真正需要。如果没有，我们可能会发现焊接工只能愁眉苦脸，因为他就好像脚上得了鸡眼一样痛苦，结果就是他和他的经理都不会对购买我们最新的"SmartBot"自动焊接控制单元感兴趣。我们还注意到当我们试图销售 SmartBot 时，经理是购买决策中的关键涉众。我们不记得在"滑翔"中看见过她。（也许她当时正在吸烟室，而那里正是我们摄像头的盲区）。换言之，不是所有的涉众都是用户，并且如果我们希望有机会卖出SmartBot，则我们必须同时理解两个社区（涉众和用户）的需要。为了简便起见，我们称所有这些需要为涉众需求，但是我们要不断地提醒自己系统的潜在用户有时代表了很重要的一种涉众类型。</p><p class="content">我们将涉众需要定义为：</p><p class="content">业务、个人或操作问题（或机会）的一种反映，其中这些问题必须得到解决，以使用户相信他们考虑、购买或使用新系统的选择是正确的。</p><p class="content">于是涉众需求就成为与问题域关联问题的一种表示。这些涉众需求并未给出解决方案，但是以一个最初的角度，使我们了解需要实现哪些可行的解决方案。比如，如果我们会见重型设备制造厂中管理焊接工的经理，就可能发现焊接大量重复性的焊接件会消耗巨大的制造时间和成本。另外，焊接工似乎不会喜欢这些具体工作，因为他们一直处在被烫伤的危险中。更糟的是，该工作的物理方面（重复、难以琢磨的手工操作位置以及对视力的危害等）带来了个人安全问题以及长远的健康隐患。</p><p class="content">充分理解了这些事项，我们就可以开始定义其中一些涉众需求：</p><ul xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><li class="content">我们需要一种自动化的方法来制造大量重复的焊接件，而不用让焊接工手动控制电极。 
</li><li class="content">我们很乐意能有一位焊接工，但是我们需要将其移到焊接件以外的安全区域并且远离那些移动的机器。 
</li><li class="content">我们需要能轻松使用"训练模式"，这样一般的焊接工也能够"训练"机器为他们做大部分工作。 
</li><li class="content">我们需要使训练模式中具有更大的灵活性，并且意识到这可能与用户友好性需要的某些方面产生冲突。 </li></ul><p class="content">当理解了系统的这些不同方面后，主观上我们会将这些发现"堆放"在一个称之为涉众需求的小堆中。</p><p class="content">解决方案域<br />幸运的是，对问题域的"滑翔"不会花很长时间，并且（通常）我们在问题域中发现的东西也不是很复杂。当我们完成"滑翔"并开始构建我们观察到的问题和需要的解决方案时，就开始理解问题。是的，我们已经开始了最难的一部分：构建问题的解决方案。我们考虑活动集（系统定义、设计等）、为了解决问题而发现和构建的"事物"（计算机、机械臂等），以及在解决方案域的处理部分中创建的工件（比如源代码、用例和测试）。</p><p class="content">在解决方案域中，我们必须成功地执行很多步骤和活动，这样才能定义、构建并最终部署问题的成功解决方案。它们包括：</p><p class="content">1） 理解用户需求</p><p class="content">2） 定义系统</p><p class="content">3） 管理范围并管理变更</p><p class="content">4） 精化系统定义</p><p class="content">5） 构建正确的系统</p><p class="content">简言之，上述步骤定义了需求管理的一个简化过程。本文不打算详细介绍这些步骤；关于这些内容我们会为您推荐一些参考读物，包括课本"Managing Software Requirements"，[Leffingwell, 1999]。本文与该参考书保持一致，这里提供的大部分定义都来自该参考书。</p><p class="content">比如，在参考书[Leffingwell, 1999]中，我们会发现需求管理是这样定义的：</p><p class="content">获取、组织和记录系统需求的系统化方法，在客户与项目团队之间建立并维护对系统需求变更的一致意见的过程。</p><p class="content">还是让我们继续寻找并定义用于描述待建系统所需的其他更多的需求管理术语吧。</p><p class="content">解决方案域中的常见需求术语<br />　 </p><p class="content">产品或系统的特性<br />当我们开始考虑已识别问题的解决方案时，很自然会匆匆记下系统的特性。特性在系统的开发中占有很有趣的地位。它们看上去介于用户真正需要的表达与系统实现这些需要的详细方式描述之间。这样，它们就为按照抽象的方式描述系统提供了一种方便的构造，或者如果您愿意的话，提供一种"速记方法"。由于需要解决的问题存在很多可能的解决方案，所以在某种意义上特性提供了特定系统解决方案的最初范围；它们描述了系统打算做什么以及不打算做什么。</p><p class="content">我们将特性定义为 <br xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />系统为实现一个或多个涉众需要而提供的服务。</p><p class="content"><img height="131" alt="" src="http://tech.acnow.net/Files/BPic/2006-6/4/image001.png" width="114" border="0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /></p><p class="content">我们可以很容易地使用用户熟悉的术语用自然语言来表示特性。例如：</p><ul xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><li class="content">系统使用的是标准的北美电源。 
</li><li class="content">树浏览器提供了组织缺陷信息的一种手段。 
</li><li class="content">家用照明控制系统具有与标准家用自动化系统的接口。 </li></ul><p class="content">由于特性是从涉众需求派生而来的，所以我们将它们安排在金字塔的下一层，即需要的下面。与此同时，我们还从问题域（需要）转移到了解决方案域的第一层（特性）。</p><p class="content">有一点很重要，需要注意，那就是特性不仅仅是涉众需求的精化（增加了细节）。相反，它们是用户提供的对问题的直接响应，并且它们为我们提供了问题的顶级解决方案。</p><p class="content">通常，我们应该能够通过定义 25 到 50 种刻画系统行为的特性来描述系统。如果您发现手头有超过 50 种的特性，那么可能是因为您没能抽象出系统的真正特性或者是系统过于庞大而难于理解，您需要考虑将其分为更小的部分。</p><p class="content">特性是用自然语言描述的，所以读到该清单的任何涉众都能立即获得对系统行为的基本理解。特性清单会缺乏细粒度的详细程度。这没关系。我们只是在试着交流目的，并且由于很多涉众都是非技术人员，所以过多的细节可能会让他们混淆甚至干扰理解。通过例子，我们 SmartBot 自动焊接机器人的部分特性清单可能包括：</p><ul xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><li class="content">允许焊接工教导机器人焊接哪些路径的"lead through path"训练模式 
</li><li class="content">支持重复焊接次序的"step-and-repeat"特性。 </li></ul><p class="content">用例<br />当我们进一步考虑系统完成用户任务的方法时，我们可能发现使用用例技术来进一步描述系统行为很有利益。该技术在很多书籍[Jacobson 1992]中已经得到了很好的发展，并且也是行业标准统一建模语言[Booch 1999]的一个组成技术。</p><p class="content">从技术上说，用例：</p><p class="content">描述了系统执行的、为用户带来价值的一系列动作。</p><p class="content">换言之，用例描述了有助于用户实现他们期望的一系列用户和系统交互。再换一种说法，用例描述了用户和系统如何共同合作以实现所识别的特性。</p><p class="content">用例还引进了参与者这项构造。参与者只是当时使用系统的用户的一个标签。在 UML 中，用一个简单的椭圆来表示用例，而参与者则用一个带有名称的线条画表示。所以可以如下所示用一个简单的图来说明这两者。</p><p class="content"><img height="57" alt="" src="http://tech.acnow.net/Files/BPic/2006-6/4/0652922341864667.png" width="243" /></p><p class="content">用例技术规定了参与者如何实现用例的一个简单的逐步过程。比如，用于 Step and Repeat 的用例可能如下所示：</p><p class="content">步骤1：焊接工按下 step and repeat 按钮，启动该序列。</p><p class="content">步骤2：焊接系统为驱动电动机供给电源，以便可以人工控制机器臂移动。</p><p class="content">步骤3：焊接工握着扳机，将机器臂移动到焊接部位，并按下"weld here"按钮，焊接每一条需要焊接的线路。</p><p class="content">用例技术提供了很多其他有用的构造，比如预描述和后描述（pre and post description）、可选流（alternate flow）等。我们将在后面详细讨论用例时再讨论它们。但是现在，我们只需要知道用例提供了一个优秀的方法用来描述如何实现系统特性。</p><p class="content">出于计划的目的，可能需要除用例之外的一些方法来描述如何实现特定的特性。对于每个特性可能只需要几个用例即可（也许 3 到 10 个）。在描述用例过程中，我们详细阐述了系统的行为。随着其他特征的获得，用例也变得更加详细。</p><p class="content">远景文档<br />在很多开发尝试中，问题的声明、关键涉众、用户需求、系统特性清单，也许还有示例用例都可以在一个被称为远景文档的文档中找到。它还有其他很多名称，比如项目章程（Project Charter）、产品需求文档（Product Requirements Document）、市场需求文档（Marketing Requirements Document）等。不管名称如何，远景文档强调了正在构建系统的总体意图和目的，因此，是那些被标明日期的特性和说明性用例的自然容器。换言之，远景文档捕获了系统的完全形态，并使用涉众需求、特性和用例来交流意图。</p><p class="content">然而，我们不能简单地把这些特性和初始用例转交到开发团队手中，并期望他们很快开发出真正满足涉众需要的系统。我们可能需要在系统功能方面更加明确，并且可能涉及了各种新的涉众，包括开发人员、测试人员等。这是系统定义的下一层（软件需求）要解决的需要。</p><p class="content">软件需求<br />软件需求在软件定义过程中提供了下一层特异性。在这一层上，我们必须指定足够的需求和用例，以便开发人员可以编写代码，并且测试人员可以测试这些代码是否满足需求。从图形上说，软件需求提供了我们金字塔的塔基。</p><p class="content">什么是软件需求？尽管在过去的多年中已经有过很多种定义，但是我们发现需求工程创始人 Dorfman 和 Thayer[Dorfmann 1990]提供的定义最合适：</p><ul xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><li class="content">用户解决将实现一个目标的问题所需的软件功能，或者 
</li><li class="content">必须被一个系统或者系统组件满足或拥有，以满足合同、标准、规范或其他正式发布文档的软件功能。 </li></ul><p class="content">应用该定义，开发团队能够开发出更具体的需求集，以完善或精化前面讨论过的特性清单。每个需求都是某种特性，反之亦然。注意这种方法的简单性。我们有一个特性清单，然后通过编写一个为这些特性服务的需求集来精化它们。我们不编写任何其他需求。这避免了只是坐在椅子上、瞪着天花板，并"为该系统捏造一些需求"的诱惑。</p><p class="content">该过程简单明了，但是并不容易。每个特性都需要检查，然后编写需求以支持该特性。不可避免地，为某项特性编写需求会引发您为已经检查过的特性添加新的需求，或者对其进行修订。</p><p class="content">当然，您知道编写需求并不容易，并且可能需要指定大量需求。我们发现考虑三种类型或者种类的软件需求（功能性需求、非功能性需求和设计约束）很有帮助。</p><p class="content"><img height="244" alt="" src="http://tech.acnow.net/Files/BPic/2006-6/4/image005.png" width="232" border="0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /></p><p class="content">我们发现这三种需求在我们考虑需求的方式以及我们期望需求实现的任务方面很有帮助。让我们看一下这些不同类型的需求，以及您可以如何使用它们来定义期望系统的各个方面。</p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">功能性需求</b></p><p class="content">功能需求表达了系统行为。更具体地说，功能需求描述了输入和输出分别是什么、以及特定输入如何在不同时刻被转化成特定的输出。能有效工作的大部分软件应用程序都具有丰富的功能性需求。在指定这些需求时，要权衡模糊性（"当您按下 On 钮之后，系统就会打开"）与具体性这二者的关系，这一点很重要。给予设计人员和实现人员以尽可能多的设计和实现选择也很重要。如果我们过于具体，那么就可能过于限制开发团队，如果过于宽松，则开发团队就不知道系统应该实现哪些功能。</p><p class="content">指定需求的正确方法不只一种。其中一种技术只简单采用了声明性的方法，并写下系统需要做的每一件详细的事件。</p><p class="content">比如：在"weld here"输入被激活时，系统通过每 100 毫秒读取一次光编码器来数字化电极端的位置。</p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">细化用例</b></p><p class="content">在很多系统中，通过精化以前定义的用例并开发其他用例，则易于组织规范活动来全面细化系统。利用这项技术，您可以将用例步骤精化成更详细的系统交互。您还需要定义前置条件和后置条件（在用例之前和之后陈述系统假设），以及由于异常条件而需要的备用动作等。</p><p class="content">由于用例在语义上是良好结构的，因此它们提供了一种组织和捕获系统行为的结构。下面是 Smartbot 的代表性用例。</p><p class="content"><img height="370" alt="" src="http://tech.acnow.net/Files/BPic/2006-6/4/table1.jpg" width="576" border="0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" /></p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">非功能性需求</b></p><p class="content">除了像输入转换为输出这样的功能性需求，大多数系统还需要定义一组着重指定其他系统"属性"的非功能性需求，比如性能需求、吞吐量、可用性、可靠性和可支持性。这些需求和面向输入输出的功能需求同样重要。通常，非功能性需求的表达方式是声明性的，如： "系统的平均故障间隔时间应该为 2000 小时"，"系统的平均修复时间应为 0.5 小时"，以及"Smartbot 最多应该能够存储和检索 100 条焊接路径"。</p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">设计约束</b></p><p class="content">与定义系统行为不同，第三类需求通常对系统设计或者我们用来构建系统的过程施加了限制。我们将设计约束定义为：</p><p class="content">系统设计上的限制，或者系统开发步骤上的限制，它不影响系统的外部行为，但是必须被实现，以满足技术、业务或合同要求。</p><p class="content">典型的设计约束可能是这样表达的："用 <a href="http://tech.acnow.net/Html/Program/Java/" target="_blank">Java</a> 为焊接工控制单元编程"。一般来说，我们将合理的设计约束看作其他需求，尽管符合这些限制的测试可能需要不同的技术。正如功能性和非功能性需求一样，这些约束在系统的设计和测试中扮演了不可或缺的角色。</p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">分层结构需求</b></p><p class="content">很多项目通过利用分层或父子结构表达这些需求而受益。父子结构需求是利用父需求表达的特异性的一种扩大。父子需求为您提供了一种增强和扩大规范的灵活的方法，同时还可以组织提供的详细程度。只看父需求，很容易按照易被用户理解的方法提供顶级规范。同时，实施人员可以快速检查详尽的"子需求"规范，以保证他们能够理解所有的实施细节。</p><p class="content">注意，分层结构需求由三种标准类型的需求组成--功能性、非功能性和设计约束。这里只定义了这些需求间的细化关系。</p><p class="content">可跟踪性<br />除了为描述我们用来说明系统需求的事物而定义的术语之外，我们现在将注意力转移到关键关系，即可跟踪性，也就是在这些事项之间可能存在的关系。</p><p class="content">开发出高质量软件的一个重要因素就是在规范、构架、设计、实现和测试阶段理解或跟踪需求的能力。历史数据表明变更的影响通常被遗漏，系统的小小变更可能带来显著的可靠性问题。因此，跟踪关系并在发生变更时关联这些关系的能力，形成了很多现代软件质量保证过程的关键线程，尤其是在任务关键活动比如安全关键系统（医疗和运输产品），和故障的经济成本很高的系统（在线交易）中，形成了一个关键线程。</p><p class="content">下面看一下我们如何定义需求可跟踪性：</p><p class="content">可跟踪性关系是一种依赖关系，其中实体（故障、用例和需求）"traced to"在某种程度上依赖于它"traced from"的实体。</p><p class="content">比如，我们已经描述了如何创建一个或更多软件需求，以支持远景文档中给定的特性或用例。因此，我们可以说这些软件需求与一个或更多特性具有可跟踪性关系。</p><p class="content"><b xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">影响分析和怀疑</b></p><p class="content">另外，可跟踪性关系超出了简单依赖关系的范围，因为它提供了利用我们称之为"怀疑"的概念进行影响分析的能力。当变更出现在"traced from"（独立）需求中时，可跟踪性关系就开始"怀疑"，因此必须对"traced to "（依赖需求）进行检查，以保证它与源需求保持一致。</p><p class="content">比如，如果我们使用可跟踪性将需求与特定测试关联，并且如果诸如"Smartbot 应该能够存储和检索最多 100 条焊接路径"这样的需求变为"Smartbot 应该能够存储和检索最多 200 条焊接路径"，那么从该需求跟踪而来的测试就值得怀疑，因为为测试第一个需求而设计的测试不太可能适合测试第二个需求。</p><p class="content">变更请求和变更管理系统<br />最后，变更是不可避免的。对于有希望成功的项目，管理变更的过程是必不可少的。不管它们的来源是什么以及来源如何众多，所有变更包括影响特性和需求的请求需要有序地被引进和管理。任何变更管理系统的关键元素都是变更请求本身。</p><p class="content">我们将变更请求定义为：</p><p class="content">对系统的特性和/或需求作出修订或添加的正式请求。变更请求需要作为提议变更的结构化和形式化的陈述，以及围绕该变更的任何细节进入系统。为了管理这些变更，每个变更都要在系统中有自己的身份，这很重要。变更请求的简化形式可能为：</p><p class="content"><img height="141" alt="" src="http://tech.acnow.net/Files/BPic/2006-6/4/0652922341838673.jpg" width="531" /></p><p class="content">在大部分项目中，您会发现不缺少变更！实际上，您的问题是按照有序的方式管理、集成和（根据需要）拒绝不必要的变更。换言之，您需要一个管理变更过程。您的变更管理系统应该用于捕获所有输入，并将它们提交给变更控制委员会（CCB）来解决。CCB 由不超过 3 到 5 个代表项目关键涉众（客户、市场和项目管理）的人员组成，它管理和控制系统变更，因而在帮助项目成功方面扮演了关键角色。</p><p class="content">结束语<br />刚一开始，我们就指出本文的目的在于帮助该领域的从业者提高他们回答下列基本问题的能力：<br xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />"系统究竟应该实施哪些行为？"</p><p class="content">作为实现这一目标的第一步，我们定义和描述了分析人员以及负责描述问题域中问题的其他人员所使用的，用于表达将施加在预期解决方案上的需求的一些常见术语（比如涉众需要、特性、用例、软件需求等）。在这个过程中，我们还阐述了有效需求管理的一些关键概念。通过使用本文提供的术语和方法，您能够更有效地理解用户需要，并与开发人员、测试人员以及负责构建满足客户和用户需要的系统的其他技术团队成员交流提议解决方案的需求。</p><p class="content">进一步定义和交流软件解决方案的其他更多关键方面的一项重要技术就是标准建模语言。统一建模语言（UML）是一种用于可视化、指定和文档化软件密集系统的工件的语言，并且提供了按照语义上更精确的方式表达这些技术构造的手段。本文的姊妹篇，Modeling the Requirements Artifacts with UML（利用 UML 建模需求工件），建立了更有效执行需求管理任务所必需的 UML 构造和扩展。</p><p class="content">建议读物<br />[Leffingwell 1999] Leffingwell, Dean, and Don Widrig. Managing Software Requirements: A Unified Approach. Reading, MA: Addison Wesley Longman, 1999.</p><p class="content">[Weigers 1999] Weigers, Karl. Software Requirements, Redmond Washington: Microsoft Press, 1999.</p><p class="content">参考资料 </p><ul><li class="content">[Booch 1994] Booch, Grady. Object-Oriented Analysis and Design with Applications, 2nd ed. Redwood City, CA. Benjamin Cummings, 1994.<br /><br />　 
</li><li class="content">[Booch 1999] Booch, Grady, James Rumbaugh, Ivar Jacobson. The Unified Modeling Language User Guide. Reading, MA: Addison Wesley Longman,1999.<br /><br />　 
</li><li class="content">[Dorfmann 1990] Dorfmann, Merlin, and Richard H. Thayer. Standards, Guidelines, and Examples of System and Software Requirements Engineering. Los Alamitos, CA: IEEE Computer Society Press, 1990.<br /><br />　 
</li><li class="content">[Jacobson 1992] Jacobson, Ivar, Magnus Christerson, Patrik Jonsson, and Gunnar ?vergaard. Object-Oriented Software Engineering: A Use Case Driven Approach. Harlow, Essex, England: Addison Wesley Longman, 1992.<br /><br />　 
</li><li class="content">[Rumbaugh 1999] Rumbaugh, James, Ivar Jacobson, Grady Booch. The Unified Modeling Language Reference Manual. Reading, MA: Addison Wesley Longman, 1999.<br />　 
</li><li class="content">请参加Rational 中国论坛关于本文的讨论。<br />　 </li></ul><p>　</p><p class="content"></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td class="content"><span class="content">关于作者</span><br />在 Rational 软件公司里，我很荣幸能够与一些业内资深方法学家（Grady Booch、Ivar Jacobson、Jim Rumbaugh、Philippe Kruchten、Bran Selic 等人）协同工作。尽管这是我的职业生涯中有益的、令我痴迷的一部分，但这不是我可以推荐给每个人的。换言之，请不要在家尝试这样做。</td></tr></tbody></table><img src ="http://www.cppblog.com/tx7do/aggbug/11618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-23 19:03 <a href="http://www.cppblog.com/tx7do/archive/2006/08/23/11618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用例的需求分析-读书笔记</title><link>http://www.cppblog.com/tx7do/archive/2006/08/23/11617.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Wed, 23 Aug 2006 11:02:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/23/11617.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11617.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/23/11617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11617.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11617.html</trackback:ping><description><![CDATA[
		<p>一.系统边界和参与者<br />参与者Actor定义:在系统之外,透过系统边界和系统进行有意义的交互的任何事物<br />透露出参与者的特征:<br />1.不属于系统<br />2.通过系统边界直接和系统交互-&gt;参与者的确定决定了系统边界的确定<br />3.进行有意义的交互<br />4.任何事物</p>
		<p>其中第二点的"直接"要注意:如果一个顾客通过售票员买机票,那么对于售票系统来说,售票员是参与者而顾客不是.<br />由此又产生了业务建模和系统建模的区别:对于售票系统来说,当业务建模的时候,我们描述的是顾客来订票,可能还有票务中心的主任来询问售票情况等等事件.但是系统建模的时候,他们都不是我们的对象,我们描述为售票员要售票和提供售票情况的事件的描述,因此这两者在建模的不同阶段是不一样的.</p>
		<p>在有些自动系统中,时间往往是触发系统工作的外部事物,因此参与者是时间,不可忽略.</p>
		<p>识别参与者方法:面对一个系统时,你应该问这些问题:<br />谁使用系统?<br />谁改变系统数据?<br />谁从系统获取信息?<br />谁需要系统的支持来完成日常工作?<br />谁负责管理并维护系统正常运行?<br />系统要应付那些硬设备?<br />系统要和其他的系统交互吗?<br />谁对系统产生的结果感兴趣?<br />时间,气候等外部条件呢?<br />当你回答完这些问题之后,你的答案基本上就涵盖了参与者的候选人.</p>
		<p>
				<br />识别参与者的重要性:<br />1.根据参与者识别系统用例:因此为了完整系统的功能,你识别的系统参与者宁多勿少.<br />2.测试部署阶段你可能会通过识别者的角度去了解系统的完整性.<br />3.用例文档编写阶段,参与者不是很重要,但是你应该考虑参与者的泛化关系,避免出现用例的重复功能.<br /><br /><br /><br />二.识别事件<br />罗列清楚系统事件,是正确建立系统用例的必要条件.</p>
		<p>系统事件分为两类:系统外部事件和系统内部事件<br />外部事件就是外部参与者对系统交互的具体工作,内部事件就是系统内部触发的工作,通常由时间触发.</p>
		<p>识别事件的方法:头脑风暴法-主语+谓语+宾语,描述系统可能发生的事情,尽可能全面,同样是宁多勿少的原则,不过你可以根据事件的重要程度进行一个排序,这能加深你对系统的认识.</p>
		<p>通常把识别出来的事件列成一个表格:称为3A表<br />Actor  Action Aim<br />参与者  作甚么  业务目的<br />...  ...  ...</p>
		<p>
				<br />
				<br />三.识别用例<br />用例定义:用例是一组用例实例<br />用例实例定义:系统执行的一系列动作,用以产生参与者可观测到的结果值</p>
		<p>用例要点:<br />1.位于系统  --必须由系统运行<br />2.目标导向  --用例运行必须有所目的<br />3.止于边界  --可以观测到结果,并且是在边界和外部有所交互的<br />4.用户观点  --参与者观测<br />5.粒度   --是一组有共同目标或者可以类聚的目标的实例们组成</p>
		<p>识别用例是从业务建模开始的,也就是说我们描述用例是从用户的角度即用户观点出发的识别行为,描述用例是用纯粹的业务语言,而不是技术语言.比如描述为清缴税款,而不是J2ee架构.因此,用户的命名也是从用户的角度出发,描述用户要做的一件通过系统完成有目的,有结果的行为.</p>
		<p>用例的粒度不宜过细,过细的分解会导致用例描述的错误:<br />1.把交互的步骤成为一个用例,而不是把一类一系列步骤作为一个用例.例如,用户登陆是一个用例,错误的做法是把请求输入用户名也作为一个用例.<br />2.把必要的处理过程中的一些系统内部活动称作用例:验证用户,连接数据库,发送SQL请求等称作一个用例,其实都是用户登陆这一次交互的步骤而已.<br />3.把识别用例的工作当成是关系数据库分析的工作:称作四轮马车的错误,即CRUD(Create Read Update Delete).例如管理用户是一个用例,但是可能变成了增加用户,查询用户,修改用户,删除用户的"系统就是数据的增删改查"的认识论错误.</p>
		<p>识别用例的一个关键性原则就是:站在用户的角度分析用户的目的,而不是站在系统的角度,更不是站在数据的角度.</p>
		<p>通过建立的系统事件可以很顺利的画出用例图,但是应该记住"用例的本质是文字",所以我们最终要将用例图转化成用例文档.可以用下面的例子格式书写用例文档:<br />用例编号:<br />用例名:<br />用例描述:<br />参与者:<br />前置条件:开始该用例时的所必需的系统和环境状态<br />后置条件:结束该用例时的所具备的系统和环境状态<br />基本路径:<br />1…..××××<br />2……××××<br />3…..××××<br />扩展点:<br />2a.××××<br />2a1….×××××<br />补充说明:</p>
		<p>前置条件和后置条件可以反应用例间的相互依赖关系.还可以防止漏掉某些用例</p>
		<p>
				<br />用例之间的关系:扩展extends,包含include,泛化<br /></p>
<img src ="http://www.cppblog.com/tx7do/aggbug/11617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-23 19:02 <a href="http://www.cppblog.com/tx7do/archive/2006/08/23/11617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bug databases</title><link>http://www.cppblog.com/tx7do/archive/2006/08/14/11225.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 14 Aug 2006 10:03:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/14/11225.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11225.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/14/11225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11225.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11225.html</trackback:ping><description><![CDATA[
		<h5>Bug databases (34 found)</h5>
		<br />
		<p>
				<b>
						<a name="Abuky">Abuky</a>
				</b>
		</p>
		<p>
				<a href="http://abuky.sunsite.dk/index.html" target="_blank">http://abuky.sunsite.dk/index.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Abuky stands for the Aoo BUg tracKing sYstem, while AOO stands for Art Of Open Source. Abuky is a system for tracking bugs and aiding the developer to fix them, written in Java with JSP as web interface. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux, Windows, Solaris</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Anthill Bug Manager">Anthill Bug Manager</a>
				</b>
		</p>
		<p>
				<a href="http://anthillbm.sourceforge.net/" target="_blank">http://anthillbm.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Anthill is a tool that aids code development by keeping track of bugs in a multi-project, multi-developer environment. It accomplishes this with a clean, simple, and fast interface that contains all the essential features but avoids the enormous complexity associated with most other projects of this type. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 1617 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="BTsys">BTsys</a>
				</b>
		</p>
		<p>
				<a href="http://btsys.sourceforge.net/" target="_blank">http://btsys.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>BTsys is a lightweight desktop bug tracking system, written using C# and ADO.NET for small developer teams. Easy to install and learn how to use. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All 32-bit MS Windows (95/98/NT/2000/XP)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 0 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="BugBye">BugBye</a>
				</b>
		</p>
		<p>
				<a href="http://bugbye.sourceforge.net/" target="_blank">http://bugbye.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>BugBye is a web-based bugtracking system developed using ASP.NET technology and C# as scripting language. It offers all the features needed to manage improvement, bugs, and so on. It also provide statistics help-desk management, and further options which allow the user to simplify all the stage of project development and maintainance.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All 32-bit MS Windows (95/98/NT/2000/XP)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 3077 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Bugfree">Bugfree</a>
				</b>
		</p>
		<p>
				<a href="http://bugfree.1zsoft.com/English.html" target="_blank">http://bugfree.1zsoft.com/English.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>A lightweight and simple web-based bug tracking system available in Chinese and English.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 4312 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Buglog">Buglog</a>
				</b>
		</p>
		<p>
				<a href="http://buglogv2.sourceforge.net/" target="_blank">http://buglogv2.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Allows you to easily record bugs into a database along with description and screenshots of the bugs (file upload feature). The BLT allows tracking of all bugs on a project-wise basis thus making it a bug logging and tracking solution. BuglogV2 incorporates a powerful search feature allowing developers to locate bugs effortlessly.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All 32-bit MS Windows (95/98/NT/2000/XP)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 3763 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="BugNet">BugNet</a>
				</b>
		</p>
		<p>
				<a href="http://www.bugnetproject.com/" target="_blank">http://www.bugnetproject.com/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>A web based bug / issue tracking application programmed in C# and asp.net. The main goals are to keep the codebase simple, well documented, easy to deploy and scalable. Major features include: Generic DAL / XHTML and CSS layout.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All 32-bit MS Windows (95/98/NT/2000/XP)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 4859 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="BugRat">BugRat</a>
				</b>
		</p>
		<p>
				<a href="http://www.gjt.org/pkg/bugrat/" target="_blank">http://www.gjt.org/pkg/bugrat/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>BugRat is free Java software that provides a sophisticated, flexible bug reporting and tracking system. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Bugs Online">Bugs Online</a>
				</b>
		</p>
		<p>
				<a href="http://bugsonline.sourceforge.net/" target="_blank">http://bugsonline.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Bugs Online was originally developed in 1997 to serve as the primary bug and issue tracking system to be utilized during a large development oriented project. The Bugs Online system is a very flexible and capable system for bug and issue tracking. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows NT 4.0 SP3+, MS IIS 3 w/ ASP</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 20254 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Bugtrack">Bugtrack</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/btrack" target="_blank">http://sourceforge.net/projects/btrack</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Web based bug tracking system written in Perl/DBI. Supports multiple users, projects, components, versions and email notification.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux, Solaris, Windows</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 3361 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="BugTracker.NET">BugTracker.NET</a>
				</b>
		</p>
		<p>
				<a href="http://btnet.sourceforge.net/bugtrackernet.html" target="_blank">http://btnet.sourceforge.net/bugtrackernet.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>BugTracker.NET is a free, web-based bug or issue tracker written using ASP.NET, C#, and Microsoft SQL Server/MSDE. It is in daily use by hundreds (maybe thousands) of development and support teams around the world.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All 32-bit MS Windows (95/98/NT/2000/XP)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 71096 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Bugzilla">Bugzilla</a>
				</b>
		</p>
		<p>
				<a href="http://www.mozilla.org/projects/bugzilla/" target="_blank">http://www.mozilla.org/projects/bugzilla/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Bugzilla has matured immensely, and now boasts many advanced features. These include: integrated, product-based granular security schema, inter-bug dependencies and dependency graphing, advanced reporting capabilities, a robust, stable RDBMS back-end, extensive configurability, a very well-understood and well-thought-out natural bug resolution protocol, email, XML, console, and HTTP APIs, available integration with automated software configuration management systems, including Perforce and CVS (through the Bugzilla email interface and checkin/checkout scripts), too many more features to list </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="CodeTrack">CodeTrack</a>
				</b>
		</p>
		<p>
				<a href="http://kennwhite.sourceforge.net/codetrack/" target="_blank">http://kennwhite.sourceforge.net/codetrack/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Bug database with a friendly web front end aimed at medium and small development shops. Particularly suited for intranet and extranet environments, CodeTrack includes built-in strong authentication, and allows custom access control to individual projects. No database is required as bug data and developer notes are stored using simple XML text files. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Apache and PHP</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 5723 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Debian bug tracking software">Debian bug tracking software</a>
				</b>
		</p>
		<p>
				<a href="http://www.chiark.greenend.org.uk/~ian/debbugs/" target="_blank">http://www.chiark.greenend.org.uk/~ian/debbugs/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The Debian bug tracking system is a set of scripts which maintain a database of problem reports. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Unix</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Eventum">Eventum</a>
				</b>
		</p>
		<p>
				<a href="http://eventum.mysql.org/wiki/index.php/Main_Page" target="_blank">http://eventum.mysql.org/wiki/index.php/Main_Page</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Eventum is a user-friendly and flexible issue tracking system that can be used by a support department to track incoming technical support requests, or by a software development team to quickly organize tasks and bugs.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>PHP, MySQL</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Flyspray">Flyspray</a>
				</b>
		</p>
		<p>
				<a href="http://flyspray.rocks.cc/" target="_blank">http://flyspray.rocks.cc/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Originally developed for the Psi project, Flyspray is an easy to use bug tracking system for those who do not require all the complexities of something like Bugzilla. It supports multiple users, file attachments, and Jabber notifications.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Web Environment</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="GNATS">GNATS</a>
				</b>
		</p>
		<p>
				<a href="http://www.gnu.org/software/gnats/" target="_blank">http://www.gnu.org/software/gnats/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>GNATS is a portable incident/bug report/help request-tracking system which runs on UNIX-like operating systems. It easily handles thousands of problem reports, has been in wide use since the early 90s, and can do most of its operations over e-mail. Several front end interfaces exist, including command line, emacs, and Tcl/Tk interfaces. There are also a number of Web (CGI) interfaces written in scripting languages like Perl and Python. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Helis">Helis</a>
				</b>
		</p>
		<p>
				<a href="http://linux.softpedia.com/get/Programming/Bug-Tracking/Helis-962.shtml" target="_blank">http://linux.softpedia.com/get/Programming/Bug-Tracking/Helis-962.shtml</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Helis includes the main features of most bug tracking systems.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux web server (php 4/mysql + cgi)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Issue Tracker Product">Issue Tracker Product</a>
				</b>
		</p>
		<p>
				<a href="http://www.issuetrackerproduct.com/" target="_blank">http://www.issuetrackerproduct.com/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>A straight forward and user friendly web application built on top of the Zope application server. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent, Zope</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 797 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="JIRA">JIRA</a>
				</b>
		</p>
		<p>
				<a href="http://www.atlassian.com/software/jira/" target="_blank">http://www.atlassian.com/software/jira/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>JIRA is an issue tracking and project management application developed to make this process easier for your team. JIRA has been designed with a focus on task achievement, is instantly usable and is flexible to work with. Free to academic and open source projects, commercial licenses come with the complete source code.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>JDK</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="JitterBug">JitterBug</a>
				</b>
		</p>
		<p>
				<a href="http://samba.anu.edu.au/cgi-bin/jitterbug" target="_blank">http://samba.anu.edu.au/cgi-bin/jitterbug</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>JitterBug is a web based bug tracking system. JitterBug operates by receiving bug reports via email or a web form. Authenticated users can then reply to the message, move it between different categories or add notes to it. In some ways JitterBug is like a communal web based email system. This web page is itself a JitterBug page. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 0 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="JTrac">JTrac</a>
				</b>
		</p>
		<p>
				<a href="http://jtrac.info/" target="_blank">http://jtrac.info</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Trac is a generic issue-tracking web-application that can be easily customized by adding custom fields and drop-downs. Features include customizable workflow, field level permissions, e-mail integration, file attachments and a detailed history view.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 2323 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Mantis">Mantis</a>
				</b>
		</p>
		<p>
				<a href="http://mantisbt.sourceforge.net/" target="_blank">http://mantisbt.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Mantis is a php/MySQL/web based bugtracking system.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows, MacOS, OS/2, and a variety of Unix operating systems. Any web browser should be able to function as a clientWindows, MacOS, OS/2, and a</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 276848 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Open Track">Open Track</a>
				</b>
		</p>
		<p>
				<a href="http://www.tumblin.com/aws/opentrack.html" target="_blank">http://www.tumblin.com/aws/opentrack.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>OpenTrack is a problem tracking(PR) system that is table driven and easily configurable/customizable for a variety of PR applications. Project defect tracking, help desk tracking, and requirements gathering can be easily handled by OpenTrack. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="PEST">PEST</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/pest/" target="_blank">http://sourceforge.net/projects/pest/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>PEST is a bug tracking system written especially for a web enviroment. It supports good testing and bug tracking processes, as well as notification. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 1881 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="phpBugTracker">phpBugTracker</a>
				</b>
		</p>
		<p>
				<a href="http://phpbt.sourceforge.net/" target="_blank">http://phpbt.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>phpBugTracker is an attempt to copy the functionality of Bugzilla while providing a codebase that is independent of the database and presentation layers. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>webserver with PHP 4.1.0+</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 54426 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Request Tracker">Request Tracker</a>
				</b>
		</p>
		<p>
				<a href="http://www.bestpractical.com/rt/index.html" target="_blank">http://www.bestpractical.com/rt/index.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>RT is an industrial-grade ticketing system. It lets a group of people intelligently and efficiently manage requests submitted by a community of users. RT is used by systems administrators, customer support staffs, NOCs, developers and even marketing departments at over a thousand sites around the world. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Written in object-oriented Perl, RT is a high-level, portable, platform independent system</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Roundup Issue Tracker">Roundup Issue Tracker</a>
				</b>
		</p>
		<p>
				<a href="http://roundup.sourceforge.net/" target="_blank">http://roundup.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Roundup is a simple-to-use and -install issue-tracking system with command-line, web and e-mail interfaces. It is based on the winning design from Ka-Ping Yee in the Software Carpentry "Track" design competition. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 33852 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Scarab">Scarab</a>
				</b>
		</p>
		<p>
				<a href="http://scarab.tigris.org/" target="_blank">http://scarab.tigris.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The goal of the Scarab project is to build an Issue / Defect tracking system that has the following features: A full feature set similar to those found in other Issue / Defect tracking systems: data entry, queries, reports, notifications to interested parties, collaborative accumulation of comments, dependency tracking In addition to the standard features, Scarab has fully customizable and unlimited numbers of Modules (your various projects), Issue types (Defect, Enhancement, etc), Attributes (Operating System, Status, Priority, etc), Attribute options (P1, P2, P3) which can all be defined on a per Module basis so that each of your modules is configured for your specific tracking requirements. Built using Java Servlet technology for speed, scalability, maintainability, and ease of installation. Import/Export ability via XML allowing for easy migration from other systems (like Bugzilla). Modular code design that allows manageable modifications of existing and new features over time. Fully customizable through a set of administrative pages. Easily modified UI look and feel. Can be integrated into larger systems by re-implementing key interfaces. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>TBC</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Stabilizer">Stabilizer</a>
				</b>
		</p>
		<p>
				<a href="http://stabilizer.sf.net/" target="_blank">http://stabilizer.sf.net</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The Stabilizer bug tracking system aims to quickly stabilize buggy GUI applications so that people can get real work done with them. Users collaboratively and quickly stabilize a buggy GUI application simply by using the application normally and reporting any bugs that they encounter. As soon as a few people report the same bug, warnings will be issued to all users whenever they are about to trigger that bug and they will be given the opportunity to abort the input event -- thus avoiding the bug altogether and keeping the application stable. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>All POSIX (Linux/BSD/UNIX-like OSes), Linux</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Trac">Trac</a>
				</b>
		</p>
		<p>
				<a href="http://projects.edgewall.com/trac/" target="_blank">http://projects.edgewall.com/trac/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Trac is an enhanced wiki and issue tracking system for software development projects. Trac allows wiki markup in issue descriptions and commit messages, creating links and seamless references between bugs, tasks, changesets, files and wiki pages. A timeline shows all project events in order, making getting an overview of the project and tracking progress very easy.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Python, CGI-capable web server</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Track+">Track+</a>
				</b>
		</p>
		<p>
				<a href="http://www.trackplus.com/" target="_blank">http://www.trackplus.com</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Track+ is a web based issue tracking and project management application targeted at medium to large commercial development projects. Track+ can be used instantly, yet it is flexible and configurable. Track+ is easy to use, provides user centric as well as project centric views, has configurable workflows, supports e-mail submission of issues, and has a comprehensive time and cost tracking module. Track+ is free to academic institutions, open source projects, and charities, and generally free to anybody up to 10 active users in the database. Track+ comes with the complete source code.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent (Written in an interpreted language)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 79969 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="TrackIt">TrackIt</a>
				</b>
		</p>
		<p>
				<a href="http://trackit.sourceforge.net/" target="_blank">http://trackit.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>TrackIt is a Web-based project tracking tool that incorporates defect tracking functionality. It is designed from the ground up to provide maximum flexibility, customization, and most importantly, usefulness to the developer. It has built-in support for various Extreme Programming constructs, as well as full CVS and Subversion integration. It also supports simple listings via HQL and advanced reporting via SQL.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>JRE 1.5</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 9588 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="WREQ">WREQ</a>
				</b>
		</p>
		<p>
				<a href="http://www.math.duke.edu/~yu/wreq/" target="_blank">http://www.math.duke.edu/~yu/wreq/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Wreq is designed to be a distributed request/problem tracking system with builtin knowledge database to help systems personnel to stay on top of requests and to prompt knowledge sharing among all local support groups. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>To use wreq, first you must have perl version 5 with GDBM support installed on your web server.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>For those projects hosted on SourceForge, the project activity data is updated weekly using live newsfeeds <a href="http://www.mouken.com/rss/" target="_blank">powered by CaRP</a></p>
		<br />
<img src ="http://www.cppblog.com/tx7do/aggbug/11225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-14 18:03 <a href="http://www.cppblog.com/tx7do/archive/2006/08/14/11225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Performance test tools </title><link>http://www.cppblog.com/tx7do/archive/2006/08/14/11224.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 14 Aug 2006 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/14/11224.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11224.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/14/11224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11224.html</trackback:ping><description><![CDATA[
		<h5>Performance test tools (25 found)</h5>
		<br />
		<p>
				<b>
						<a name="Apache JMeter">Apache JMeter</a>
				</b>
		</p>
		<p>
				<a href="http://jakarta.apache.org/jmeter/" target="_blank">http://jakarta.apache.org/jmeter/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Apache JMeter is a 100% pure Java desktop application designed to load test functional behavior and measure performance. It was originally designed for testing Web Applications but has since expanded to other test functions. Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and more). It can be used to simulate a heavy load on a server, network or object to test its strength or to analyze overall performance under different load types. You can use it to make a graphical analysis of performance or to test your server/script/object behavior under heavy concurrent load.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Solaris, Linux, Windows (98, NT, 2000). JDK1.4 (or higher).</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Database Opensource Test Suite">Database Opensource Test Suite</a>
				</b>
		</p>
		<p>
				<a href="http://ltp.sourceforge.net/" target="_blank">http://ltp.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The Database Opensource Test Suite (DOTS) is a set of test cases designed for the purpose of stress-testing database server systems in order to measure database server performance and reliability.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux, POSIX</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 55872 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="DBMonster">DBMonster</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/dbmonster/" target="_blank">http://sourceforge.net/projects/dbmonster/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>DBMonster is an application to generate random data for testing SQL database driven applications under heavy load. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 7958 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Deluge">Deluge</a>
				</b>
		</p>
		<p>
				<a href="http://deluge.sourceforge.net/" target="_blank">http://deluge.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>An open-source web site stress test tool. Simulates multiple user types and counts. Includes proxy server for recording playback scripts, and log evaluator for generating result statistics. Note: this tool is no longer under active development although it is still available on Sourceforge.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 7097 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Dieseltest">Dieseltest</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/dieseltest/" target="_blank">http://sourceforge.net/projects/dieseltest/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Contains the high-end features common to packages costing $50,000 or more. Dieseltest is a Windows application that simulates hundreds or thousands of users hitting a website. To run a load test, you first create a test script using our script editor. The script contains all of the requests that a real-world user would make of a website. You then load the script and run the test. The system will show you real-time results while the script is running, and produce a report analyzing the results at the conclusion. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 6015 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="FunkLoad">FunkLoad</a>
				</b>
		</p>
		<p>
				<a href="http://funkload.nuxeo.org/" target="_blank">http://funkload.nuxeo.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>FunkLoad is a functional and load web tester, written in Python, whose main use cases are functional and regression testing of web projects, performance testing by loading the web application and monitoring your servers, load testing to expose bugs that do not surface in cursory testing, and stress testing to overwhelm the web application resources and test the application recoverability, and writing web agents by scripting any web repetitive task, like checking if a site is alive.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS independent - except for the monitoring which is Linux specific.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Grinder">Grinder</a>
				</b>
		</p>
		<p>
				<a href="http://grinder.sourceforge.net/" target="_blank">http://grinder.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The Grinder is a Java load-testing framework making it easy to orchestrate the activities of a test script in many processes across many machines, using a graphical console application. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 102533 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Hammerhead 2 - Web Testing Tool">Hammerhead 2 - Web Testing Tool</a>
				</b>
		</p>
		<p>
				<a href="http://hammerhead.sourceforge.net/" target="_blank">http://hammerhead.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Hammerhead 2 is a stress testing tool designed to test out your web server and web site. It can initiate multiple connections from IP aliases and simulated numerous (256+) users at any given time. The rate at which Hammerhead 2 attempts to pound your site is fully configurable, there are numerous other options for trying to create problems with a web site (so you can fix them). </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Hammerhead has been used with Linux, Solaris and FreeBSD.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 19860 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="httperf">httperf</a>
				</b>
		</p>
		<p>
				<a href="http://www.hpl.hp.com/research/linux/httperf/" target="_blank">http://www.hpl.hp.com/research/linux/httperf/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Httperf is a tool for measuring web server performance. It provides a flexible facility for generating various HTTP workloads and for measuring server performance. The focus is not on implementing one particular benchmark but on providing a robust, high-performance tool that facilitates the construction of both micro and macro level benchmarks. The three distinguishing characteristics of httperf are its robustness, which includes the ability to generate and sustain server overload, support for the HTTP/1.1 and SSL protocols, and its extensibility. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>linux (Debian package available), HP-UX, perhaps other Unix</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="http_load">http_load</a>
				</b>
		</p>
		<p>
				<a href="http://www.acme.com/software/http_load/" target="_blank">http://www.acme.com/software/http_load/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>http_load runs multiple HTTP fetches in parallel, to test the throughput of a Web server. However, unlike most such test clients, it runs in a single process, to avoid bogging the client machine down. It can also be configured to do HTTPS fetches. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>tbc</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="JCrawler">JCrawler</a>
				</b>
		</p>
		<p>
				<a href="http://jcrawler.sourceforge.net/" target="_blank">http://jcrawler.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Stress-Testing Tool for web-applications. It comes with the crawling/exploratory feature. You can give JCrawler a set of starting URLs and it will begin crawling from that point onwards, going through any URLs it can find on its way and generating load on the web application. The load parameters (hits/sec) are configurable.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 4291 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="NTime">NTime</a>
				</b>
		</p>
		<p>
				<a href="http://www.codeproject.com/dotnet/ntime.asp" target="_blank">http://www.codeproject.com/dotnet/ntime.asp</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The NTime tool is very similar to NUnit tool to perform repeatable tasks that help managers, architects, developers and testers to test an application against its performance.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows 98 or above, .Net framework 1.1 or 2.0</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="OpenSTA">OpenSTA</a>
				</b>
		</p>
		<p>
				<a href="http://opensta.org/" target="_blank">http://OpenSTA.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>A distributed software testing architecture based on CORBA. Using OpenSTA (Open System Testing Architecture) a user can generate realistic heavy loads simulating the activity of hundreds to thousands of virtual users. OpenSTA graphs both virtual user response times and resource utilization information from all Web Servers, Application Servers, Database Servers and Operating Platforms under test, so that precise performance measurements can be gathered during load tests and analysis on these measurements can be performed. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows 2000, NT4 and XP</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 164360 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="OpenWebLoad">OpenWebLoad</a>
				</b>
		</p>
		<p>
				<a href="http://openwebload.sourceforge.net/" target="_blank">http://openwebload.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>OpenLoad is a tool for load testing web applications. It aims to be easy to use and providing near real-time performance measurements of the application under test. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux, DOS</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 25841 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Seagull">Seagull</a>
				</b>
		</p>
		<p>
				<a href="http://gull.sourceforge.net/" target="_blank">http://gull.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Seagull is a multi-protocol traffic generator test tool. Primary aimed at IMS protocols, Seagull is a powerful traffic generator for functional, load, endurance, stress and performance tests for almost any kind of protocol. Currently supports Diameter, XCAP over HTTP, TCAP (GSM Camel, MAP, Win) protocols.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux/Unix/Win32-Cygwin</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 712 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Siege">Siege</a>
				</b>
		</p>
		<p>
				<a href="http://www.joedog.org/" target="_blank">http://www.joedog.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>SIEGE is an http regression testing and benchmarking utility. It was designed to let web developers measure the performance of their code under duress, to see how it will stand up to load on the internet. It lets the user hit a webserver with a configurable number of concurrent simulated users. Those users place the webserver "under siege." SCOUT surveys a webserver and prepares the urls.txt file for a siege. In order to perform regression testing, siege loads URLs from a file and runs through them sequentially or randomly. Scout makes the process of populating that file easier. You should send out the scout, before you lay siege. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>GNU/Linux, AIX, BSD, HP-UX and Solaris.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 554 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Sipp">Sipp</a>
				</b>
		</p>
		<p>
				<a href="http://sipp.sourceforge.net/" target="_blank">http://sipp.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>SIPp is a performance testing tool for the SIP protocol. Its main features are basic SIPStone scenarios, TCP/UDP transport, customizable (xml based) scenarios, dynamic adjustement of call-rate and a comprehensive set of real-time statistics. It can also generate media (RTP) traffic for audio and video calls.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux/Unix/Win32-Cygwin</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 41919 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="SLAMD">SLAMD</a>
				</b>
		</p>
		<p>
				<a href="http://www.slamd.com/" target="_blank">http://www.slamd.com/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>SLAMD Distributed Load Generation Engine is a Java-based application designed for stress testing and performance analysis of network-based applications.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Any system with Java 1.4 or higher</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Soap-Stone">Soap-Stone</a>
				</b>
		</p>
		<p>
				<a href="http://soap-stone.sourceforge.net/" target="_blank">http://soap-stone.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Network benchmark application which can put your network under load and conduct automatic benchmark and recording activities.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 1482 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="stress_driver">stress_driver</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/stress-driver/" target="_blank">http://sourceforge.net/projects/stress-driver/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>General-purpose stress test tool.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Windows NT/2000, Linux</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 3034 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="TestMaker">TestMaker</a>
				</b>
		</p>
		<p>
				<a href="http://www.pushtotest.com/ptt/" target="_blank">http://www.pushtotest.com/ptt/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>TestMaker from PushToTest.com delivers a rich environment for building and running intelligent test agents that test Web-enabled applications for scalability, functionality, and performance. It comes with a friendly graphical user environment, an object-oriented scripting language (Jython) to build intelligent test agents, an extensible library of protocol handlers (HTTP, HTTPS, SOAP, XML-RPC, SMTP, POP3, IMAP), a new agent wizard featuring an Agent Recorder to write scripts for you, a library of fully-functional sample test agents, and shell scripts to run test agents from the command line and from unit test utilities.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Java 1.4 or higher virtual machine on Windows, Linux, Solaris, and Macintosh.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="TPTEST">TPTEST</a>
				</b>
		</p>
		<p>
				<a href="http://tptest.sourceforge.net/about.php" target="_blank">http://tptest.sourceforge.net/about.php</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The purpose with TPTEST is to allow users to measure the speed of their Internet connection in a simple way. TPTEST measures the throughput speed to and from various reference servers on the Internet. The use of TPTEST may help increase the consumer/end user knowledge of how Internet services work. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>MacOS/Carbon and Win32</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 66442 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Tsung">Tsung</a>
				</b>
		</p>
		<p>
				<a href="http://tsung.erlang-projects.org/" target="_blank">http://tsung.erlang-projects.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Tsung is a distributed load testing tool. It is protocol-independent and can currently be used to stress HTTP, SOAP and Jabber servers (SSL is supported). It simulates complex user's behaviour using an XML description file, reports many measurements in real time (including response times, CPU and memory usage from servers, customized transactions, etc.). HTML reports (with graphics) can be generated during the load. For HTTP, it supports 1.0 and 1.1, has a proxy mode to record sessions, supports GET and POST methods, Cookies, and Basic WWW-authentication. It has already been used to simulate thousands of virtual users.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Tested on Linux, but should work on MacOSX and Windows.</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="Web Application Load Simulator">Web Application Load Simulator</a>
				</b>
		</p>
		<p>
				<a href="http://jobmanager.sourceforge.net/openware_pub/" target="_blank">http://jobmanager.sourceforge.net/openware_pub/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>LoadSim is a web application load simulator. It allows you to create simulations and have those simulations run against your webserver. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>JDK 1.3 or above</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 7971 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Web Polygraph">Web Polygraph</a>
				</b>
		</p>
		<p>
				<a href="http://www.web-polygraph.org/" target="_blank">http://www.web-polygraph.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Benchmarking tool for caching proxies, origin server accelerators, L4/7 switches, content filters, and other Web intermediaries.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>C++ compiler</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>For those projects hosted on SourceForge, the project activity data is updated weekly using live newsfeeds <a href="http://www.mouken.com/rss/" target="_blank">powered by CaRP</a></p>
		<br />
<img src ="http://www.cppblog.com/tx7do/aggbug/11224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-14 18:02 <a href="http://www.cppblog.com/tx7do/archive/2006/08/14/11224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++单元测试工具列表</title><link>http://www.cppblog.com/tx7do/archive/2006/08/14/11223.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Mon, 14 Aug 2006 10:00:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/08/14/11223.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/11223.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/08/14/11223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/11223.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/11223.html</trackback:ping><description><![CDATA[
		<h5>C/C++ unit testing tools (18 found)</h5>
		<br />
		<p>
				<b>
						<a name="Boost">Boost</a>
				</b>
		</p>
		<p>
				<a href="http://www.boost.org/libs/test/doc/index.html" target="_blank">http://www.boost.org/libs/test/doc/index.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>The Boost Test Library provides a matched set of components for writing test programs, organizing tests in to simple test cases and test suites, and controlling their runtime execution.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>
		</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="C Unit Test System">C Unit Test System</a>
				</b>
		</p>
		<p>
				<a href="http://sourceforge.net/projects/cut/" target="_blank">http://sourceforge.net/projects/cut/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>CUT is a simple, to-the-point unit testing system. It's different from other unit test packages in that it follows the KISS principle. It's designed for C testing, not designed to emulate SUnit. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 4744 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Check">Check</a>
				</b>
		</p>
		<p>
				<a href="http://check.sourceforge.net/" target="_blank">http://check.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Check is a unit test framework for C. It features a simple interface for defining unit tests, putting little in the way of the developer. Tests are run in a separate address space, so Check can catch both assertion failures and code errors that cause segmentation faults or other signals. The output from unit tests can be used within source code editors and IDEs.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>POSIX</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 17934 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="CppTest">CppTest</a>
				</b>
		</p>
		<p>
				<a href="http://cpptest.sourceforge.net/" target="_blank">http://cpptest.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>CppTest is a portable and powerful, yet simple, unit testing framework for handling automated tests in C++. The focus lies on usability and extendability. Several output formats are supported and new ones are easily added.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 4445 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="CppUnit">CppUnit</a>
				</b>
		</p>
		<p>
				<a href="http://cppunit.sourceforge.net/" target="_blank">http://cppunit.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>CppUnit is the C++ port of the famous JUnit framework for unit testing. Test output is in XML or text format for automatic testing and GUI based for supervised tests. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>BeOS, MacOS, Windows, OS Independent, Linux</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 293875 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="cutee">cutee</a>
				</b>
		</p>
		<p>
				<a href="http://codesink.org/cutee_unit_testing.html" target="_blank">http://codesink.org/cutee_unit_testing.html</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>C++ unit testing environment that makes it really easy to create and run tests of a library or application. It will automatically generate Makefiles, runner classes (classes that execute test functions), and main test application code. It will also automatically update Makefiles and support classes whenever you add new test functions or modify old ones.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>UNIX</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 9 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="CUTest">CUTest</a>
				</b>
		</p>
		<p>
				<a href="http://cutest.sourceforge.net/" target="_blank">http://cutest.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>CuTest is a unit testing library for the C language.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>
		</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 9356 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="CxxTest">CxxTest</a>
				</b>
		</p>
		<p>
				<a href="http://cxxtest.sourceforge.net/" target="_blank">http://cxxtest.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>CxxTest is a JUnit/CppUnit/xUnit-like framework for C++. Its advantages over existing alternatives are that it doesn't require RTTI, doesn't require member template functions, doesn't require exception handling, doesn't require any external libraries (including memory management, file/console I/O, graphics libraries) and is distributed entirely as a set of header files. This makes it extremely portable and usable. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent (Written in an interpreted language)</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 26641 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Embedded Unit">Embedded Unit</a>
				</b>
		</p>
		<p>
				<a href="https://sourceforge.net/projects/embunit/" target="_blank">https://sourceforge.net/projects/embunit/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Unit testing framework for Embedded C System. Its design was copied from JUnit and CUnit and more, and then adapted somewhat for Embedded C System. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>OS Independent</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 3933 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="GUNit">GUNit</a>
				</b>
		</p>
		<p>
				<a href="http://kooditakomo.cs.tut.fi/projects/gunit/" target="_blank">http://kooditakomo.cs.tut.fi/projects/gunit/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>GUNit is a C unit testing framework in the spirit of JUnit. The framework incorporates an easy to use GUI based on the Gnome libraries.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Linux</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="ObjcUnit">ObjcUnit</a>
				</b>
		</p>
		<p>
				<a href="http://oops.se/objcunit/" target="_blank">http://oops.se/objcunit/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>ObjcUnit is a unit testing framework for Objective-C on Mac OS X. Its design was copied from JUnit, written by Erich Gamma and Kent Beck, and then adapted somewhat for Objective-C. It also has support for mock objects, adapted from the Java Mock Objects framework. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Mac OS X</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="OCUnit">OCUnit</a>
				</b>
		</p>
		<p>
				<a href="http://www.sente.ch/software/ocunit/" target="_blank">http://www.sente.ch/software/ocunit/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>OCUnit is a testing framework for Objective C in the Mac OS X, GNUSTEP and other environments. It is based on the original SUnit framework of Kent Beck, but also include a JUnit like API. Test suites are automatically created at runtime. On Mac OS X it provides full integration with the XCode IDE: tests can be run after each compilation and failures and errors are reported in the build panel.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Mac OS X, GNUstep, OPENSTEP or WebObjects 4</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="QtUnit">QtUnit</a>
				</b>
		</p>
		<p>
				<a href="http://www.uwyn.com/projects/qtunit/" target="_blank">http://www.uwyn.com/projects/qtunit/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>QtUnit is a unit testing framework for C++ which compiles into a shared library. It uses the Qt library for platform independence. Tests can be compiled into modules which are automatically reloaded after modification. The text and graphical testrunners are fully localized and integrate perfectly into IDEs for the display of the exact source location where failures occurred. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Qt 3.0</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="simplectest">simplectest</a>
				</b>
		</p>
		<p>
				<a href="http://simplectest.sourceforge.net/index.php" target="_blank">http://simplectest.sourceforge.net/index.php</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Aims to be a simple but effective testing framework for C and C++ projects, without having too much overhead. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Cygwin (MS Windows), OS Portable</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 685 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="Splint">Splint</a>
				</b>
		</p>
		<p>
				<a href="http://www.splint.org/" target="_blank">http://www.splint.org/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Splint is a tool for statically checking C programs for coding errors and security vulnerabilities. If effort is invested adding annotations to programs, Splint can perform stronger checking than is possible with traditional lints.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Win32, Solaris, Linux, FreeBSD</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 0 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="TestKit">TestKit</a>
				</b>
		</p>
		<p>
				<a href="http://testkit.sourceforge.net/" target="_blank">http://testkit.sourceforge.net</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>Testing framework for Mac OS X and the Objective-C language. Includes testing framework, developer tool integration, easy test organization and packaging, GUI Test Runner, and a command-line version for test automation. Modelled after JUnit, but targets the specific needs of the OS X developer in the Cocoa environment.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>MacOS X</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 1340 total downloads to date<br /></p>
		<br />
		<p>
				<b>
						<a name="TUT">TUT</a>
				</b>
		</p>
		<p>
				<a href="http://tut-framework.sourceforge.net/" target="_blank">http://tut-framework.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>TUT simplifies tests organization and provides basic framework to run them. All developers have to do is to fill tests bodies with the actual test code. </p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>C++</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>No data feed available</p>
		<br />
		<p>
				<b>
						<a name="UnitTest++">UnitTest++</a>
				</b>
		</p>
		<p>
				<a href="http://unittest-cpp.sourceforge.net/" target="_blank">http://unittest-cpp.sourceforge.net/</a>
		</p>
		<p>
				<b>Description:</b>
		</p>
		<p>UnitTest++ is a unit testing framework for C++ designed for simplicity and portability. Features include no explicit test registration, good crash handling, fixtures, rich condition-checking functionality, minimal footprint for embedded environments.</p>
		<p>
				<b>Requirement:</b>
		</p>
		<p>Win32, Linux, Mac OS X</p>
		<p>
				<b>Download data:</b>
		</p>
		<p>Downloadable files: 1490 total downloads to date<br /></p>
		<br />
		<p>For those projects hosted on SourceForge, the project activity data is updated weekly using live newsfeeds <a href="http://www.mouken.com/rss/" target="_blank">powered by CaRP</a></p>
<img src ="http://www.cppblog.com/tx7do/aggbug/11223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-08-14 18:00 <a href="http://www.cppblog.com/tx7do/archive/2006/08/14/11223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件测试相关的６３个国外站点 </title><link>http://www.cppblog.com/tx7do/archive/2006/07/27/10612.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 27 Jul 2006 14:21:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/27/10612.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10612.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/27/10612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10612.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10612.html</trackback:ping><description><![CDATA[
		<p>软件测试相关的63个国外站点<br />网址          简介<br /><a href="http://bdonline.sqe.com/">http://bdonline.sqe.com/</a>         一个关于网站测试方面的网页,对这方面感兴趣的人可以参考<br /><a href="http://citeseer.nj.nec.com/">http://citeseer.nj.nec.com/</a>         <br />一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考<br />网站<br /><a href="http://groups.yahoo.com/group/LoadRunner">http://groups.yahoo.com/group/LoadRunner</a>         性能测试工具LoadRunner的一个论坛<br /><a href="http://groups.yahoo.com/grorp/testing-paperannou-nce/messages">http://groups.yahoo.com/grorp/testing-paperannou-nce/messages</a>         <br />提供网站上当前发布的软件测试资料列表<br /><a href="http://satc.gsfc.nasa.gov/homepage.html">http://satc.gsfc.nasa.gov/homepage.html</a>         <br />软件保证中心是美国国家航天局（NASA)投资设立的一个软件可靠性和安全性研究中心，<br />研究包括了度量、工具、风险等各个方面<br /><a href="http://seg.iit.nrc.ca/English/index.html">http://seg.iit.nrc.ca/English/index.html</a>         加拿大的一个研究软件工程质量方面的组织，可以提供研究论文的下载<br /><a href="http://sepo.nosc.mil/">http://sepo.nosc.mil</a>         内容来自美国SAN DIEGO的软件工程机构（Sofrware Engineering Process <br />Office)主页，包括软件工程知识<br />方面的资料<br /><a href="http://www.asq.org/">http://www.asq.org/</a>         是世界上最大的一个质量团体组织之一，有着比较丰富的论文资源，不过是收费的<br /><a href="http://www.automated-testing.com/">http://www.automated-testing.com/</a>         一个自动化软件测试和自然语言处理研究页面，属于个人网页，上面有些资源可供下载<br /><a href="http://www.benchmarkresources.com/">http://www.benchmarkresources.com/</a>         提供有关标杆方面的资料，也有一些其它软件测试方面的资料<br /><a href="http://www.betasoft.com/">http://www.betasoft.com/</a>         包含一些流行测试工具的介绍、下载和讨论，还提供测试方面的资料<br /><a href="http://www.brunel.ac.uk/~csstmmh2/vast/home.html">http://www.brunel.ac.uk/~csstmmh2/vast/home.html</a>         <br />VASTT研究组织，主要从事通过切片技术、测试技术和转换技术来验证和分析<br />系统，对这方面技术感兴趣的人是可以在这里参考一些研究的项目及相关的一些主题信息<br /><a href="http://www.cc.gatech.edu/aristotle/">http://www.cc.gatech.edu/aristotle/</a>         <br />Aristole研究组织，研究软件系统分析、测试和维护等方面的技术，在测试方面的研究包括<br />了回归测试、测试套最小化、面向对象软件测试等内容，该网站有丰富的论文资源可供下载<br /><a href="http://www.computer.org/">http://www.computer.org/</a>         <br />IEEE是世界上最悠久，也是在最大的计算机社会团体，它的电子图书馆拥有众多计算机方面的论文资料，<br />是研究计算机方面的一个重要资源参考来源<br /><a href="http://www.cs.colostate.edu/testing/">http://www.cs.colostate.edu/testing/</a>         可靠性研究网站，有一些可靠性方面的论文资料<br /><a href="http://www.cs.york.ac.uk/testsig/">http://www.cs.york.ac.uk/testsig/</a>         <br />约克大学的测试专业兴趣研究组网页，有比较丰富的资料下载，内容涵盖了测试的多个方面，<br />包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等<br /><a href="http://www.csr.ncl.ac.uk/index.html">http://www.csr.ncl.ac.uk/index.html</a>         <br />学校里面的一个软件可靠性研究中心，提供有关软件可靠性研究方面的一些信息和资料，对<br />这方面感兴趣的人可以参考<br /><a href="http://www.dcs.shef.ac.uk/research/groups/vt/">http://www.dcs.shef.ac.uk/research/groups/vt/</a>         <br />学校里的一个验证和测试研究机构，有一些相关项目和论文可供参考<br /><a href="http://www.esi.es/en/main/">http://www.esi.es/en/main/</a>         ESI（欧洲软件组织），提供包括CMM评估方面的各种服务<br /><a href="http://www.europeindia.org/cd02/index.htm">http://www.europeindia.org/cd02/index.htm</a>         一个可靠性研究网站，有可靠性方面的一些资料提供参考<br /><a href="http://www.fortest.org.uk/">http://www.fortest.org.uk/</a>         一个测试研究网站，研究包括了静态测试技术（如模型检查、理论证明）和动态测试（如测试自动化、<br />特定缺陷的检查、测试有效性分析等）<br /><a href="http://www.grove.co.uk/">http://www.grove.co.uk/</a>         一个有关软件测试和咨询机构的网站，有一些测试方面的课程和资料供下载<br /><a href="http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm">http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm</a>         NASA可靠性设计实践资料<br /><a href="http://www.io.com/~wazmo/">http://www.io.com/~wazmo/</a>         Bret <br />Pettichord的主页，他的一个热点测试页面连接非常有价值，从中可以获得相当大的测试资料，很<br />有价值<br /><a href="http://www.iso.ch/iso/en/ISOOnline.frontpage">http://www.iso.ch/iso/en/ISOOnline.frontpage</a>         <br />国际标准化组织，提供包括ISO标准系统方面的各类参考资料<br /><a href="http://www.isse.gmu.edu/faculty/ofut/classes/">http://www.isse.gmu.edu/faculty/ofut/classes/</a> 821-ootest/papers.html         <br />提供面向对象和基于构架的测试方面著作下载，对这方<br />面感兴趣的读者可以参考该网站，肯定有价值<br /><a href="http://www.ivv.nasa.gov/">http://www.ivv.nasa.gov/</a>         <br />NASA设立的独立验证和确认机构，该机构提出了软件开发的全面验证和确认，在此可以获得这方面的研究<br />资料<br /><a href="http://www.kaner.com/">http://www.kaner.com/</a>         著名的测试专家Cem Kanner的主页，里面有许多关于测试的专题文章，相信对大家都有用。Cem <br />Kanner关于<br />测试的最著名的书要算Testing Software,这本书已成为一个测试人员的标准参考书<br /><a href="http://www.library.cmu.edu/Re-search/Engineer">http://www.library.cmu.edu/Re-search/Engineer</a>- ingAndSciences/CS+ECE/index.html  <br />       卡耐基梅陇大学网上图书馆，在这里你可<br />以获得有关计算机方面各类论文资料，内容极其庞大，是研究软件测试不可获取的资料来源之一<br /><a href="http://www.loadtester.com/">http://www.loadtester.com/</a>         一个性能测试方面的网站，提供有关性能测试、性能监控等方面的资源，包括论文、论坛以及一些相关<br />链接<br /><a href="http://www.mareinig.ch/mt/index.html">http://www.mareinig.ch/mt/index.html</a>         <br />关于软件工程和应用开发领域的各种免费的实践知识、时事信息和资料文件下载，包括了测<br />试方面的内容<br /><a href="http://www.mtsu.ceu/-storm/">http://www.mtsu.ceu/-storm/</a>         软件测试在线资源，包括提供目前有哪些人在研究测试，测试工具列表连接，测试会议，测试新闻和<br />讨论，软件测试文学（包括各种测试杂志，测试报告），各种测试研究组织等内容<br /><a href="http://www.psqtcomference.com/">http://www.psqtcomference.com/</a>         实用软件质量技术和实用软件测试技术国际学术会议宣传网站，每年都会举行两次<br /><a href="http://www.qacity.com/front.htm">http://www.qacity.com/front.htm</a>         测试工程师资源网站，包含各种测试技术及相关资料下载<br /><a href="http://www.qaforums.com/">http://www.qaforums.com/</a>         关于软件质量保证方面的一个论坛，需要注册<br /><a href="http://www.qaiusa.com/">http://www.qaiusa.com/</a>         QAI是一个提供质量保证方面咨询的国际著名机构，提供各种质量和测试方面证书认证<br /><a href="http://www.qualitytree.com/">http://www.qualitytree.com/</a>         一个测试咨询提供商，有一些测试可供下载，有几篇关于缺陷管理方面的文章值得参考<br /><a href="http://www.rational.com/">http://www.rational.com/</a>         IBM Rational的官方网站，可以在这里寻找测试方面的工具信息。IBM <br />Rational提供测试方面一系列的工<br />具，比较全面<br /><a href="http://rexblackconsulting.com/Pages/publicat-ions.htm">http://rexblackconsulting.com/Pages/publicat-ions.htm</a><br />        Rex Black的个人主页，有一些测试和测试管理方面的资料可供下载<br /><a href="http://www.riceconsulting.com/">http://www.riceconsulting.com/</a>         一个测试咨询提供商，有一些测试资料可供下载，但不多<br /><a href="http://www.satisfice.com/">http://www.satisfice.com/</a>         包含James Bach关于软件测试和过程方面的很多论文，尤其在启发式测试策略方面值得参考<br /><a href="http://www.satisfice.com/seminars.shtml">http://www.satisfice.com/seminars.shtml</a>         一个黑盒软件测试方面的研讨会，主要由测试专家Cem <br />Kanar和James Bach组织，有一些<br />值得下载的资料<br /><a href="http://www.sdmagazine.com/">http://www.sdmagazine.com/</a>         软件开发杂志，经常会有一些关于测试方面好的论文资料，同时还包括了项目和过程改进方面的课题，<br />并且定期会有一些关于质量和测试方面的问题讨论<br /><a href="http://www.sei.cmu.edu/">http://www.sei.cmu.edu/</a>         著名的软件工程组织，承担美国国防部众多软件工程研究项目，在这里你可以获俄各类关于工程质量和测<br />试方面的资料。该网站提供强有力的搜索功能，可以快速检索到你想要的论文资料，并且可以免费下载<br /><a href="http://www.soft.com/Institute/HotList/">http://www.soft.com/Institute/HotList/</a>         <br />提供了网上软件质量热点连接，包括：专业团体组织连接、教育机构连接、商业咨询公司<br />连接、质量相关技术会议连接、各类测试技术专题连接等<br /><a href="http://www.soft.com/News/QTN-Online/">http://www.soft.com/News/QTN-Online/</a>         <br />质量技术时事，提供有关测试质量方面的一些时事介绍信息，对于关心测试和质量发展的人<br />士来说是很有价值的<br /><a href="http://www.softwaredioxide.com/">http://www.softwaredioxide.com/</a>         包括软件工程（CMM,CMMI,项目管理）软件测试等方面的资源<br /><a href="http://www.softwareqatest.com/">http://www.softwareqatest.com/</a>         <br />软件质量/测试资源中心。该中心提供了常见的有关测试方面的FAQ资料，各质量/测试网站介绍，<br />各质量/测试工具介绍，各质量/策划书籍介绍以及与测试相关的工作网站介绍<br /><a href="http://www.softwaretestinginstitute.com/">http://www.softwaretestinginstitute.com</a>         <br />一个软件测试机构，提供软件质量/测试方面的调查分析，测试计划模板，测试WWW的技<br />术，如何获得测试证书的指导，测试方面书籍介绍，并且提供了一个测试论坛<br /><a href="http://www.sqatester.com/index.htm">http://www.sqatester.com/index.htm</a>         <br />一个包含各种测试和质量保证方面的技术网站，提供咨询和培训服务，并有一些测试人员社团<br />组织，特色内容是缺陷处理方面的技术<br /><a href="http://www.sqe.com/">http://www.sqe.com/</a>         <br />一个软件质量工程服务性网站，组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议，并提供一<br />些相关信息资料和课程服务<br /><a href="http://www.stickyminds.com/">http://www.stickyminds.com/</a>         提供关于软件测试和质量保证方面的当前发展信息资料，论文等资源<br /><a href="http://www.stqemagazine.com/">http://www.stqemagazine.com/</a>         <br />软件策划和质量工程杂志，经常有一些好的论文供下载，不过数量较少，更多地需要通过订购获得，<br />内容还是很有价值的<br /><a href="http://www.tantara.ab.ca/">http://www.tantara.ab.ca/</a>         软件质量方面的一个咨询网站，有过程改进方面的一些资料提供<br /><a href="http://www.tcse.org/">http://www.tcse.org/</a>         IEEE的一个软件工程技术委员会，提供技术论文下载，并有一个功能强大的分类下载搜索功能，可以搜索到测<br />试类型、测试管理、 测试分析等各方面资料<br /><a href="http://www.testing.com/">http://www.testing.com/</a>         测试技术专家Brain Marick的主页，包含了Marick <br />研究的一些资料和论文，该网页提供了测试模式方面的<br />资料，值得研究。总之，如果对测试实践感兴趣，该网站一定不能错过<br /><a href="http://www.testingcenter.com/">http://www.testingcenter.com/</a>         有一些测试方面的课程体系，有一些价值<br /><a href="http://www.testingconferences.com/asiastar/home">http://www.testingconferences.com/asiastar/home</a>         <br />著名的AsiaStar测试国际学术会议官方网站，感兴趣的人一定不能错</p>
<img src ="http://www.cppblog.com/tx7do/aggbug/10612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tx7do/" target="_blank">杨粼波</a> 2006-07-27 22:21 <a href="http://www.cppblog.com/tx7do/archive/2006/07/27/10612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微软的软件测试方法（二）</title><link>http://www.cppblog.com/tx7do/archive/2006/07/27/10611.html</link><dc:creator>杨粼波</dc:creator><author>杨粼波</author><pubDate>Thu, 27 Jul 2006 13:33:00 GMT</pubDate><guid>http://www.cppblog.com/tx7do/archive/2006/07/27/10611.html</guid><wfw:comment>http://www.cppblog.com/tx7do/comments/10611.html</wfw:comment><comments>http://www.cppblog.com/tx7do/archive/2006/07/27/10611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tx7do/comments/commentRss/10611.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tx7do/services/trackbacks/10611.html</trackback:ping><description><![CDATA[
		<span style="FONT-SIZE: 12px">微软的软件测试方法（二）<br />我在前一篇“微软的软件测试方法”中介绍了微软的两类基本测试方法，其基本思想大家应该是比较熟悉的，因为它们还只是传统的软件测试方法的综合。所以单从形式上，它并没有体现出对传统框架的突破。但是从另一个层面来考察微软软件测试时，你会对一些基本的事实感到惊讶。比如，“微软的测试人员和开发人员数量大致相等或略多”，“微软的产品成本中测试大约占40%以上”等等。人们会有疑问，仅仅是作为功能验证和搜寻Bug的测试能消耗这么大量的资源吗？有必要付出如此大的代价吗？应该有理由相信，微软作为一个软件企业，其每一份投入都是有意义的，因此也可断定微软在软件测试方面的努力一定超出传统测试方法的范畴。<br /><br /><br /><br /><br /><br />历史回顾<br /><br /><br /><br /><br /><br />为了更好的理解微软件测试在方法和理念上的突破，我想首先回顾一下软件开发和软件测试的发展历史，并从中揭示其必然性。Edward Kit 在他的畅销书“Software Testing In The Real World : Improving The Process（1995， ISBN: 0201877562）”中将整个软件开发历史分为三个阶段：<br /><br /><br /><br />第一个阶段是60年代及其以前，那时软件规模都很小、复杂程度低，软件开发的过程随意。开发人员的Debug过程被认为是唯一的测试活动。其实这并不是现代意义上的软件测试，当然一阶段也还没有专门测试人员的出现。<br /><br /><br /><br />第二个阶段是70年代，这个阶段开发的软件仍然不复杂，但人们已开始思考开发流程问题，并提出“软件工程Software Engineering”的概念。但是这一阶段人们对软件测试的理解仅限于基本的功能验证和Bug搜寻，而且测试活动仅出现在整个软件开发流程的后期，虽然测试由专门的测试人员来承担，但测试人员都是行业和软件专业的入门新手。<br /><br /><br /><br />第三个阶段是80年代及其以后，软件和IT行业进入了大发展。软件趋向大型化。与之相应，人们为软件开发设计了各种复杂而精密的流程和管理方法（比如CMM和MSF），并将“质量”的概念融入其中。软件测试已有了行业标准（IEEE/ANSI ），它再也不是一个一次性的，而且只是开发后期的活动，而是与整个开发流程融合成一体。软件测试已成为一个专业，需要运用专门的方法和手段，需要专门人才和专家来承担。<br /><br /><br /><br /><br /><br />测试与开发的融合<br /><br /><br /><br /><br /><br />在这一历史发展过程中，最值得注意的是测试与开发流程融合的趋势。人们对这种融合也许并不陌生。比如测试活动的早期展开，让测试人员参与用户需求的验证，参加功能设计和实施设计的审核。再比如测试人员与开发人员的密切合作，随着开发进展而逐步实施单元测试、模块功能测试和系统整合测试。的确这些都是测试与开发融合的表现形式，而且初期的融合也只反映在这个层次上。90年代以后，软件的规模和复杂程度迅速提高，这种形式上的融合也迅速走向更深层次，更具实际意义。具体地说这种融合就是整个软件开发活动对测试的依赖性。传统上认为，只有软件的质量控制依赖于测试，但是现代软件开发的实践证明，不仅软件的质量控制依赖于测试，开发本身离开测试也将无法推进，项目管理离开了测试也从根本上失去了依据。在微软，测试的确有这样的地位和作用。这就是为什么微软在软件测试上有如此大的投入。<br /><br /><br /><br /><br /><br />开发对测试的依赖<br /><br /><br /><br /><br /><br />现代软件开发，特别是大型软件开发通常会遇到以下两个问题：<br /><br /><br /><br />（1）    在开发初期，如何能够展开大规模团队，群体齐头并进，而同时保持开发的有序性。从而有效利用资源，缩短开发周期。<br /><br />（2）    在开发后期，如何解决深层次的Bug，如何面对设计更改，而能够保证产品的质量不出现或少出现回落。<br /><br /><br /><br />对于小型简单的软件，这两个问题也存在，但不突出，而且容易解决。但对于复杂的大型软件的开发，这两个问题常常会成为难以逾越的障碍。<br /><br /><br /><br />通常大型项目的功能丰富，但架构、层次也会相当复杂。稳妥的开发方式是，一次投入少量的人员，逐层开发，逐层稳定。但这种方式显然资源利用率低，开发周期长，不能满足现代软件和IT行业高速发展、瞬息万变的需要。因此大型项目需要大型团队。在微软，产品开发团队（主要包括开发、测试和项目管理）一般都有百人以上规模，有些产品甚至上几千人（Windows2000的开发部门曾有3000多人）。这样大规模的人力资源作用在一个动态的，内部相互联系的系统中，若没有有效的协同，其混乱是不可避免的。试想，有两个开发人员，分别在开发两个不同的功能模块，其相互有依赖关系。为了相互协调，他们可以随时进行当面讨论。如果这种关系发生在五个开发人员和五个功能模块之间，这种协调就只能通过定期的会议来进行。而一个大型项目，会有许许多多这样的关系，而且很多时候这种关系有着不确定性和不可预见性。当一个开发人员编写一段新的代码或对已有代码进行改动和调整时，他（或她）常常无法确定，或无法完全确定究竟有哪些相关的模块会受到影响，以及在什么请况下这种影响会带来什么结果。因为系统的复杂性已远远超出了人的逻辑思维、技能和经验所能力及的范畴。因此这种传统的协调手段是远不能满足需