The Fact of User Story

1. Preface

很多时候,当做事迷失于细节,就会忘记了当时做这件事情的本来目的,做项目也是一样。

2. What’s User Story

用户故事描述的是用户想要在某一场景下达到的目标,即业务价值,用来作为需求的提示和制订计划。

3. Why User Story

当用户看到或使用软件后,通常会产生新想法

经验告诉我们,软件需求是易变的,不确定的,我们不可能很好的预测到将来需求的变化。用户在看到或使用软件后通常会产生新的想法。这种需求的不可控是软件项目中最大的风险与痛点,也正是这种不确定性的存在使得我们必须关注用户需求的核心目标,并且频繁的,以最快的速度将已工作的软件与用户进行沟通,及时捕获用户的新想法或新需求。

用户故事就是在这样一种大的环境下随着迭代式轻量级开发方法的出现而出现。

Read More

Share Comments

Refactoring - 为重构正名

What’s Refactoring

“Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure.” - Martin Fowler

重构是在不改变软件外在功能的前提下,通过对软件内部代码及其结构的调整,改善代码质量,使程序设计架构更趋合理,从而提高软件代码的可读性,可维护性和可扩展性,降低代码的维护成本。

重构是对代码坏味道的清理,它包含着一系列已验证的重构手法,小步安全的进行。重构以测试为保障,每完成一小步,便运行测试,从而确保外部功能不受影响。

严格意义和安全的重构并不会破坏软件的外在功能或者引入新的缺陷,但是为什么在平常开发中会有很多针对重构的抱怨呢?很大一部分是因为那些所谓的“重构”实际上是重写。

Read More

Share Comments

Elmah & Elmah.MVC - a .net Error Logging Modules and Handlers

What’s Elmah

Elmah,Error Logging Modules and Hanlders,是一个基于.net平台的日志管理和处理的工具包,可以与Asp.net Web应用项目进行集成,包括Asp.net Web MVC和Web Api。

Elmah可以帮助记录系统中没有处理的异常,同时它也提供Api允许开发人员记录当前上下文中捕获的异常;它的一个颇具特色的优点是,Elmah提供一个查看日志的Web网页,包含详细的异常Call-Stack,方便进行调试诊断问题;系统支持人员可以通过Web服务本地或远程访问,也可以下载日志到本地进行详细诊断;

image

这里要注意的一个问题就是远程访问的安全问题,毕竟日志会暴露系统很多的实现细节,比如cookie,访问Url等,一旦日志泄露,将会使得系统存在被侵入的风险。

从实现技术讲,Elmah捕捉异常的方式主要基于 Asp.net Http Pipeline中IHttpModule和IHttpHandler模块对请求、响应、上下文以及异常事件的处理能力,依赖Web.config对其进行配置,所以可以很容易的与系统集成。

Elmah支持日志的多种存储,可以以文件方式(xml)进行存储,也可以存储于SqlServer, Oracle, SQLite,mySql等数据库中。同时Elmah还支持邮件,Rss feed等方式分发日志。

Read More

Share Comments

Grunt - 基于任务的Javascript构建工具

前言

软件项目的构建是针对项目的源代码,对其进行编译、代码质量检查、测试、打包等一系列流水线似的任务,使其成为一个可运行的软件产品的过程。而构建工具则是能够响应构建活动中一系列任务的自动化工具,它必须要简单灵活快速易扩展,从而帮助开发人员更快更高效的集成与发布。

回顾我们当前的开发语言,在.net世界里有MsBuild、NuGet和Nscaffold;在Ruby世界里有Rake、Gem和bundle; Java世界里有Ant, Maven, Ivy, Gradle,那么Javascript呢? Npm? 让我们来看一下Grunt.

Read More

Share Comments

Reflection in C#

Why Reflection

反射是一种计算机在运行时查看和修改对象内部结构与行为的一种能力,它是1982年由Brain Cantwell Smith博士提出的。反射语言的特性最早出现在汇编语言中,汇编语言可以针对指令进行编程,在运行时将指令作为数据对其进行修改,从而修改系统运行的行为。

反射是计算机语言非常有价值的一个特性,具体的说,反射可以获取运行时对象的数据、方法、构造以及行为,并对其进行操作。反射可以在运行时基于某些条件或映射关系加载特定类型,也可以应用于需要理解类型的定义来提供丰富功能的类库,有了它晚绑定成为可能,有了它元编程成为可能,有了它对象的序列化变得简单直接等等。它的存在使得程序设计更加的开放与灵活,减少了很多硬编码的场景,从而能够产生更具表达力,更整洁易维护的代码。

Refelction in C

在.net领域中反射应用在很多场景,比如:

Read More

Share Comments

JavaScript 严格模式

##1. 严格模式

‘Use Strict’ 特性是在2009年12月发布的ECMAScript 5中引入的,允许将一段程序或者方法加入严格语法检查的上下文中。其目地是通过使用严格模式,避免JavaScript中那些模糊杂乱,不安全的使用与错误,比如使用没有定义的变量,比如重复定义,比如修改只读属性,比如this访问全局变量等。这些编程中出现的错误以前会被Javascript Engine偷偷的吃掉,从而发生一些神奇的事情。而引入严格模式以后,这些错误则会通过异常,语法错误等方式被显示的暴露出来,从而帮助程序员更好的调试,从而加强Javascript使用规范与最佳实践,带来整洁的代码。同时也可以帮助Javascript Engine更好的进行优化。

##2. 浏览器支持

目前大多数主流的浏览器最新版都支持严格模式,包括IE10+,Opera12。CanIUse提供了不同浏览器版本对严格模式的支持信息,kangx’s strict mode support则可以验证当前浏览器对严格模式具体特性的支持。

Read More

Share Comments

让自己成为牛逼的软件技术人员

[这个是2012年在TWI Pecha Kucha和北航软件学院一级实践课上讲的,写下来分享给大家。]

工作多年,回头看看自己沉淀的那些实在是少之又少,往往容易被眼前项目的开发任务锁住,在语言的开发技巧千锤百炼,却无助于获得大的开发观与设计观。痛定思痛,总结了五点修炼要素,开始踏上了我的漫漫长路。

##1. 读书:一年“50”本

古人云,破万卷书,行千里路。读书自古以来就是一个获得知识的快速有效途径。在软件开发行业更是如此,技术不断发展变化,推陈出新,书籍就必然成为了一个学习技术的好工具。停下开发的脚步,看看大师们的著作,总能让沉浸于码字的你眼前一亮。那么现在市面上的书这么多,如何选择呢?公司最近推出了读书雷达,甚合我意。

Read More

Share Comments