摘要:http://www.oschina.net/question/12_44624http://www.oschina.net/question/12_44624介绍本文解释应用程序中的错误和调试日志的最佳实践。应用日志是一个非常重要的“工具”用来帮你查明具问题。如果有一个基础架构用来记录应用中的日志和事件,那么调试和问题的解决就会变得很简单。在开始文章之前,我们要介绍两个相关的工具:Logstash-http://www.oschina.net/p/logstashGraylog2-http://www.oschina.net/p/graylog2不同的日志含义日志 Logging 可以代表不
阅读全文
摘要:http://blog.sina.com.cn/s/blog_5effa8f10100di68.html项目经理被问到最多的问题就是,“这个项目什么时候才能完成?”被问的时候,可能项目才定下来,仅仅知道大概的功能模块,非功能性需求还模糊不清,甚至团队成员都没到位。但是上级、销售、客户急切地要知道,这个项目什么时候才能完成?被问的时候,也可能项目已临近结束,或者说临近当初计划的交付日期。然而待完成的功能还有一堆,测试出来的bug有一大堆,客户又提出了新的需求,团队正有人要离职…。但是上级、销售、客户非常急切地要知道,这个项目到底什么时候才能完成?这还不算糟糕。更头疼的问题是:“再有三周,项目应该
阅读全文
摘要:首先,在scrum里,开发任务被分成很多用户故事,每个用户故事需要根据实现的难易分配点数,于是,一个团队聚集在白板前开始估计故事的点数(点数是一个斐波那契数:1,2,3,5,8...)每个人从一堆故事里挑出他(她)觉得点数最小(最容易)的故事贴在白板上,下一个人继续,直到一轮结束或者没有更多的用户故事,接下来,团队会对白板上已经排列的故事进行调整,例如故事X,有人会觉得简单。有人觉得难,这个过程需要充分交流。大家必须说出自己觉得难或者简单的原因。在交流中达成共识(可能觉得难的人发现没那么难,又或者觉得简单的人发现没那么简单)现在,团队挑一个最简单的故事进行开发,假设一个点数为1的用户故事开发了
阅读全文
摘要:和朋友产生了一个争论,就是以结果为导向到底对不对,我的第一反应是不对的,因为我觉得这意味着最有权力的人与要做的事情进行了一个剥离,让具体执行人承担风险,而这个最权力的就不需要(不做事的人是不会犯错的,而做的越多的人可能错的也越多,我觉得最有权力的人应该参与到这个事情的决策中,以他的权力为做错的事情进行挽回,而不仅仅是问责)朋友举了个例子说明他的观点,如果他是老板而且快要饿死了,派两个人出去找食物,B找到了食物那么B是有结果的,A没有找到所以A是没有结果的,所以B对他更有价值。这个例子或许有些道理,但是不能说服我,我基于这个例子进行了反驳,假定这个老板不是快饿死,而是得了一种病,只能吃干净的食物
阅读全文
摘要:http://wmcxy.iteye.com/blog/1450209BitNami 提供redmine的一键安装程序,简单、易用、方便1、下载地址下载地址:http://bitnami.org/files/stacks/redmine/1.3.1-1/bitnami-redmine-1.3.1-1-windows-installer.exe也可以到此地址查看:http://bitnami.org/stack/redmine2、安装3、注意事项第五步,创建管理员账号的时候,需要将用户名称和密码记录下来,此用户即为redmine安装好后的管理员账号;4、安装成功的界面a、打开浏览器,直接输入ht
阅读全文
摘要:<?xml version="1.0"?><project name="WebApp" default="run_test" basedir="."> <!--编译方式--> <property name="DEBUG" value="true" /> <!--目录与文件配置--> <property name="SRC" value="./trunk" /> &l
阅读全文
摘要:NAnt是.NET平台的工具,类似于C语言编译工具make,不过又不仅仅是make的功能,它可以下载源码,重建数据库,编译程序,运行测试,发送邮件(报告测试结果)因此它是持续集成环境里重要的工具。使用:nant首先一个命令行程序,他和make一样解析makefile类似,他解析*.build文件,不同的是build文件是一个XML格式的脚本,并且XML节点和属性有完善仔细的定义,这个可以看它的doc文档(跟随软件一起下载下来了)例如<csc />就是告诉nant执行编译命令,下面是我第一个例子,虽然还是不完善,但是是我一个阶段性成果default.build<?xml ver
阅读全文
摘要:因为某个新增需求,我修改了一坨代码,不长,就那么4,5行,在用户注册环节里,作为负责的程序员不是写出来就完事,还需要验证修改的代码是正确的,可问题是为了验证这几行代码的正确性,我至少要保证他们被执行过一次,要求没有异常,并且它们要做的事情正确的做了,OK。为了触发这几行代码,那可费死劲,因为并不是只要用户注册这几行代码就可以被执行到的,如果我们把代码的执行流程看作一棵树,每个if语句都会让这棵树长出一个分支出来,那么显然,逻辑越复杂,树的分支越多,不幸的是,我要测试的代码处于一个不经常执行到的分支上,在这块代码前面有许多if语句挡住了它,那么我要精确的准备测试条件,保证代码在执行过程中不会走到
阅读全文
摘要:svn merge -r100:HEAD http://branches/branch1 svn ci -m '合并分支'描述问题的前提:分支和主干公用一个版本号我们每次必须掐一个版本号,例子里的100含义是,在版本100上,分支的代码和主干的代码完全一摸一样(100可能是分支创建版本号,也可能是上次合并后的版本号),因此从这个版本到最新版本的变化不会引起树冲突,如早于100就可能产生树冲突,例如合并完之后版本号120,现在分支继续开发,删除掉文件test.py,合并之后分支版本122,继续开发,再次合并,-r 110:HEAD 这个时候就会报树错误,因为主干上已经没有tset
阅读全文
摘要:应用场景:本地存在两个工作拷贝,一个是主干,一个是分支,我们一直在分支上进行开发,开发完毕以后希望合并到主干上,我们查出分支创建版本号,用创建版本和当前最新版本进行diff,将diff的结果和主干代码进行合并。因此svn merge命令必须体现出来:svn merge -r 100:HEAD http://127.0.0.1/svn/branches/RB1 ~/workspace/trunk-r 100:HEAD 说明分支的创建版本和最新版本进行比较http://127.0.0.1/svn/branches/RB1分支的URL~/workspace/trunk主干代码在本地的工作拷贝地址,如
阅读全文
摘要:http://blog.163.com/lgh_2002/blog/static/4401752620106202710487/Subversion的分支通常用于在主干程序之外,对程序进行修改。这样 可以在不扰乱主干程序进行的开发、测试、发布流程之外,尝试一下新功能的研究、修改。如果觉得新功能没问题,可以将分支合并到主干程序中。合并前,需要将分支提交(Commit),由此看来,合并操作好象是在服务端和本地客户端同时进行的操作。合并时,要从主干的working copy的右键菜单开始,"From" Url是合并的目的地,需选择主干的url,"To"是合并的
阅读全文
摘要:#include <assert.h>#include <stdio.h>#include <stdlib.h>/*作者:猪头被测模块功能:编写一个累加整数数组元素的函数,并把累加结果作为函数返回值返回被测模块参数:整数指针指向数组第一个元素;整数表示数组元素个数 参数异常:如果指针为空则应该返回-1 ,表示传入者参数有错误 *//*被测模块*/int sum(int *array,int length){ int index = 0; int sum = 0; if (array == NULL) { return sum; /*我故意埋下...
阅读全文
摘要:http://kb.cnblogs.com/page/113988/ 为了吸引大家的注意力,我想说:“特性分支是邪恶的化身”。 自2008年起,Mercurial (最近是Git)就成了我日常工作的工具,而且我喜欢使用分布式版本控制系统。正如《持续交付》一书中讨论的那样(英文版第393页和394页),有很多理由说明,与之前已存在的同类工具相比,DVCS代表了一种巨大的转变。但正如所有强大的工具一样,你会有很多种方法来使用它们,但并不是所有的方法都是好的。这里所有的讨论不是想说DVCS不好:使用特性分支和使用DVCS完全是正交的。而且,我认为,DVCS的支持者用这种工具的功能分支来推销DVCS.
阅读全文