零成本建立的.NET小组开发平台
前言
说道.NET开发平台,首先想到的就是Visual Studio,建立.NET小组开发平台自然首推TFS。但其花费却也是相当昂贵的(当然在本国可以无视这些成本),近期的开发中接触到一些开源软件并读了《Agile .NET Development with Scrum》一书后发现通过使用一些免费开源软件也能建立起一个功能强大的小组开发平台。
所需软件
软件 | 版本 | 网址 | 说明 |
---|---|---|---|
Visual Studio | 2008/2010/2012 Express Edition | http://msdn.microsoft.com/en-US/vstudio/ | 既然免费就只能选Express Edition了,本国的可以直接Ultimate |
Nunit | 2.6.2 | http://www.nunit.org | 如果VS用了Ultimate,那这个就不用下了(IDE已经内置了) |
SpecFlow | 1.9.2 | http://specflow.org | |
Moq | 4.0.10827 | http://code.google.com/p/moq | |
Pivotal Tracker | http://www.pivotaltracker.com | ||
WatiN | 2.1 | http://watin.org | |
JMeter | 2.9 | http://jmeter.apache.org/ |
本文唯一需要JAVA运行时的工具,功能强大。 |
VisualSVN Server | 2.59 Standard Edition | http://www.visualsvn.com/server | |
TortoiseSVN | 1.7.12 | http://tortoisesvn.net/ | |
AnkhSVN | 2.4 | http://ankhsvn.open.collab.net/ | |
CruiseControl.NET | 1.6.7981.1 | http://ccnet.thoughtworks.com |
PS:以上网址截止到2013/5/22可用,记载的版本号都是最新版的版本号
单元测试
说单元测试的文章已经太多,Nunit 的使用帮助也随处可见,话说钱要花在刀刃上,字也要写在重点上:这里只写下类似 Moq 的模仿工具在单元测试中的使用。
首先列一下单元测试为什么需要这些模仿工具的原因:
- 当需要测试的模块有许多依赖项,而你想把测试范围限定在本模块的时候(你可以模拟出这些依赖项)
- 当你先开发/测试上层模块,而依赖的下层模块尚未完工(你可以模拟出下层模块提供的接口)
- 测试的机能与动态的环境变量相关时(你可以模拟出这些动态环境变量:返回固定值/可预知的值)
使用示范:
假设你新建了一个Product 类,其中有一个 GetPriceWithExtendedWarranty 方法,传入一个计算接口,返回一个合计值。
public class Product
{
public decimal Price { get; set; }
public decimal GetPriceWithExtendedWarranty (IWarrantyCalculator calculator)
{
return calculator.GetWarrantyPrice(Price) + Price;
}
} public interface IWarrantyCalculator
{
decimal GetWarrantyPrice(decimal price);
}
然后写一个该方法的测试:
[Test]
public void verify_WarrantyCalculator_Equals_15()
{
Product prod = new Product {Price = 10}; // 使用Moq建立一个模拟的IWarrantyCalculator
Mock<IWarrantyCalculator> fakeWarrantyCalculator = new Mock<IWarrantyCalculator>();
// 定义该虚拟对象的 GetWarrantyPrice 方法的具体实现(为了便于测试此处总是返回5)
fakeWarrantyCalculator.Setup(warranty => warranty.GetWarrantyPrice(prod.Price)).Returns(5); // 正式开始测试(把这个虚拟对象传递给Product的GetPriceWithExtendedWarranty方法)
decimal calculatedWarranty = prod.GetPriceWithExtendedWarranty(fakeWarrantyCalculator.Object); // 确认虚拟对象的GetWarrantyPrice方法被调用到了
fakeWarrantyCalculator.Verify(warranty => warranty.GetWarrantyPrice(prod.Price));
// 确认最终结果
Assert.AreEqual(calculatedWarranty, 15);
}
支持行为驱动开发(BDD)的单体测试
实现行为驱动开发之所以比较难,是难在把需求的交流转换成规范的,详细的源代码级的表述。这里提到的SpecFlow 能够一定程度上帮助我们把各个需求行为用自然化的语法表述出来,并生成对应场景的测试用例。
使用示范(假设你已安装好SpecFlow):
官网有图文并茂的示例,这里就偷个懒付个链接(http://www.specflow.org/specflownew/ProjectSetupGuide.html)。另外需要指出虽然示例中使用了NUnit,它还支持许多其他单体测试工具(包括 VS 内置的单体测试机能),支持的列表请参见连接(https://github.com/techtalk/SpecFlow/wiki/Unit-test-providers)。
如果你要使 SpecFlow 生成 VS 的单体测试项目,则需要建立一个配置文件(app.config),并设置以下内容。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="specFlow"
type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow"/>
</configSections>
<specFlow>
<unitTestProvider name="MsTest" />
</specFlow>
</configuration>
PS:与 SpecFlow 相关的所有设定项目可以参考这里(https://github.com/techtalk/SpecFlow/wiki/Configuration)
Scrum 管理平台
Scrum 开发中真个开发任务分成一个个Sprint,然后什么Product Backlog,Sprint Backlog,Story 以及个人的开发状态等等都需要管理起来并随时更新,这是一项艰巨的作业。
所以必须需要一个项目管理平台来简化这个工作,Pivotal Tracker 就是一个比较好的工具,它提供了以上所有内容的管理功能,并且能生成实时的图表。
(可惜我们小组并未采用该平台,我也没什么实际使用经验,所以有兴趣的自己搞一个研究下吧。)
Web 测试
1. 这里首先介绍的工具 WatiN 是一个用于 WEB 单元测试的工具,使用类似以下的代码就可以向 Web 服务器发出请求,并验证响应信息:
using NUnit.Framework;
using WatiN.Core;
namespace WatiN_Tests
{
public class RemoteWebSiteTest
{
[Test]
public void verify_Title()
{
using (var ie = new IE(http://www.csdn.net, true))
{
Assert.IsTrue(ie.Title.Contains("csdn"));
}
}
}
}
是否非常简单呢?由于该工具采用代码方式,所以测试可以自由定制,唯一的缺点是需要敲代码:(
2. 如果你像我一样懒,建议你把这个工具藏起来,然后下载 Jmeter 并介绍给你的项目负责人(耳语:让评价人员使用自动化工具测试我们的项目吧~~)
Jmeter 是个基于 JAVA 的免费测试软件,功能也是相当的强大而且能录制各种 WEB 请求,并且记录下每个请求获取到的结果以及响应时间,最近的版本已经能够通过多台测试机互联进行分布式测试。由于该工具相关的文档在csdn上已经很多,所以这里就也偷懒略过了,花些篇幅来介绍另一个实用工具 PAL:
3. 通常在测试的时候都会被要求使用性能分析器来记录服务器的负载状况,一大堆的性能指标着实让人摸不着头脑,怎么该?怎么该?这时你可以去http://pal.codeplex.com/ 下载 pal,该工具能分析性能分析器的日志文件(*.blg, *.csv)并生成图表,同时标记出有问题的指标。现在该工具还只能生成英文的报告,建议英语好的朋友联系下源作者,翻译下下,造福人类:)
源代码管理
源代码管理工具大致有cvs, svn, vss, git, tfs,如果是用VS开发当然首推tfs,前些时候微软也发觉 git 的强大潜力立刻在tfs中支持了git,所以即使你偏爱 git 依然可以使用 tfs 并享用 tfs 提供的强大协作功能。
vss 最新版也已经是 2005 的古董版,越来越为人不屑,不过如果你的项目不大,只牵涉局域网中几个人,版本更迭很少那也不妨一用。这里主要介绍下建立基于 SVN 的源代码管理环境:SVN是免费的,另一方面功能并不弱于 git。
- 首先你需要建立一个 SVN Server,这里推荐使用 VisualSVN Server,一方面它是免费的,另一方面安装完成后直接支持 http 方式的访问,非常傻瓜化。(TortoiseSVN 虽然也能建立 SVN Server,但默认只能通过共享目录来访问)。
- 客户端我们没有采用 VisualSVN,原因是它是收费的!!所以 TortoiseSVN 出场,它与 windows 中的资源管理器集成在一起,通过图标来表示各个文件的状态非常直观。
- 对于懒惰的开发者来说,SVN 缺少 IDE 的支持是不可容忍的,我们需要在 IDE 中就能看到项目文件的状态,并签入/签出。幸运的是我们有 AnkhSVN 的 VS 插件,你能在 IDE 中进行几乎所有 SVN 客户端操作。
持续化整合
持续化开发是当今开发流程的一个趋势:保证了签入代码的可编译性,随时能有可运行的程序...。微软的 tfs 已经内置该功能,我们没钱就只能用别的了: CruiseControl.NET。
博客源中一个详细描述怎样配制的系列文章:http://www.cnblogs.com/cnblogsfans/archive/2008/04/23/1167292.html
零成本建立的.NET小组开发平台的更多相关文章
- 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进
点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...
- ubuntu13.04下建立嵌入式开发平台
linux下建立嵌入式交叉开发平台,需要三个基本部分:编辑工具.交叉工具链以及平台相关库. 一.编辑工具: 一般Linux系统本身都带有编辑工具,比如VI.VIM.gedit等.这里记录的是第三方编辑 ...
- 零基础入门微信小程序开发
注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...
- 终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!
本文已经同步到微信公众号「极客起源」 . 现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面.移动.IOT.游戏.Web等平台的应用.这样对于开发人员是非常爽的.本文将介绍微软 ...
- .net erp(办公oa)开发平台架构概要说明之表单设计器
背景:搭建一个适合公司erp业务的开发平台. 架构概要图: 表单设计开发部署示例图 表单设计开发部署示例说明1)每个开发人员可以自己部署表单设计至本地一份(当然也可以共用一套开发环境,但是如 ...
- phongap、APICloud、ionic等app开发平台你都知道吗?
大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...
- 基于AgileEAS.NET企业应用开发平台的分布式解决方案
开篇 分布式应用 AgileEAS.NET基于Microsoft .Net构件技术而构建,Microsoft .Net最吸引人的莫过于分布式应用技术,基已经提供了XML WebService. .Ne ...
- 在线App开发平台——应用之星傻瓜式开发平台
随着智能手机及APP应用程序的普及,越来越多的企业和个人意识到APP的营销价值,出于对技术的敬畏,很多企业下意识认为开发APP是一个有难度的技术活,所以很多时候有心无力,也担心APP的后续的技术支持. ...
- 开发专题指南: JEECG高速微云开发平台前言
JEECG微云高速开发平台-前言 1. 前言 1.1. 技术背景 随着WEB UI 框架(EasyUI/Jquery UI/Ext/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也能够生成统 ...
随机推荐
- UISegmentedControl(分页控制器) AND UISlider(滑块控制器)
- (void)viewDidLoad { [super viewDidLoad]; UIImageView * animatedImageView = [[UIImageView alloc]ini ...
- springdata+redis配置详解
springdata设计初衷是位简化数据类型和数据的持久化存储,它并不局限是关系型数据库还是nosql数据库,都提供了简化的数据库连接,让数据获取变得更加的简单.所有这些的实现有统一的api提供. 本 ...
- 五毛的cocos2d-x学习笔记05-场景与场景动画,动作
场景切换函数: Director->getInstance()->replaceScene(Scene*); Director->getInstance()->runWithS ...
- 杭电oj find your present (2)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- 基础算法-查找:线性索引查找(II)
索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找. 索引查找的过程是: 1)首先根据给定的索引值K1,在索引表上查找出索引值等于K1的索引项,以确定对应子表在主表中的开始位置和长度. 2 ...
- 下载的firebug-lite压缩包的调用方法
把以下代码copy到地址栏按回车,等加载完毕之后(受网速限制,有时候等待会久一点,如果很久都无法加载,重试几次就ok了),就会显示firebug lite的窗口,这样不用更改页面任何东西,任何地方轻松 ...
- QT动画介绍(有例子可以下载)
所谓动画就是在一个时间段内的不同时间点有不同的状态,只要定义好这样状态,实现动画就是水到渠成的事情.当然做这件事情,最好用的就是状态机,点击这里查看Qt使用状态机实现动画效果实例. 不过,实现动画也有 ...
- spring Annotation 笔记2.1
使用注解替代xml 在前几章的笔记基础上添加使用注解的形式 1.配置applicationContext 添加context schema <?xml version="1.0&quo ...
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
解决方法是 设置xml里面字段的类型为:java.util.Date.加红部分. 1. beanl里面private Date ulLoginDate; 2.hibernate的xml里面是 < ...
- B站开源播放框架ijkplayer(iOS版)使用教程
最近在关注直播这块儿,开始时直接用ffmpeg写了一个,写得比较烂,卡顿很严重,后来听说了B站开源播放框架ijkplayer,于是就去试试看这是链接 ,一用之下果然不错,逢人便向人安利,可总是有部分同 ...