‘项目管理’ 分类的存档

[转载]InfoQ: 程序员开发大型应用程序的技巧. 假如你是一名Java开发者,正在开发和维护包含2000个类并使用了很多框架的应用程序。你要如何理解这些代码呢?在典型的Java企业项目小组 中,大部分能够帮你的高级工程师看起来都很忙,文档也很少。你需要尽快交付成果,并向项目组证明自己的能力。你会如何处理这种状况呢?这篇文章为开始开发 新项目的Java开发者提供了一些建议。 相关厂商内容 Visual Studio 11 Beta 和 .NET Framework 4.5 Beta版免费下载中! 1. 不要试图一下子搞懂整个项目 仔细考虑一下,为什么你会想要先理解项目代码呢?大部分情况是有人要求你修复一个bug,或者增强系统已有功能。你要做的第一件事情不是理解整个项目的架构。当对项目进行维护时,这样做(理解整个项目架构)可能会对你造成巨大的压力。 即便是有10年编程经验的Java开发者,也无法理解项目的核心工作机制,尽管他们可能已经在这个项目工作超过一年(假设他们并非最初的开发人员)。比如,对于认证机制或事务管理机制还是缺乏确切的认识。 他们是怎么做的呢?他们对于自己负责的部分非常了解,并且能够交付价值给小组。每天的交付价值远比了解一些以后还不确定有没有的东西重要的多。 2. 关注于尽快交付价值 那我是要打消你对于理解项目架构的热情吗?完全不是。我只是要求你尽早地交付价值,一旦你开始一个项目,搭建了开发环境,你就不应该花一两周时间才 交付内容,无论它的规模大小如何。假如你是一位有经验的程序员,却两周都没有任何交付,你的经理怎么会知道你是真的在工作,还是在看新闻呢?。 所以交付能够将事情变得简单。不要认为在做有价值的交付前,你必须理解整个项目。这是完全错误的。加一段JavaScript的验证代码对业务就很有价值,经理能够通过你的交付对你更加信任。这样能够向上级领导证明你的贡献以及员工价值。 日复一日,在不断修复bug及增强功能之后,你就能够慢慢开始理解项目架构。不要低估对系统方方面面理解时需要花费的时间。花3到4天理解认证机 制,2到3天理解事务管理。这些都是依靠之前的相似项目的经历,但关键还是要花时间才能透彻的理解。要在日常工作中挤出时间,不要向经理要求特定的时间来 做这些。 找找项目是否有一些有效维护的单元测试用例。有效的单元测试用例是理解大型项目代码很好的途径。单元测试能够帮助你理解代码片段,包括一个单元的外部接口(单元如何被调用以及返回内容)及其内部实现(调试单元测试比调试整个实际用例简单许多)。 你如果能够很好的理解一些内容,那么就写些笔记,或者画些类图、时序图、数据模型图等,以便你或日后其他的开发者可以进行维护。 3. 维护大型项目所必须的技能 你能从事当前的工作,必然已经具有良好的java技术。我们来谈谈能够让你在新项目中良好表现的其他技能。大部分时间里,你在项目中的任务是修复bug和增强功能。 有两项很重要的技能能够在你维护大型项目代码起到帮助。 3.1 能够迅速发现需要的类 在任何维护活动中,无论是修复bug或增强功能,第一件事情就是识别出当前修复或增强的用例中调用的类。当你定位到需要修复或增强的类/方法,就已经完工了一半。 3.2 能够分析变更的影响 当你在完成必要的修改或增强工作后,最重要的就是要确认你的修改没有破坏代码的其他部分。你要用你的java技术及对其他框架的理解找出变更可能影响的部分。下面两个简单的例子详细描述了最后提及的情况:  当类A的equals()方法变更后,调用保存A实例的List的contains()方法时就会受到影响。若Java知识不够,就很难考虑到这样的影响。  在web项目中,我们假设“user id”保存在session中。新加入的程序员可能在“user id”中加入一些信息来修复bug,但是却不知道那会影响到 与“user id”关联的用例。 因此,既要深入了解Java语言,又要深入了解你在应用中使用的框架,这样才能分析出一个改变的影响。 当你提高了如上两个技能,尽管你对项目不是非常了解,但大部分的维护任务会变得简单很多。如果你想要修复一个bug,就会定位并修复这个bug,并且保证变更不会破坏项目的其他部分。如果你想要增强或加入特性,基本上你只需要模仿现有的特性,使用类似的设计。 在一个在线银行项目中,为什么“查看账户摘要”和“查看交易历史”的设计要有巨大的差别呢?如果你理解了“查看账户摘要”的设计,完全可以模仿开发出“查看交易历史”的功能。 就修复bug和增强来说,你不必完全理解所有2000个类的工作内容和代码驱动系统运行的原理。只要有上面的技能,你就能很快定位需要修改的代码,使用良好的java和框架技能修复,保证变更不会破坏项目的其他部分,然后交付,尽管你可能只知道一小部分项目的设计。 4. 使用工具找到所需变更内容以及变更产生的影响 继续我们尽快交付的主题,你应该寻找工具作为辅助,只需要对项目又很少理解,就能帮助你尽快实施交付。 4.1 迅速发现所需变更内容的工具 [...]

2012年4月24日16:28 评论关闭

[转载]代码的坏味道 – david++ – 博客园. 代码坏味道:是指在代码之中潜在问题的警示信号。并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并作出相应的修改。 1. 重复的代码 如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。 同一个class内的两个函数中含有重复的代码段 两个兄弟class的成员函数中含有重复的代码段 两个毫不相关的class内出现重复的代码段 注意:重复的代码是多数潜在BUG的温床! 2. 过长的函数 拥有短函数的对象会活的比较好、比较长。 程序愈长就愈难理解 函数过长阅读起来也不方便 小函数的价值:解释能力、共享能力、选择能力 原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立的函数中。记着,起个好名字! 3.  过大类 如果想利用单一类做太多事情,其内往往就会出现太多的成员变量。 提取完成同一任务的相关变量到一个新的类 干太多事情的类,可以考虑把责任委托给其他类 注意:一个类如果拥有太多的代码,也是代码重复、混乱、死亡的绝佳滋生地点。 4.  过长的参数列表 太长的参数列表难以理解,太多参数会造成前后不一致、不易使用,而且你需要更多数据时,就不得不修改它。 原则:参数不超过3个! 5. 发散式变化 我们希望软件能够更容易被修改。一旦需要修改,我们希望能够跳到系统的某一点,只在该处做修改。如果不能做到这点,你就嗅出“坏味道:发散式变化”或“坏味道:霰弹式修改”。 发散式变化:一个类受多种变化的影响 数据库新加一个字段,同时修改三个函数:Load、Insert、Update 新加一个角色二进制,同时修改四处 … 原则:针对某一外界变化的所有相应修改,都只应该发生在单一类中 6. 霰弹式修改 如果每遇到某种变化,你都必须在许多不同的类内做出许多小修改以响应之。如果需要修改的代码散布四处,你不但难以找到它们,也很容易忘记某个重要的修改。 霰弹式修改:一种变化引起多个类相应的修改 7. 依恋情节 函数对某个类的兴趣高过对自己所处类的兴趣,就会产生对这个类的依恋情节,造成紧耦合。 原则:判断哪个类拥有最多被此函数使用的数据,然后将这个函数和那些数据摆在一起。 原则:将总是变化的东西放在一块。 8. 数据泥团 有些数据项,喜欢成群结队地待在一块。那就把它们绑起来放在一个新的类里面。这样就可以: 缩短参数列表 简化函数调用 9. 基本型别偏执 代码中有很多基本数据类型的数据。 原则:如果看到一些基本类型数据,尝试定义一种新的数据类型,符合它当前所代表的对象类型。 10. switch惊悚现身 面向对象程序的一个最明显特征就是:少用switch语句。从本质上说,switch语句的问题在于重复。 原则:看到switch你就应该考虑使用多态来替换它。 11. 冗赘类 你所创建的每一个类,都得有人去理解它、维护它,但一个类没有存在的必要时候,就让这个类庄严扑义吧! 原则:如果一个类的所得不值其身价,它就应该消失。 [...]

2012年4月24日10:03 评论关闭

[转载]构建高性能.NET应用之配置高可用IIS服务器-第三篇 IIS中三个核心组件的讲解(上) – 小洋(燕洋天) – 博客园. 系列文章: 构建高性能.NET应用之配置高可用IIS服务器-第一篇:IIS必须掌握的知识 构建高性能.NET应用之配置高可用IIS服务器-第二篇 IIS请求处理模型          今天的文章的比较的容易,主要讲述IIS中三个比较重要的组件:协议监听者(Protocol Listeners),WWW服务(World Wide Web Publishing Service)和WAS(Windows  Process Activation Service),理解这三个组件的功能,是理解IIS的必须的知识。            下面,我们首先来看第一个。   协议监听者(Protocol Listeners)        我们知道,很多不同类型的应用程序都需要它们的客户端以不同的协议与它们进行通信,我们稍微简单的来举几个例子让大家明白: Web应用程序采用Http来通信。Web应用程序通过接受Http请求和发送Http响应给客户端的方式来进行通信。 WCF应用程序可以采用很多的协议来进行通信,包括:HTTP, NET.TCP, NET.PIPE, 和 NET.MSMQ        在这里各种不同类型的应用中,协议监听者就是一个负责监听特定协议的请求,然后把请求传递给IIS的组件。每一个协议都有它自己的监听者。IIS7中包括 了四个协议的监听者:HTTP.SYS,NET.TCP,NET.PIPE和NET.MSMQ。如果要对其他的协议进行监听,那么可以采用PlugIn的 方式写新协议的监听者组件,然后插入到IIS7中(就是采用所谓的“插件式”方式)。          IIS 7中采用了HTTP.SYS来对HTTP请求进行监听,同时在安全性方面也有了改进,因为它也可以对SSL的请求进行监听。另外,对于HTTP.SYS,在IIS6和IIS7中都支持一下功能: HTTP.SYS被实现成为内核模式中的一个组件 HTTP.SYS 直接将接受到的HTTP请求传递给请求的处理工作进程,并且在中途不会出现任何的进程间通信的开销。在IIS6的之前的版本中,HTTP请求首先被用户模 式中的进程inetinfo.exe接受,这个进程再把请求转发给IIS中的工作进程,这个过程就涉及到了工作进程与IIS之前跨进程通信了。 每一个应用程序池都有自己的基于内核模式的请求队列。当没有足够的工作进程来处理HTTP请求的时候,HTTP.SYS就把新来的请求放在队列中。之后,工作进程会直接从队列中拿出请求进行处理,在过程中不会涉及到进程间通信的开销。 HTTP.SYS会把请求的输出的响应缓存在内核缓存中,方便对后续的请求进行快速的响应。 下面,我们来看第二个组件。   WAS(Windows  Process Activation [...]

2012年4月17日08:21 评论关闭

[转载]我的时间管理——充分利用WindowsPhone、Android等设备,实现真正的无压工作! – 刘水镜 – 博客园. 一寸光阴一寸金,寸金难买寸光阴。时间有多么珍贵,不用我多说大家都非常清楚。光知道时间的珍贵是不够的,重要的是我们如何合理的安排自己的时间。让每一分每一秒都过得有价值!   时间管理   我们已经进入了一个信息化的时代,大多数的工 作都可以找到合适的工具帮我们完成。同样,管理时间制定计划也有非常好的工具。像什么谷歌日历、Hotmail日历、Outlook、飞信等等,我就不一 一列举了。类似的工具我也用过一些,感觉谷歌日历跟Hotmail日历是非常不错的。之前我一直用的是谷歌日历,但最近不知怎么谷歌经常无法同步,所以就 改用Hotmail日历了。其实这两者除了外观有点差别之外,功能与基本设定几乎完全一样,如下图,一天24小时可以在任何时间设定你要做的事情。     对一些有规律、经常重复的事情可以设置循环——按天、周、月、年等循环,非常的人性化。     另外还有多种提醒方式,包括电子邮件、电脑端或手机端弹出窗口提示、让你无论何时何地都能够及时收到提醒,不错过任何一件事情。     如果不方便用电脑的话,还可以同步到手机上。 如今智能手机正以龙卷风一般的势头席卷全球,目前Android手机平均日激活量已经超过50万台,再加上IOS、新兴的WindowsPhone、三星 的Bada系统、惠普的WebOS等等。几乎快达到人手一部的地步了。而每一部智能手机都具有很强大的日程管理功能。我们可以将谷歌日历或者 Hotmail日历同步到我们的手机上。 本人目前用的是微软的WindowsPhone,所以下面就以WindowsPhone为例        锁屏和开始界面都可以看到接下来要做或者正在做的事情,非常方便。         可以单独浏览每天的安排,也可以纵观整个月,把握整体的安排。     点击某个具体的事件可以对其进行编辑,如果是循环事件还可以选择编辑本次,还是编辑所有。如果在手机端进行更改日历同样会同步到服务器上,利用强大的云实现无缝链接。   有了以上这些强大的工具以后,安排时间制定计划已经不成问题。但是新的问题又来了,那就是我们制定了这些计划如何才能够很好的执行呢? 想要解决这个问题也不难,咱们往下看:   个人管理   说完了时间管理,下面我们说说个人管理。前面 的时间管理只是教我们怎么安排时间制定计划,而接下来要说的个人管理,是教我们如何按时保量的去完成我们所制定的计划。关于个人管理的方法有很多,例如普 瑞玛法则、番茄工作法等。这些方法所主张的观点都很相似,中心思想大概都是将一整天分为若干个时间片,在这些比较短的时间片里只做规定的事情,其他事情不 要做不去想。没结束一个时间片进行短暂的休息,连续几个时间片以后进行较长的休息与放松。从而达到在短时间内精神高度集中提高效率的目的。 下面我们就以普瑞玛法则为例简单的说一下:     普瑞玛法则 普瑞玛法则除了主张将时间分段以外,其更核心的思想如下: 普瑞马法则:就是如果把一件更难完成的事情放 在比较容易完成的事情前面做。那更难完成的事情就可以成为比较容易完成的事情的强化刺激。换句话说,把不愿意干的任务或者工作放在喜欢完成的任务之前。如 [...]

2012年4月10日09:31 评论关闭

[转载]在windows下使用git客户端,github源码库以及eclipse的git插件-egit的使用 – minvt – 博客园. 在windows下使用git客户端,github源码库以及eclipse的git插件-egit的使用   #{ //v0.1//120314 简单记录 ?//v0.2? }#   这段时间,公司的源码库从svn迁移到了github上,从svn换用git的过程经历了一些曲折.在此先简单记录一下.   关于git与svn 刚开始搞不明白git的区别,以为和svn差不多少,稍微使用了一下才发现区别较大. svn 首先svn是在远端或者本地建立一个源码数据库,源码和版本变更都记录在其中.本地当前项目下会有隐藏的.svn文件,记 录一些当前项目的元信息,以使本地当前项目能和源码数据库中的信息接驳起来. git 至于git比较特别,首先git会索性要求本地必须有一个源码仓库,把项目元信息也记录其中.有些人在这边可能分不清,因 为会看见两种情况,有人会一个项目建立一个源码仓库,有人是用一个集中的源码仓库,一般来说,应该使用后者吧.而提 交代码变更,即commit即为向本地源码库提交.然后在远端有一个git server,比如github,其实就是另一个源码版本库的 所在地.这里会有push,pull的概念,看来git更注重同步的理念.无论你在本地commit多少次,git server的源码库是不会 变化的,此时你要做的是,将本地源码库和远端源码库同步!这就是关键所在,你要使用push,将源码库的变更push上去.至 于pull,当然是拖下来.这样的好处显而易见,即时没有在网,你也可以随时使用版本控制功能. 但是这里我还有一些不明白的地方,就是多人开发时,不同版本库的同步冲突如何解决,因为实际上比svn多了一步,不知 道会不会很麻烦,后续研究. 在windows上使用git windows在专业领域不愧为万年二等公民啊,不提也罢,不提也罢 – – 如何在eclipse里面使用git? 大家肯定知道,既然是eclipse,那么会有一个插件,嗯,这个传说中的插件叫做egit. 貌似现在的eclipse已经自带了这个源,你可以直接搜这个插件,或者手动的从源下载,但是eclipse并没有给这个源一个 名字,所以你添加源的话会提示你已经存在,你可以这样: 1 help->install new software 2 点击最上边的输入框的下面一行的”Available Software Sites” 3 看见”type filter text”没有? 输入”egit”,选定,edit,name咱就填个”egit” 4 好,回来,这时候插件源的下拉菜单里应该会有egit了,你选择,然后把那些乱七八糟的都装上吧,你肯定已经干了很多 次了. [...]

2012年3月15日08:21 评论关闭
备案信息:冀ICP备10007948号