标题：trac
软件介绍
Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台，是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用，以帮助开发人员更好地写出高质量的软件；Trac应用力求不影响现有团队的开发过程。
开发语言
Trac是采用Python语言开发的，因此Trac的在运行的时候，需要有Python环境的支持，在本手册中Python采用2.5，Trac采用0.11Beta版本、Apache 2.2。 
整个Trac是建立在WIKI和TICKET基础上的，WIKI在工具中充当书写文档、TICKET等的语法，它包含了一些类似HTML但简化了的语法格式，在Guide文档中有语法的详细介绍。WIKI的具体含义将在“Trac中的WIKI”一节中进行详细介绍。TICKET是Trac中的另一个重要的组成部分，Trac使用Ticket（小纸条）传递信息。一个Ticket是具体需要做的事情的载体，也包含很多描述性信息。
模型
Trac是以面向进度模型为项目管理模型的，很明显的特点就是它以里程碑(Milestone)方式进行项目管理的。每个里程碑中的具体要做哪些事情，就使用Ticket来进行定义、跟踪等。里程碑是什么呢？里程碑是一些事件，我们设立这些事件是为了表明当这些事件发生的时候，我们的工作已经达到了某种程度。为什么我不用时间点呢？原因在于使用时间点往往让人误以为，里程碑是按照时间来设计的，而不是按照事件来设立的。 
另外，Trac做一个SCM配置管理平台，意味着它有良好的扩充性。通过WebAdmin界面中的Plugin功能，可以很方便的安装下载的插件，也可以通过此功能查看已经安装的插件，并可对其中的插件进行启用或停用操作。
体系架构
Trac权限体系Trac的权限体系是比较完备的设计，默认情况下trac有anonymous和authenticated两种性质的用户组。Anonymous即匿名组，默认情况下只要能访问apache提供的trac实例服务，那么就属于这个组，这个组浏览trac实例界面时，将根据trac实例设定的权限方案提供可以浏览的内容。 
在通常情况下，我们都给某个trac实例指定admin用户，即权限最大的用户。可以通过trac-admin 实例名 permission add 用户名 TRAC_ADMIN，命令在dos提示符下创建此实例的管理员帐户。需要注意的是权限是区分大小写的。设置成功后，此用户验证登录后，将能够看到Admin这个webadmin管理界面。可以通过此界面可视化的对trac实例进行管理。 
Trac使用Subject和Action方法绑定来进行赋权。Subject即操作对象，Action即可以执行的动作。通过这种关系映射，从而实现Trac的权限管理。默认情况下Trac包含anonymous和authenticated两个Subject，通过前面的trac-admin后，将出现第三个subject，即用户名。 
对于Subject具体的赋权操作，可通过下图完成。通过对Subject的分配Action即可完成赋权操作，通过Remove selected items可以取消某个Subject已经分配的权限。需要注意的是TRAC_ADMIN是最大权限。同时也可以对Subject进行分组管理。某个组拥有的权限，组员将会自动继承。Trac中的WIKI在Trac中随处可见WIKI的影子。Trac的welcome页面，Ticket的编写等等，在整个Trac界面中均可以使用WIKI的语法书写文档。WIKI包含自己的一套语法，采用Genshi才渲染Web页面，或者说解释WIKI语法到HTML语法。Trac中的RoadmapRoadmap中文翻译路线图。在Trac中使用Roadmap展现某个软件的开发过程。在Roadmap中，通过Milestone来分解软件开发的整个生命周期。多个Milestone就构成了一个Roadmap。当然一个软件交付后，在以后的维护过程中的变更、修改等都创建新的Milestone进行管理。Trac中的TimelineTimeline中文可译作时间线，它是以时间进度为参考轴，按时间倒序的方式显示此trac实例中所以的操作日志。它监控的对象包括：
u WIKI事件：创建和更改动作；
u Ticket事件：创建、更改、完成等所有的Ticket的事件；
u Source chanege事件：资源库的代码发生一些动作事件；
u Milestone事件：Milestone结束事件。Trac中的TicketTicket是trac中管理项目的核心元素，它在trac中被用作项目的任务、功能需求、错误报告、软件发布支持等，它采用WIKI作为其描述部分文字的语法.Trac中的ReportReport在trac中主要的用于显示ticket，可以根据上文中提到的ticket所有的属性进行过滤，同时也可以定义显示ticket哪些字段属性，如果觉得用户设定的查询条件及显示方式很有价值，那么你可以保存此查询Report，在下次直接使用。这样在菜单“VIEW TICKETS”中看到此报表。需要注意的是Report只查询ticket。Trac中的SearchSearch主要是对ticket和WIKI进行查询的，查询的内容为ticket和wiki内容，其实查询的就是timeline菜单中列出的所有的内容。Trac使用全文检索的方式进行查询。具体就不在描述。Search输入框中的最小长度的设置在Trac.ini配置文件中进行配置，参考Help/Guide。Trac中的AdminTrac中的admin都是一些重要的操作，但是同时也是很简单的操作，都是对trac整个环境的基本信息做一些设置。包含两个部分的设置，即general和ticket。
Trac如何管理一个软件项目生命周期
Trac采用面向进度的开发模型，因此产生了Milestone的概念，那么Milestone虽然建立了阶段性的里程碑，但是里程碑具体怎么才能到达呢？这就需要采用ticket方式进行处理。当定义的所以的ticket全部closed时，就说明到达了里程碑，但是达到了也并不表示所有的ticket都是fixed，也许是其他的原因关闭的。还有虽然到达了里程碑，但是未必是按时完成的，但是总的阶段性结束点是很明确的。
因此用trac管理一个项目，就要做好以下几方面的工作：
u 划分里程碑
u 划分项目components
u 划分ticket
u 熟练掌握Ticket的运作机制
u 熟练掌握Change History的查看和使用
u 熟练掌握Milestone的查看和使用
前面三项属于项目架构范畴，后面三项属于操作范畴。对于前面三项各自的划分原则是：
ü 划分里程碑原则
里程碑是一些事件，我们设立这些事件是为了表明当这些事件发生的时候，我们的工作已经达到了某种程度。而我们不能够仅仅使用时间点来划分里程碑。
至于选择什么事件作为里程碑，其实就是选择项目利益相关人员最关心的事件作为里程碑。如果为项目计划时间表开一个会议，肯定有很多人提出他们关心的事件或者时间点，比如销售人员会问开发人员什么时候完成alpha测试，好让他们去找客户做beta测试，老板在听完大致计划之后会问什么时候拿出第一个运行版本，开发人员会问什么时候能够签约以便可以开始正式的工作。这些事件或者时间点就是最好的里程碑，里程碑之所以能够标示项目进度，是因为它是项目相关人员关心的事件，里程碑标示进度的含义也是事件的含义。
在实际项目工作中，里程碑是否已经达到，也是非常明确的事情。事件是否发生应该是很明确的，如果不明确说明选择的里程碑不是一个事件，比如“评审通过”、客户在合同上签字、需求分析文档被老板批准，测试中bug收敛，这些事情是否发生都是很清晰的，是一个明确的时间点。
ü 划分Component原则
一般情况下按功能模块来划分，比如协同办公系统可以划分为公文处理、个人办公、电子邮件等等。组件和里程碑之间的关系是，一个组件可以属于多个里程碑，当然一个里程碑里面也可以包含多个组件，它们之间是多对多的关系，但是在trac里面是以里程碑为导向的，所以我们应该站在里程碑这条轴上去管理软件项目。
具体的Component如何划分，这就需要跟实际的情况决定了。
ü 划分Ticket原则
Ticket系统简介 Ticket系统是Trac中关于项目管理的一个重要单元，它是一个简单有效的版本差异和Bug跟踪系统。 
在项目开发过程中出现的任何问题，都可以用一个Ticket来标识，例如Bug，项目计划，功能改进，项目建议，Todo等等，都可以写成一个Ticket，开发人员通过访问查看Ticket系统，可以及时的了解到项目进度，有待解决的地方等等
每个Ticket都可以被修改和说明（Description属性），并说明这个Ticket是Bug还是项目建议还是其他什么（Type属性），指派由哪个人对这个Ticket负责（Assigned to/Owner属性），设定Ticket的优先级（Priority属性），设定Ticket的最终完成时间（Milestone属性），设定这个Ticket属于哪个模块（Component属性）。一个Milestone包含一个名称和时间，其中时间即为项目中这个阶段的预计完结时间，我们通过设定这个属性，来表明所要创建的Ticket属于哪个Milestone，属于项目的哪个阶段，该在哪个时间之前完成。