7 个支持敏捷的开源项目管理工具,更好地管理项目
在一项调查中,有 71% 的组织表示他们在开发过程中会用到敏捷方法。 此外,用敏捷方法管理项目比传统方法管理项目成功率高 28%。 在这次工具推荐中,我们从一些比较受欢迎的开源项目管理工具中摘取了支持敏捷的几项。 无论您的组织已经在使用敏捷,还是正计划使用,相信这 7 个开源的项目管理工具都能给你带来帮助。 1、MyCollab MyCollab 是一个高性能、稳定而且安全的商业平台,用于 CRM 客户关系管理、项目和文档管理。是一个企业的协作平台,基于 Java 开发。该系统提供开源的社区版本。 2、Odoo Odoo 的前身是 OpenERP,是一个开源的企业 ERP 系统。Odoo 不仅仅是项目管理软件, 它还是一个完整的集成商业应用套件,包括会计,人力资源,网站和电子商务,库存,制造,销售管理(CRM)等。 3、OpenProject OpenProject 是一个开源的、基于Web的项目管理应用程序。OpenProject 为项目团队提供了整个项目生命周期的支持,通过插件,OpenProject 支持: 协同项目计划 进度报告 任务管理 时间和成本报告 Scrum 等 4、OrangeScrum orangescrum 是一个采用 CakePHP 框架的 web 应用程序,可用来灵活地管理项目。OrangeScrum 支持敏捷方法,特别是使用 Scrum 任务板和看板式工作流视图。 它适用于小型组织 – 自由职业者,代理机构和中小型企业。 5、]project-open[ ]project-open[ 采用 TCL 开发的基于 Web 的项目管理系统,它能帮助你的业务涵盖领域,如客户关系管理,销售,项目规划,项目跟踪,协作,时间表,发票和付款等。 6、Taiga Taiga 是一个免费开源,而且功能非常强大的项目管理平台,用于初创企业和敏捷开发团队。提供一个简单、漂亮的项目管理工具。Taiga 采用 Python Django 框架开发,前端基于 AngularJS 实现。 7、Tuleap Tuleap Open ALM 不仅仅是一个项目管理工具,它还是一个应用生命周期管理工具,包括敏捷开发和项目管理支持。2013年 Tuleap 获得了 InforWorld.com 的 Bossie 奖,并且被财富500强公司、中小型企业和开源项目广泛使用。 Tuleap 可以灵活,传统混合,或自定义项目管理流程。支持计划,短跑,任务,报告等。这一工具非常适合开源开发公司,因为该工具还集成使用了 Git,SVN, Jenkins 等。 from:https://www.oschina.net/news/97343/agile-project-management-tools
View Details聊聊云计算:5分钟弄清楚我们为什么需要容器
除了云主机,不少应用也部署在容器里面。容器云服务也是现在云服务商的主要业务,阿里云、腾讯云等都会提供相应的容器服务。那么,我们为什么需要容器呢? 我们经常会遇到这样的问题: 1 程序在我这儿跑得好好的,怎么到你那里就不行了? 2 系统好卡,是哪个进程把CPU给吃光了? 3 这套系统我已经搭建好了,要不你再重新搭建一遍? 相信这些问题,大家平常都会遇到。容器技术是帮助我们解决这些问题的好办法。那么容器究竟是什么呢? 容器技术是这些问题的最佳解决方案 容器也是一种虚拟化技术,与虚拟机不同之处在于,虚拟机是硬件虚拟化(Hypervisor的作用),容器是对操作系统虚拟化。 虚拟机本身是不带有操作系统的,在虚拟机上部署应用时,还需要安装操作系统(一般是通过虚拟机镜像)以及其他需要的执行环境,如Tomcat等。 容器把应用以及应用的执行环境打包在一起。部署应用的时候,直接整个容器进行部署。因为容器自带应用执行环境,所以就不存在部署过程中由于环境变化,导致应用出现部署异常,可以说是“一次构建,到处执行”。 虚拟机 VS 容器 从头在虚拟机或物理机上搭建一遍环境,包括安装程序以及配置脚本,往往是非常麻烦的事情。相比于虚拟机(云主机),利用(云)容器来部署应用要更方便。 总结起来,容器有三大特点: 容器内部的东西是不可变的 相比虚拟机更轻量级,可以实现秒级启动,容器可以运行在物理机上,也可以在虚拟机上。 创建速度快,不需要复杂的环境配置 目前最常用的容器就是就是Docker,以至于大家一谈到容器,一般默认就认为是Docker。那么Docker技术与容器有什么关系呢? Docker究竟是什么? 容器技术其实已经出现十多年了,Linux2.6版本就已经支持LXC。而Docker技术的最早0.1版本直到2013年才出现,现在已经成为云计算领域一个非常常用的技术了。 Docker是以容器技术为核心的一套应用构建、部署和执行的技术体系。其中包括了Docker Daemon守护进程、Docker Container容器、Docker Client客户端以及Docker Image镜像等。 Docker守护进程本身就是一个普通的应用进程,不过是用来操作Docker镜像文件的。Docker守护进程与镜像文件一起就组成了Docker容器。 Docker容器、守护进程与镜像的关系 那这个Docker镜像文件(Docker File)里面有什么呢?Docker镜像和虚拟机快照(镜像文件)类似,分不同的层级,比如有基础镜像,仅仅包含操作系统,比如CentOS镜像;有中间件镜像,比如redis数据库镜像;还有应用镜像,就是指含有具体的应用服务的镜像了。 Docker如何部署应用 当我们需要部署应用的时候,可以从镜像中创建容器,这如同从快照中创建虚拟机,不过更轻量,启动更快,秒启。 应用是在容器中运行的。比如我们要通过容器部署一个应用: 首先下载了一个Ubuntu的镜像; 然后又安装mysql和Django应用及其依赖,来完成对它Ubutun镜像的修改; 最后通过这个镜像生成一个容器; 容器启动之后就会运行Django服务了。 容器不是完全封闭的,也需要对外提供服务,所以Docker允许公开容器的特定端口。 在启动Docker的时候,我们就可以将容器的特定端口映射到宿主机上面的任意一个端口。如果一个宿主机(虚拟机或物理机)上面要部署多个Docker容器,而且几个服务都需要80端口,那么容器的对外端口都是80,但是映射到宿主机上面就可以是任意端口,不会产生冲突。 基于Docker仓库的工作流程 Docker仓库(Registry)是用来存放Docker镜像的地方。仓库存在公有和私有之分,公有仓库docker hub提供了非常多的镜像文件,这些镜像直接拉取下来就可以运行了。 我们也可以上传自己的镜像到docker hub上,同时也可以自己搭建私有仓库用于团队项目管理。 基于Docker仓库的开发运维工作流程 基于Docker仓库,整个开发团队的DevOp工作流程大致是这样的: 开发人员构建镜像并将镜像提交到Docker仓库; 测试人员从Docker仓库拷贝镜像到测试环境进行测试; 运维人员从Docker仓库拷贝镜像部署到生产环境,通过镜像开启容器并对外提供服务 from:http://baijiahao.baidu.com/s?id=1588183340989045106&wfr=spider&for=pc
View Details领域驱动设计(DDD:Domain-Driven Design)
Eric Evans的“Domain-Driven Design领域驱动设计”简称DDD,Evans DDD是一套综合软件系统分析和设计的面向对象建模方法,本站Jdon.com是国内公开最早讨论DDD网站之一,可订阅DDD专题。初学者学习DDD可从研究本站Jdon框架的DDD应用源码开始,戳这里开始。 过去系统分析和系统设计都是分离的,正如我们国家“系统分析师” 和“系统设计师” 两种职称考试一样,这样割裂的结果导致,需求分析的结果无法直接进行设计编程,而能够进行编程运行的代码却扭曲需求,导致客户运行软件后才发现很多功能不是自己想要的,而且软件不能快速跟随需求变化。 DDD则打破了这种隔阂,提出了领域模型概念,统一了分析和设计编程,使得软件能够更灵活快速跟随需求变化。见下面DDD与传统CRUD或过程脚本或者面向数据表等在开发效率上比较: 服务器后端发展三个阶段: UI+DataBase的两层架构,这种面向数据库的架构(上图table module )没有灵活性。 UI+Service+DataBase的多层SOA架构,这种服务+表模型的架构易使服务变得囊肿,难于维护拓展,伸缩性能差,见这里讨论或Spring Web 应用的最大败笔. DDD+SOA的事件驱动的CQRS读写分离架构,应付复杂业务逻辑,以聚合模型替代数据表模型,以并发的事件驱动替代串联的消息驱动。真正实现以业务实体为核心的灵活拓展。 DDD革命性在于:领域模型准确反映了业务语言,而传统J2EE或Spring+Hibernate等事务性编程模型只关心数据,这些数据对象除了简单setter/getter方法外,没有任何业务方法,被比喻成失血模型,那么领域模型这种带有业务方法的充血模型到底好在哪里? 以比赛Match为案例,比赛有“开始”和“结束”等业务行为,但是传统经典的方式是将“开始”和“结束”行为放在比赛的服务Service中,而不是放在比赛对象本身之中。我们不能因为用了计算机,用了数据库,用了框架,业务模型反而被技术框架给绑架,就像人虽然是由母亲生的,但是人的吃喝拉撒母亲不能替代,更不能以母爱名义肢解人的正常职责行为,如果是这样,这个人就是被母爱绑架了。 提倡充血模型,实际就是让过去被肢解被黑crack的业务模型回归正常,当然这也会被一些先入为主或被洗过脑的程序员看成反而不正常,这更是极大可悲之处。看到领域模型代码,就看到业务需求,没有翻译没有转换,保证软件真正实现“拷贝不走样”。 DDD最大的好处是:接触到需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离。DDD让你首先考虑的是业务语言,而不是数据。重点不同导致编程世界观不同。 DDD是解决复杂中大型软件的一套行之有效方式,在国外已经成为主流。DDD认为很多原因造成软件的复杂性,我们不可能避免这些复杂性,能做的是对复杂的问题进行控制。而一个好的领域模型是控制复杂问题的关键。领域模型的价值在于提供一种通用的语言,使得领域专家和软件技术人员联系在一起,沟通无歧义。 DDD在软件生产流程中定位i如下图,DDD落地实现离不开in-memory缓存、 CQRS、 DCI、 EDA或Event Source几大大相关领域。 DDD基础:面向对象专题 2012年Eric Evans关于技术如何影响DDD的会话 聚合与一致性和有界上下文 from:http://www.jdon.com/ddd.html
View Details领域模型,你真的理解的了吗?
背景 UML比较难学,主要是其本身很复杂并且涉及到大量的概念名词。领域模型就是其中之一,网络上搜索到关于领域模型的知识应该是有两种,一种是来源于最初的传统软件开发过程,一种来源于领域驱动设计(DDD),这两者很容易混淆。以下是我对领域模型这个概念的一些理解。 1. 领域模型是什么? 理论派观点: Domain Model是一个商业建模范畴概念,即使一个企业不开发软件,也具备其业务模型; 所有同行企业,其业务模型必定有非常大的共性和内在的规律性。 由行业内的各个企业的业务模型再向上抽象出整个行业的业务模型,这个模型称之为“领域模型”。 实战派观点: 领域模型是一个分析模型,帮助系统分析人员、用户认识现实业务的工具,描述的是业务中涉及到的实体及其相互之间的关系,它是需求分析的产物,与问题域相关。 是需求分析人员与用户交流的有力工具,是彼此交流的语言。 理论派 领域模型是一种特殊的业务模型,它分析范围是整个行业,抽象出行业里共性和内在规律性的业务,比业务模型更加抽象,它不属于软件开发范畴的概念,与软件开发无关。 实战派 领域模型是一种分析模型,在软件开发过程分析阶段用于分析如何满足系统功能性需求,属于软件开发范畴,在UML中主要使用类图来描述领域模型。 业务模型是业务建模的输出物,业务建模研究的对象是公司或者组织,业务建模属于软件开发过程中的初始阶段。 软件开发过程:业务建模、需求、分析、设计。 在软件开发过程中我们接触到的领域模型属于实战派。 2. 领域模型作用 理论派 领域模型是一种特殊业务模型,作用都是: 帮助分析理解复杂业务领域问题。 行业内沟通、交流。 实战派 领域模型作用: 分析如何满足系统功能性需求。 指导项目后续的系统设计。 业务模型作用: 帮助系统需求人员理解客户公司业务,下一阶段做需求以业务模型为输入得到系统用例。 3. 领域模型与业务模型的区别 理论派 领域模型是一种特殊的业务模型,所以具备业务模型的所有特点,但是比业务模型更抽象、更通用。 实战派 产出阶段不同 业务模型是在软件开发过程中业务建模阶段产生,领域模型是在分析阶段产生。 作用不同 业务模型是系统需求人员理解客户公司业务的产物,下一阶段需求将以业务模型为输入得到系统需求。 领域模型是系统分析人员分析如何满足系统功能性需求的产物。下一阶段设计将以领域模型为输入。 “实战派”举例说明: 当接到项目,需要做一个酒店预订系统,首先进行业务建模,了解客户公司酒店管理的相关业务,这就会产出业务模型,此时业务模型里除了酒店预订这个业务环节还包括其他与酒店预订同层次的业务环节。 接下来将视线聚焦到酒店预订,改进已有流程得到酒店预订系统需求,即系统用例和需求规约。 接下来通过分析系统用例和需求规约,分析如何满足酒店管理系统功能性需求,从而得到领域模型。 "理论派"和“实战派”的领域模型是两个范畴的东西,若没有分清肯定会引起理解混乱。 4. 另一种“领域模型” – 领域驱动设计(Domain-Driven Design) 还有一种“领域模型”,它出自于Eric Evans的“Domain-Driven Design”简称DDD,也就是“领域驱动设计”,DDD是一套综合软件系统分析和设计的面向对象建模方法,所以要明确区分这两种领域模型。失血模型、贫血模型、充血模型这类概念都属于DDD范畴的“领域模型”。 4.1 两种领域模型的区别 本文中“领域模型”都代表领域驱动设计中的领域模型。 1. 解决的核心问题不同 正如前文所说的,领域模型是一个用于分析业务的分析模型,在实际项目中要解决的核心问题是: 如何满足待开发系统业务功能需求。 而“领域模型”是综合分析与设计的模型,要解决的核心问题是: 保证系统设计能满足项目多变的需求。 在传统的软件开发流程中,分析(系统需求分析)和设计(系统设计)被划分为两个阶段,分别对应国家“系统分析师” 和“系统设计师” 两种职称,这种割裂的结果导致,“系统设计师”要基于需求分析的结果做系统设计后才能进行编码,这中间会存在信息上的丢失或失真,并且实际过程中业务需求会变(可能是外界环境的变化或者对业务有更深的理解引起),就更容易引起系统设计与项目需求脱节。Eric Evans提出的DDD思想就是想解决这样问题。 2. 领域不同 领域模型是业务分析模型,分析的是系统功能性需求所出核心域的业务,软件系统只是实现业务的方式而非业务的一部分(提供IaaS服务的公司除外),不会考虑系统设计IT领域里问题。 “领域模型”是综合分析和设计的模型,涉及到系统设计,需要思考系统的边界,故该模型所分析设计的领域是综合了业务领域和IT领域。 以酒店预订系统为列,其业务描述如下 所有用户都可通过酒店订房管理系统查看酒店客房信息 用户如需预定需先注册成会员 以上涉及到两个对象:用户、会员。 若做业务分析,第一段描述中的“用户”可能就需要考虑,它可能是游客、咨询者的业务含义。 若要考虑系统设计,第一段描述中的“用户”可能就会忽略,即不在系统边界范围内。 3. 使用的阶段和岗位不同 领域模型是分析业务的分析模型,在实际项目中主要由系统分析师在分析阶段中使用。 DDD的“领域模型”是综合分析、设计的模型,在实际项目中横跨分析和设计两个阶段,岗位需要具备“系统分析师”和“系统设计师”的综合能力。 4. 包含的内容不同 领域模型主要内容: 业务实体 业务实体之间关系 “领域模型”主要内容: 业务实体 […]
View DetailsTFS 2015(Visual Studio Team Foundation Server)的下载和安装
微软现在所有Visual Studio相关的下载到www.visualstudio.com网站下载是非常方便的 下载地址: 下载ISO版本后,进行安装,由于10-20人的小团队,不需要SharePoint所以就安装【基本服务器】版本 点击下一步 勾选试用(请支持正版),点击下一步 由于本次主要数据库选择了阿里云的RDS,而阿里云的SQL Server只有2008 R2版本而且太贵,所以就选择安装一个Express版本 由于本次发布主要采用WebDeploy,而且以前也没使用过TFS的发布,不是很熟悉流程和原理,以后有时间再研究吧,暂时不勾选生产发布代理 选择下一步 下一步后检查配置 点击配置,然后开始安装了 安装的时候发现有在线下载SQL Server Express,难怪2015.2的安装包突然小了500多M,微软真是越来越与时俱进了啊 安装后默认端口是8080,因此需要在服务器上防火墙打开8080端口 由于本次服务是采用了域名进行访问并且使用了HTTPS,因此需要在配置中更改URL并到IIS中绑定相关域名 然后新建一个用户 新建一个项目集合 然后添加刚才的用户为管理员 这样,就可以在Visual Studio里面用刚才添加的用户连接到TFS服务器了 from:https://www.cnblogs.com/printhelloworld/p/5622186.html
View DetailsPOI、NPOI中用SXSSFWorkbook工作簿写入大量数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
string filePath = Server.MapPath("/test.xlsx"); FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite); XSSFWorkbook workbook1 = new XSSFWorkbook(); SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook1, 100); var first = sxssfWorkbook.CreateSheet("MySheet"); for (int i = 0; i < 1000000; i++) { var row = first.CreateRow(i); for (int j = 0; j < 11; j++) { if (i == 0) { // 首行 row.CreateCell(j).SetCellValue("column" + j); } else { // 数据 if (j == 0) { row.CreateCell(j).SetCellValue(i.ToString()); } else { row.CreateCell(j).SetCellValue(new Random().Next().ToString()); } } } } sxssfWorkbook.Write(fs); fs.Close(); fs.Dispose(); |
View Details
代码规范审查 – Sonar集成Visual Studio
开发人员可以使用Sonar的集成插件在开发阶段进行实时代码质量审核,在代码编写阶段分析出当前代码的质量及规范漏洞,并给出合理的修改建议。编写高质量、高维护性的代码变得更简单! VS集成Sonar之前 集成sonar之前,项目显示没有任何警告及错误。开发人员只能保证代码无错误,却无法分析出代码的隐患及不规范性。 Sonar集成 打开VS2015,通过工具(T)-> 扩展与更新(U)打开扩展安装包界面 在扩展和更新界面中左侧选择联机,通过安装包搜索框输入Sonar,在查询出的列表中选择SonarLint for Visual Stuido 2015, 点击下载进行安装 安装完毕之后,重启vs,将需要分析的项目加入到snoarlint实时分析列表中 此时sonar实时分析已经开始工作,在警告列表中出现了分析结果并包含错误原因分析 Sonar还包含了修改建议,通过双击警告项,将定位到具体有问题的代码段,将鼠标移至问题代码段,出现sonar的修改建议,跟随提示更改代码即可 from:http://www.cnblogs.com/jingridong/p/6593135.html
View Details代码规范审查 – Sonar分析项目
Sonar搭建成功之后,就可以通过简单的CMD指令进行项目分析,此篇主要介绍使用Sonar来分析.net项目。 扫描步骤: a. 打开CMD,切换到指定的项目根目录,和.sln同级目录即可(此处以一个wpf示例项目为例) b. 使用msbuild方式通过Sonar scanner扫描代码 CMD命令下运行:SonarQube.Scanner.MSBuild.exe begin /k:"project 1" /n:"Test WPF" /v:"1.0" 注 :SonarQube.Scanner.MSBuilder.exe找不到,运行的时候需要固定到Snoar\sonar-scanner-msbuild-2.2.0.24目录下进行运行 参数说明: /K:Key -对应projectKey即项目的唯一代码,如两套源代码使用同一个projectKey那扫描的结果将混在一起,所以一个项目需要有一个单独的projectKey /n:Name: 对应projectName即项目的名称 /v:Version -对应projectVersion即项目的版本 c. 通过msbuild编译项目 CMD命令下运行:MSBuild.exe /t:Rebuild 注 : MSBuild.exe需要加入到系统路径中,将C:\Program Files (x86)\MSBuild\14.0\Bin和C:\Program Files (x86)\MSBuild\14.0\Bin\amd64将入到系统路径中 d. Scanner分析扫描结果 CMD命令下运行:SonarQube.Scanner.MSBuild.exe end 注 : 1. 如果运行出现错误请检查sonar server的log,路径为Snoar\sonarqube-6.2\logs下的sonar.log,web.log和access.log。 2. 如果遇到需要检测比较大的项目,可能上传的mysql数据量会很大,会超出默认的mysql上传的最大值,此时需要设置mysql的max_allowed_packet。 e. 通过浏览器查看分析结果 浏览器中输入http://localhost:9000/dashboard/index/project_1 代码质量结果一目了然,下面就可以分析代码及分配指定人员进行修复 f. 分析问题(举例点击bugs展开所有bugs列表) 整个分析过程简单便捷,项目开发阶段可定期分析结果进行质量审查和把关,现在就去用到你的项目上吧! from:http://www.cnblogs.com/jingridong/p/6513884.html
View Details代码规范审查 -Sonar环境搭建
Sonar概述 Sonar 是一个用于代码质量管理的开放平台,可以进行代码质量的持续跟踪审查,支持的语言包含C#、java、PHP、C等。可以通过UI一睹Sonar的强大之处。 Sonar安装 Sonar是一个基于java的开源平台,环境安装包含JDK安装、数据库安装、Sonar Server安装、Sonar Runner安装。 一、JDK安装 下载java SDK ,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装java sdk,直接双击exe进行运行 验证java安装是否成功,打开命令行,运行java –version, 如果显示如下图,代表安装成功! 二、数据库安装 Sonar支持数据库类型:Sql server、MySQL、Oracle,此处以MySql为例 Mysql数据库下载地址:https://www.mysql.com/downloads/, 具体安装步骤省略可自行学习。 配置Sonar数据库(创建Sonar数据库、用户等) CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'sonar' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar’@’%' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar’@’localhost' IDENTIFIED BY 'sonar'; FLUSH PRIVILEGES; 三、Sonar server及scanner配置 下载sonar(只需下载解压,无需安装) 下载地址:https://www.sonarqube.org/downloads/ 下载sonar scanner(只需下载解压,无需安装) 下载地址:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner 添加snoar和snoar scanner到环境变量 添加SONAR_HOME、SONAR_RUNNER_HOME环境变量,并将SONAR_RUNNER_HOME加入PATH环境变量参考如下: SONAR_HOME:C:\sonar\sonarqube-6.2 SONAR_RUNNER_HOME:C:\sonar\Sonar-scanner-2.8 PATH:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SONAR_RUNNER_HOME%/bin;%MAVEN_HOME%\bin; 编辑sonar配置文件,修改如下: 编辑sonar\sonarqube-6.2\conf\sonar.properties文件,配置数据库设置,默认已经提供各类数据库的支持,这里使用mysql,因此取消mysql模块的注释,修改内容如下: 编辑SonarRunner配置文件,修改如下: 编辑Sonar-scanner-2.8\conf\conf\sonar-runner.properties文件,配置数据库设置,默认已经提供各类数据库的支持,这里使用mysql,因此取消mysql模块的注释,修改内容如下: 启动sonarQube服务,从sonarqube-6.2\bin\windows-x86-64目录下双击启动StartSonar.bat,启动成功显示如下: 访问http:\localhost:9000检测是否启动成功 安装中文包 […]
View Details代码规范审查 – 审查分析工具选型
大型项目产品功能庞大、参与人员多、周期较长,造成代码质量和可维护性要求较高。这需要在开发阶段加入定期的代码审核机制,可通过人工code review及代码走查工具来完成。人工Code Review耗时量大,对review人员的审查能力要求高,所以加入代码定期自动化审查就更适合,不过缺点是代码走查是做不到人工review的业务逻辑验证。 C#代码审查工具选型 对于c#代码审查的工具比较多,常见的有FXCop, StyleCop, Sonar。不同工具的优势及使用场景各有不同: FxCop: 微软的代码分析工具,以微软内部的.NET规范为参照,通过分析编译好的dll文件得到错误信息 StyleCop: 微软的代码分析工具,以微软内部的.NET规范为参照,通过代码静态扫描的方式分析源代码 Sonar: 代码质量管理平台,通过MSBuild方式分析代码的不规范及缺陷,并将分析结果直接显示在Web页面上 Fxcop和styleCop属于小工具类,安装方便,在开发阶段对代码的规范有很好的帮助,偏开发人员使用。Sonar属于分析平台类,需要单独搭建服务器进行分析的结果的保存及展示,偏测试及管理人员使用。所以项目进行过程中可搭配使用,开发人员可选择Fxcop或styleCop小工具进行代码的自我质量把控,项目管理人员可通过Sonar来进行质量管理的分析及分配。 接下来几篇将重点介绍Sonar的搭建和使用,对于FxCop和StyleCop使用比较简便,可自行学习使用。 from:http://www.cnblogs.com/jingridong/p/6489003.html
View Details