03 2014 档案

摘要:我们不是为了度量而度量,我们要知道度量体系是在什么时候,为谁产生价值,因此我们首先需要回答3个问题:1. 一个开发组织从来都不可能是独立存在的,其所服务的企业业务目标是什么?对应到对开发组织的期望是什么?2. 在开发过程中,谁是度量信息的使用者?他们使用度量信息的目的是为了作什么决策?3. 在梳理清楚上面两个问题之后,最后要回答的才是如何设计一个契合的指标体系来满足这些数据消费的需求?因此,度量体系是引导团队达成业务目标的一整套策略,包含了业务目标、决策场景和指标体系3个阶段。我们可以把软件产品的开发分成几个大的阶段:业务策略、项目定义、项目执行、维护支持。从业务部门期望的及开发组织相关的业务 阅读全文
posted @ 2014-03-29 21:31 Ribbon 阅读(647) 评论(0) 推荐(0)
摘要:自3.5版本以来,.NET以及微软的.NET语言开始支持表达式树。它们为这些语言的某个特定子集提供了eval形式的求值功能。考虑下面这个简单的Lambda表达式: Func add = (x, y) => x + y;可以知道,上述代码最后生成一个局部函数。Lambda表达式是需要编译的代码。在C#编译器运行时,把匿名函数转换为IL代码。为了建立一个表达式树,需要对上述语法稍作修改:Expression> addExpr = (x, y) => x + y;唯一的差别是保存Lambda表达式的变量的类型。这个差别指示C#编译器生成完全不同的代码。编译器不是把表达式编译成IL代 阅读全文
posted @ 2014-03-29 16:40 Ribbon 阅读(431) 评论(0) 推荐(1)
摘要:紧接着上一篇微软编程面试100题,这次想解决的是查找最小的K个元素,题目是:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。看到题目的时候我第一反应,这题很简单,使用任何方式的排序将数列按顺序存储,之后遍历需要的k个元素即可,于是自己动手很容易就完成了,但是后来在网络上发现很多人对这题的解决方式是用小根堆(MinHeap)或者大根堆(MaxHeap),这才意识到,其实出题人是醉翁之意不在酒,在乎复杂度的考虑也。先写用排序的方式完成题目的方式吧,不仅简单,不需要费太多脑子,重要的是,正好趁这时候复习下排序,这里用 阅读全文
posted @ 2014-03-29 13:57 Ribbon 阅读(1574) 评论(4) 推荐(2)
摘要:此题为July在CSDN发布的微软编程面试100题中的第一题,觉得蛮有趣的,今天也拿过来玩玩,July的代码用的是C++实现,可能因为有指针的原因吧,感觉看起来相对比较容易理解整个的实现过程,而我,试着用C#完成这样的功能。完整的题目如下:把二元查找树转变成排序的双向链表,要求不能创建任何新的结点,只调整指针的指向。 10 / \6 14/ \ / \4 8 12 16转换成双链表 4=6=8=10=12=14=16动手编码之前,先回顾下二叉查找树的特点:任意节点的左子树都要小于当前节点,右子树都要大于当前节点。查询某个值,需要的时间复杂度为O(lgN)。现在要求将其由树状结构改造... 阅读全文
posted @ 2014-03-27 12:59 Ribbon 阅读(986) 评论(1) 推荐(1)
摘要:一、功能测试 1、链接测试 链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。(自动化实现) 2、表单测试 当用户给Web应用系统管理员提交信息时,就需... 阅读全文
posted @ 2014-03-23 14:31 Ribbon 阅读(1402) 评论(0) 推荐(0)
摘要:树是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:1. 有且只有一个特定的称为根(root)的结点;2. 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2.....Tm,其中每一个集合本身又是一棵树,并且称为根的子树:树的定义其实就是递归方法,即在树的定义中还用到了树的概念。需要注意的是:1. n>0时根节点是唯一的,不可能存在多个根节点。2. m>0时,子树的个数没有限制,但它们一定是互不相交的。树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数成为结点的度。度为0的结点成为叶节点或终端节点;度不为0的结点成 阅读全文
posted @ 2014-03-22 17:00 Ribbon 阅读(329) 评论(0) 推荐(0)
摘要:风险源于不确定性,然而软件之所以为“软”,就是由其生命周期中所面对的变化和不确定所决定的,从另一个角度讲,不确定性又是与创新如影随形。精益软件开发的度量体系度量本身不是目的,是手段。在很多情况下,数据的生产者不是数据的使用者;数据的生产者没什么动力去分辨信息的价值,也不关心信息准确与否;数据的生产者关心的是数据是否会对自己带来惩罚或是收益,而不是数据跟软件开发的关系;在很多管理者的认识当中,度量的主要目的,是确保事情在掌控之中,为的是获得可靠性和安全感;相对于“更高效的开发软件”这样模糊的目标而言,很多一线人员对度量指标的使用其实更加一个简单、清晰、朴实——一旦开发除了问题,一个自我保护的理由 阅读全文
posted @ 2014-03-21 20:09 Ribbon 阅读(1172) 评论(0) 推荐(0)
摘要:如果一个程序设计语言能够用高阶函数解决问题,则意味着数据作用域问题已十分突出。当函数可以当成参数和返回值在函数之间进行传递时,编译器利用闭包扩展变量的作用域,以保证随时能得到所需要的数据。C#函数式程序设计之作用域在C#中,变量的作用域是严格确定的。其本质是所有代码生存在类的方法中、所有变量只生存于声明它们的模块中或者之后的代码中。变量的值是可变的,一个变量越是公开,带来的问题就越严重。一般的原则是,变量的值最好保持不变,或者在最小的作用域内保存其值。一个纯函数最好只使用在自己的模块中定义的变量值,不访问其作用域之外的任何变量。遗憾的是,有时我们无法把变量的值限制于函数的范围内。如果在程序的初 阅读全文
posted @ 2014-03-19 15:02 Ribbon 阅读(1225) 评论(2) 推荐(0)
摘要:Android本身是一套软件堆叠(Software Stack),或者成为软件叠层架构,叠层主要分成三层:操作系统、中间件和应用程序。Android构架1. Application 应用程序层:用Java语言编写的运行在虚拟机的程序用户直接使用的功能,其基本应用比如:电话、联系人、短信、邮件等,还有无数第三方应用。2. Application Framework 应用架构层:编写Google发布的核心应用程序的API框架开发应用程序使用的基础组件,相当于供应用程序调用的API、Java开发,包括:丰富的界面控件、Content Provider,数据存储组件,应用程序可以通过Content P 阅读全文
posted @ 2014-03-18 11:38 Ribbon 阅读(379) 评论(0) 推荐(0)
摘要:有效地处理数据时当今程序设计语言和框架的一个任务。.NET拥有一个精心构建的集合类系统,它利用迭代器的功能实现对数据的顺序访问。惰性枚举是一个迭代方法,其核心思想是只在需要的时候才去读取数据。这个思想保证了任何迭代算法都十分有效,同时又可以灵活地根据需要读取任意多的数据,而且不会造成过多的开销。C#函数式程序设计之枚举元素.NET集合类型的基础是一个名为IEnumberable的接口,以下就是这个接口的声明:public interface IEnumerable{ IEnumerator GetEnumerator();}实际上IEnumberable接口只允许程序员做一件事:查询类的... 阅读全文
posted @ 2014-03-17 15:11 Ribbon 阅读(1479) 评论(1) 推荐(0)
摘要:C#函数式程序设计之约束类型每当使用泛型类型时,可以通过where字句对泛型添加约束:static void OutputValue(T value) where T : ListItem{ Console.WriteLine("String list value: {0}", value.Value);}这个例子直观地声明了一个约束:类型T必须与ListItem相匹配。泛型类型约束T:X表示T可以是X、X的派生对象或X的实现(假如X是一个接口)。换言之,假如类型T的一个实例为t,则可以把它赋给一个变量:X x=t;约束可以使用具体的类型,但是在这些情形下,类型不可以是密封 阅读全文
posted @ 2014-03-17 11:56 Ribbon 阅读(1608) 评论(3) 推荐(3)
摘要:在面向对象语言中,我们可以编写一个元素为某个专用类型(可能需要为此创建一个ListElement)的List类,或者使用一个非常通用、允许添加任何类型元素的基类(在.NET中,首先想到的是System.Object)。这两种方法都有缺点。使用通用类型的基类时,很可能会把不相容的元素添加到列表中;如果使用元素为专用类型的列表,只是推迟此问题的发生,因为实际类型是在最后封装到这个类中。泛型提供了这个问题的解决方法。一般而言,一个泛型类型G可以应用于一个或多个其他类型——如O1、O2等——其思想是,G的实现不需要对Ox等类型知道很多。C#函数式程序设计之泛型函数任何方法在为方法签名添加一个或多个类型 阅读全文
posted @ 2014-03-16 11:52 Ribbon 阅读(1635) 评论(2) 推荐(3)
摘要:相信很多人都听说过函数式编程,提到函数式程序设计,脑海里涌现出来更多的是Lisp、Haskell等语言,而C#,似乎我们并不把它当成函数式语言,其实,函数式程序设计并不是只针对某个特定的程序设计语言,而C#,也正一步步使用函数式丰富自己的语言结构,帮助人们更好的实现期望的结果。函数式程序设计函数式程序设计把重点放在函数的应用上,函数式程序设计人员以函数为基本模块来建立新函数,这并不是说没有其他语言的成分,而是说函数是程序体系创建的主要构造。引用透明(Referential transparency)是函数式程序设计领域中的一个重要思想。一个引用透明的函数的返回值只取决于传递给它的参数的值。这正 阅读全文
posted @ 2014-03-15 22:13 Ribbon 阅读(2134) 评论(2) 推荐(1)
摘要:界面设计,是设计师的工作,UI测试,是测试人员的工作,UI测试究竟是测什么的?界面的排版布局?还是界面文字的书写错误?如果是排版布局,那么设计师该不会傻到设计一个看起来很不友好的界面,坐等测试人员发现,然后劈头盖脸的骂一顿吧;如果是文字的错误,难道测试人员的工作只是傻傻地翻着字典比对每一个文字或者单词么?作为设计师,如何才能设计出好的产品以及产品的界面,而作为一名测试人员,如何才能做好UI测试?本系列文章会从设计师的角度理解用户的目标来设计产品,同时,让UI测试人员明白自己的工作其实并非与设计完全无关。作为设计师,在设计用户界面时,你可能会竭尽全力设计出你认为非常有效的界面,你也可以遵循设计法 阅读全文
posted @ 2014-03-15 12:43 Ribbon 阅读(1543) 评论(0) 推荐(0)