Fire my passion

Anything with my most passion……
数据加载中……

2011年8月25日

CruiseControl.net - 找到的一些文档。分享出来

/Files/everx/Continuous_Integration_From_Theory_to_Practice_2nd_Ed.pdf

 

/Files/everx/Continuous_Integration_From_Theory_to_Practice.pdf 

posted @ 2011-08-25 07:13 everx 阅读(12) 评论(0) 编辑

2009年12月17日

【摘抄】回归测试(Regression Test)

回归测试(Regression Test)

问:我听说不少关于Regression Test的介绍,但是它到底是怎么“回归”法?回归到哪里去?我还是没搞懂。

答:Regress 的英语定义是:  return  to  a  worse  or  lessdeveloped state。是倒退、退化、退步的意思。

在软件项目中,如果一个模块或功能以前是正常工作的,但是在一个新的构建中出了问题,那这个模块就出现了一个“退步”(Regression),从正常工作的稳定状态退化到不正常工作的不稳定状态。

在一个模块的功能逐步完成的同时,与此功能有关的测试用例也同样在完善中。一旦有关的测试用例通过,我们就得到了此模块的功能基准(Baseline)。

假如,在3.1.5版本,模块A的测试用例125是通过的,但是测试人员发现在新的版本3.1.6,这个测试用例却失败了,这就是一个“倒退”。在新版本上运行所有已通过的测试用例以验证有没有“退化”情况发生,这个过程就是一个“Regression Test”。如果这样的“倒退”是由于模块的功能发生了正常变化(由于设计变更的原因)引起的,那么测试用例的基准就要修改,以便和新的功能保持一致。

针对一个Bug Fix(拖鞋),我们也要作Regression Test。

(1)验证新的代码的确把缺陷改正了。

(2)同时要验证新的代码没有把模块的现有功能破坏,没有Regression。

所以对于“回归测试”中的“回归”,我们可以理解为“回归到以前不正常的状态”。

回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。在微软的实践中,在一个项目的最后稳定阶段,所有人都要参加测试,以验证所有已经修复过的 Bug 的确得到了修复,并且没有在最后一个版本中“复发”,这是一个大规模的、全面的“回归测试”。

posted @ 2009-12-17 14:26 everx 阅读(123) 评论(0) 编辑

2009年10月23日

那就来说说ASP.NET MVC中的Routing吧

基本上,之前已经把MVC简要的学了一遍。现在就来深入看一下各个模块了。

ASP.NET MVC中的Routing是单独的一个模块,在整个ASP.NET架构中起到了很大的作用,而且应用越来越广泛。MVC就是其中之一。现在我们做的网站也好,应用程序也好,都是基于WebForm的。所以一般来说URL就反映了整个网站的结构。然后所有的参数传递一般就是通过QueryString或者Session,因为后者需要消耗服务器内存,如果不及时dispose的话,会给以后带来不少的麻烦,比如数据过期等等。结果就是Url的长度越来越大,让用户很难通过URL来知道现在究竟是在做什么,连接的意思代表什么。现在有了这个Routing,也就解决了这个问题。(其实,在Routing出现之前也有不少针对这个问题的的结局方案,比如之前的UrlRewriting什么的,关于比较他们的优缺点,就放在后面的日子里再去深入研究了。)

要构造一个好的Routing是需要去分析系统要呈现给用户的功能的。然后,在总结好应用程序功能的基础上,再加上一些原则,就可以构建出来了。

既然说到了构造Routing的原则,那我就把我的想法总结一下:

  1. 尽量保持URL短小精悍,如果最后构造出来的Url比WebForm时期还要冗长,那还不如不搞。
  2. 让用户通过Url就可以看出现在浏览的或者操作的意图,即让Url能够保持自我解释。
  3. 尽量不要把一些重要的ID显示在Url里面,尤其是那些整型变量的主键
  4. 还有呢,就是避免出现空格。这个是对搜索引擎的优化,更好的让你的Url出现在搜索引擎中。 

在我们用VS的模板创建一个MVC网站后,在Globle.asax.cs文件里会有这么几行代码:

public class MvcApplication : System.Web.HttpApplication
    {
        
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                
"Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        
protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }

简要说一下。RouteTable.Routes是一个静态的RouteCollection类型对象,负责收集注册的Route。然后,在RegisterRoutes方法中,IgnoreRoute和MapRoute都是扩展方法。第一个是注册忽略的路径,后面那个是注册将要处理的路径。

在这里需要说明的是,注册Route的顺序决定了Route生效的优先级。越先注册优先级就越高。所以,应该把复杂的匹配模式放在前面,比较笼统的放在后面。

总而言之,Routing是MVC的入口,把它的原理掌握了有助于以后扩展我们的程序能更加顺手。

posted @ 2009-10-23 15:54 everx 阅读(54) 评论(0) 编辑

2009年10月22日

ASP.NET MVC - View

 首先,我要说的是,ASP.NET MVC的这个View并不是简单的Page而已,它实现了接口IView

public interface IView {
        
void Render(ViewContext viewContext, TextWriter writer);
    }

在ASP.NET MVC中,自带了一个默认的View那就是WebFormView

然后呢,在web请求到达controller,并且由controller返回ViewResult之后的操作,大概是这个样子的:

  1. ViewResult本身执行 ExecuteResult方法。这个方法是ActionResult接口的方法,ViewResult是实现这个接口的一个类。
  2. 找到相应的View
  3. 构造ViewContext
  4. Render
  5. 创建ViewPage
  6. 设置Layout位置

ViewPage(System.Web.Mvc.ViewPage)和之前的WebPage(System.Web.UI.Page)主要的区别是,的唯一的也是最重要的功能就是呈现页面。摒弃了WebPage的ViewState,PageEvents,Control层级关系。从代码看,ViewPage实现了IView接口,而这个接口仅有一个方法,那就是Render。可见其功能已经很确定了。

ViewEngine在MVC中是用来确定View的。也就是说,它负责找到特定的视图。默认的那个ViewEngine是WebFormViewEngine。如果呢,我们想要换一个视图,不想继续用aspx页面了,那么就需要重新构造一个ViewEngine,并注册到系统里。

Layout就相当于是MasterPage,不同的是,它没有了PostBack机制和表单提交机制。也就是说,它只能够为ViewPage布局。

ViewData之前已经说过一些了,View用它来呈现页面。不过,在这里要说的就是,一个View就只是对应一个ViewData,如果在一个View中有其他的PartialView,那么它们之间的ViewData是不共享的,虽然默认情况下内容是相同的。

View还有一些其他的知识,比如:BindAttribute,ModelState 等等。以后再研究了,感觉第一次遇到这么多东西,总是有一点混乱。

继续了……

posted @ 2009-10-22 17:00 everx 阅读(50) 评论(0) 编辑

2009年10月20日

ASP.NET MVC - Controller(part Ⅱ)

接着上次说的,这次继续说一下Controller的其他功能。

首先是IModelBinder接口。它只有一个方法:

public interface IModelBinder {
        
object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);
    }

 这个方法可以将用户输入(Form,Route,Querystring)转换成我们自定义的类。ASP.NET MVC自身自带了一个Model Binder:DefaultModelBinder。它可以将输入值转换成.net 的原生类型,甚至是IList类型。但是如果我们需要将输入转换成自定义的类型的话,就需要进行扩展了。具体的用法,现在我还不是很清楚,还需要继续探索。但是可以知道的是,一旦自定义了一个Model Binder,就必须在Globle.asax中进行注册才行。

然后,就是说一下Controller的filter。filter的功能就是在ASP.NET MVC的请求过程中,插入自己的逻辑代码。其中,有4个接口是用于filter功能的:IActionFilter、IResultFilter、IAuthorizationFilter、IExceptionFilter。

public interface IActionFilter {
        
void OnActionExecuting(ActionExecutingContext filterContext);
        
void OnActionExecuted(ActionExecutedContext filterContext);
    }
public interface IAuthorizationFilter {
        
void OnAuthorization(AuthorizationContext filterContext);
    }
public interface IResultFilter {
        
void OnResultExecuting(ResultExecutingContext filterContext);
        
void OnResultExecuted(ResultExecutedContext filterContext);
    }
public interface IExceptionFilter {
        
void OnException(ExceptionContext filterContext);
    }

 可以看出,这些方法有一点像是WEBFORM中熟悉的那些页面生命周期事件。这些方法的执行顺序大概是:OnAuthorization -> OnActionExecuting -> OnActionExecuted -> OnResultExecuting -> OnResultExecuted -> OnException。当然最后那个OnException是不定的,因为一旦出现异常,程序就会立即执行这个方法。

Controller类,已经实现了这几个接口,所以我们就可以通过覆盖实现这几个方法来插入自定义逻辑。但是,还有一种更好的方法,就是使用FilterAttrbute,来插入自定义逻辑。这样做有一个很大的好处,那就是,我们可以针对某个Action进行逻辑操作,而不必操作整个Controller的所有Action。MVC默认给我们提供了几个Attribute。我们也可以编写我们自己的Attribute。写法大概就是,1.继承FilterAttribute 2.实现相应的接口 (上面所说的那4个)。

 关于Controller就说到这了,还有很多需要继续深入的地方。后面在慢慢补充吧。

posted @ 2009-10-20 14:00 everx 阅读(90) 评论(0) 编辑

2009年10月15日

ASP.NET MVC - Controller(part Ⅰ)

摘要: Model已经简单的看过了,在深入下去可能要讨论如何针对领域建模还有相关的设计模式等等,不是一两句能说清楚的。那么,这次就把眼光全部聚焦在Controller上吧。首先,要了解Controller的作用。如果没有Controller的话呢,所有的请求到要被导向View里面去,无形中使得View变得臃肿且不好维护,像是之前的WebForm。所以,Controller就是为了把处理请求这部分功能挪出来...阅读全文

posted @ 2009-10-15 15:11 everx 阅读(58) 评论(0) 编辑

2009年10月14日

ASP.NET MVC - Model

摘要: 在MVC模式当中,Model的意义最为深远,最重要。对于任何的程序或是软件来讲,如果没有一个好的Model,甚至是没有Model,那就没有任何的用处了。简而言之,Model就是软件的核心。在ASP.NET MVC中,它的这个Model不仅仅就是广义上的那个域模型,有时,它是基于域模型的变体,即表现模型(为了视图的显示而产生的模型)。域模型是指,一些对象,为了解决某个现实世界的问题,按照逻辑关系组织...阅读全文

posted @ 2009-10-14 15:35 everx 阅读(37) 评论(0) 编辑

2009年9月29日

学一下ASP.NET MVC

摘要: 这几天考虑了一下自己的发展方向,所以准备静下心来好好学点东西。那么就从asp.net mvc开始吧!首先,学这个mvc应该了解一下mvc的概念,这个网上几乎遍地都是。所以也就不罗嗦了。简而言之,就是Model-View-Controller的缩写。Web开发从一开始的CGI脚本,到微软的ASP,再到ASP.NET, 再至目前为止的MVC经历了不少的改革。从WebForm发展到MVC也算是大势所趋。...阅读全文

posted @ 2009-09-29 09:35 everx 阅读(22) 评论(0) 编辑

2008年3月19日

C# 3.0的新特性

摘要: 本地类型推断、Lambda表达式、扩展方法、对象初始化器、匿名类、查询表达式阅读全文

posted @ 2008-03-19 11:27 everx 阅读(142) 评论(0) 编辑

2008年3月7日

jQuery学习笔记(八)

摘要: jQuery中的ajax阅读全文

posted @ 2008-03-07 09:32 everx 阅读(540) 评论(0) 编辑