前言

说道.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小组开发平台的更多相关文章

  1. 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进

    点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache  DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...

  2. ubuntu13.04下建立嵌入式开发平台

    linux下建立嵌入式交叉开发平台,需要三个基本部分:编辑工具.交叉工具链以及平台相关库. 一.编辑工具: 一般Linux系统本身都带有编辑工具,比如VI.VIM.gedit等.这里记录的是第三方编辑 ...

  3. 零基础入门微信小程序开发

    注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...

  4. 终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!

      本文已经同步到微信公众号「极客起源」 . 现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面.移动.IOT.游戏.Web等平台的应用.这样对于开发人员是非常爽的.本文将介绍微软 ...

  5. .net erp(办公oa)开发平台架构概要说明之表单设计器

    背景:搭建一个适合公司erp业务的开发平台.   架构概要图: 表单设计开发部署示例图    表单设计开发部署示例说明1)每个开发人员可以自己部署表单设计至本地一份(当然也可以共用一套开发环境,但是如 ...

  6. phongap、APICloud、ionic等app开发平台你都知道吗?

    大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...

  7. 基于AgileEAS.NET企业应用开发平台的分布式解决方案

    开篇 分布式应用 AgileEAS.NET基于Microsoft .Net构件技术而构建,Microsoft .Net最吸引人的莫过于分布式应用技术,基已经提供了XML WebService. .Ne ...

  8. 在线App开发平台——应用之星傻瓜式开发平台

    随着智能手机及APP应用程序的普及,越来越多的企业和个人意识到APP的营销价值,出于对技术的敬畏,很多企业下意识认为开发APP是一个有难度的技术活,所以很多时候有心无力,也担心APP的后续的技术支持. ...

  9. 开发专题指南: JEECG高速微云开发平台前言

    JEECG微云高速开发平台-前言 1. 前言 1.1. 技术背景 随着WEB UI 框架(EasyUI/Jquery UI/Ext/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也能够生成统 ...

随机推荐

  1. CentOS, 高速设置ssh无password登录

    首先.保证能够ping通 然后运行例如以下命令, master登录slave master上面运行例如以下指令: 2.4 确认本机sshd的配置文件(root) $ vi/etc/ssh/sshd_c ...

  2. 【剑指offer】面试题43:n个骰子的点数

    第一种思路是,每一个骰子的点数从最小到最大,如果为1-6,那么全部的骰子从最小1開始,我们如果一种从左向右的排列,右边的最低,索引从最低開始,推断和的情况. def setTo1(dices, sta ...

  3. STL之string

    string构造函数,很多重载函数: #include <iostream> #include <string> using namespace std; int main() ...

  4. IIS MIME的 映射 网站有些类型的文件不能通过网页访问

    在iis中能够浏览所有扩展名的文件时,IIS MIME的 映射 您只能在故障排除过程中将通配符映射添加到 IIS MIME 映射中,以作为一种临时解决方案.确定缺少 MIME 类型是问题的原因后,请删 ...

  5. C#中文件管理的运用(Twelfth Day)

    又到了总结的时间了,今天在云和学院学习了文件管理的一些运用及复习昨天学的里氏转换.今天我就总结下昨天遗留下的问题以及今天所学的知识. 昨天遗留的问题 里氏转换(父类转子类) 例:在这里定义父类Peop ...

  6. Flash Builder常用快捷键

    红色为常用 Ctrl-Shift-O - Organize imports,去除无用的导入类 Ctrl+F11 - 运行(在浏览器浏览) F11 - 调试 Alt+/ - 内容辅助 Ctrl+Alt+ ...

  7. 【监控】使用probe对tomcat服务进行监控

    1.运行环境(博主本地) JDK:jdk1.6 Tomcat:tomcat7 OS:Windows10 2.下载 点击下载 3.安装运行 1.解压,将probe文件夹复制放进tomcat里面的weba ...

  8. HTML5 事件

    下面的表格列出了可插入 HTML 5 元素中以定义事件行为的标准事件属性. Window 事件属性 - Window Event Attributes 表单事件 - Form Events 键盘事件 ...

  9. Aptana Studio 3 官方汉化包汉化

    Babel Language Pack Update Site for Helios This URL is an Eclipse software repository:http://downloa ...

  10. django virtualenv

    1. virtualenv virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. ...