引言:进入现在这个我们内部的大项目已经两个多月了。现在回想起进入项目前一位前辈的话:“大项目有大项目的问题,但大项目也有很多东西可学“,自己此时深表赞同。二个月的时间,自己从刚来前两周的观察学习,到现在的基本融入,在这个过程中自己有了很多的想法和思考。
为什么测试这么难写?
tdd的开发实践保证了代码的可测试性,那么当tdd的t变的非常难写的时候是不是现有的代码已然变的可测试性非常的差呢?其中一些非常典型的场景就是
- test的setup太难,而造成这个的一个主要原因就是贫血的model和万能的service。因为model没有行为,所以很多时候可以通过测试model来完成的测试,却不得不通过测service来完成,而万能的service做的事情又太多,需要依赖的东西也太多,而这个时候你本来一个简单的测试就为了setup这个service的依赖而变成一个巨型的测试。
- 你总有做behavior verification的冲动,而behavior verification本身就是邪恶的。记得《xUnit test pattens》这本书说到,”任何需要白盒测试的时候,往往都是代码设计的问题“。
- Assert太多了,一个简单的测试却要有一堆的assert语句。问题很简单,被测试的对象承担了太多了职责。
- 脆弱的测试,这里我看到了有两个原因:第一,共享的fixture;第二,想当然的assert,比如你只是想assert这个collection有没有你要的那个instance,因为你想当然的认为此时collection里只有一个instance,造成后人对于这个collection加入另一个不同instance依然会break你的测试。
Kent Beck说过,当你的测试出现问题,退后一步往往就是一个设计问题。
项目初期设计framework好吗?
很多人开发人员迷恋framework,迷恋framework设计的优雅以及对于开发的便利。我曾经也是其中一员,但是现在我站在了这个观点的对立面。
首先,项目初期的时候framework的设计在大部分都是猜测,刚开始的时候这些猜测大部分都很准,因为这个时候距离是framework的设计者可以看到了,这就如同你站在原地,你能看到10外的东西,随着项目时间的增长,这个距离也在增长,在加上中间需求的一些变更就如同一个小弯,这时候的位置已经不是framework的设计者所能看到的距离了。这个时候framework对于开发限制开始突出,而开发人员碍于修改framework成本太高,很多时候被framework所牵制。既然我们只能看到10米外的东西,那么我们为什么要做100米外的设计呢?
其次,framework的设计思想也会随着项目人员的进进出出,项目进度的压力,大家都没有实践仔细的去看framework。framwork的设计思想变的不再清晰,大家开始按照自己的对于framework的理解来写代码,后来着更不理解framework,会照那些前面未必正确的理解的代码来书写。
构建环境
一个稳定而快速的构建环境对于团队的开发效率和开发人员的心情影响非常的大。想象一下下面两种情况:
- 如果你每次提交代码都让build变红,而你花了几个小时检查之后发现问题出在构建环境上,你是什么心情?
- 如果你每次提交代码测试都要跑2个小时,你会选择多久提交一次代码呢?
个人理解的解决方案就是讲build环境也版本管理,理想的情况下新修改build脚本导致构建环境不稳定,可以快速的revert到上一个版本的构建环境。
团队!团队!
一个团队是不仅是在维护一份源代码,更重要的是维护这个项目所承载的知识。而这些知识不应该只记在某些关键人物的脑中,应该记在所有团队成员的脑中,更不应该只记录在文档之中。而这知识包括:
- 架构设计的知识:架构设计的知识只有进入所有开发人员的脑中,才能得到正确的实现。因此架构设计不应该只从技术角度考虑,也应该从团队知识传递的角度考虑。一个100的设计,而团队成员只能理解30分,那你觉的最后的软件是多少分呢?
- 所谓的局部知识:很多时候,一些开发人员觉得我做的东西只有我一个人在做(比如build脚本),所以我可以选我熟悉的东西就好。而这种所谓局部知识的想法非常不可取,因为当你有这个想法的时候就意味着你变成这个项目的瓶颈。
- 固定角色:在团队中固定角色就意味着划定了各个角色的边界,而每个角色对于自己角色外的东西已然不是外面的世界很精彩。这个时候很多时候它做得决定都是基于自己的角色,而不是整个团队的角度
原文链接:http://www.cnblogs.com/feihe/archive/2011/04/27/2031228.html
相关推荐
碳捕集、利用与封存项目布局报告(魏一鸣:关于CCUS项目布局的初浅思考).pdf
其次,建设工程项目通常具有周期长、投资大、风险高和影响广泛等特点。项目的建设周期可能跨越数年,涉及巨额的资金投入,过程中可能遇到各种不确定的风险,比如市场风险、技术风险、财务风险等,因此项目管理必须...
《关于工程项目成本管理的思考》 工程项目成本管理是项目实施的核心环节,旨在在满足工程质量和进度要求的同时,通过科学的计划、组织、控制和协调,实现预定的成本目标并降低费用。这一管理活动涵盖了技术、经济和...
### 大型项目架构演进过程及思考的关键知识点 #### 一、大型项目架构演进的基本概念 在大型项目的生命周期中,其架构和技术选型并非一成不变,而是随着业务的发展和技术的进步逐步演变而成。这一过程涉及从最初的...
关于项目管理团队的工作思考方法,.......
在《基于模块化设计的工业机器人实训项目开发与实践思考》一文中,作者刘伟宝探讨了在现代教育实践中,如何通过模块化设计来开发和实践工业机器人实训项目,以培养具有实践能力的应用型高科技人才。以下是对文章中...
并提出了对设计企业开拓EPC工程总承包市场需解决理性项目参与和追求利益最大化之间的平衡、传统重技术轻管理业务模式对现代EPC工程总承包管理发展的瓶颈制约、项目经理负责制异化与理性回归之间矛盾等问题的思考。
光线追踪算法的实现和思考(源码+项目说明).zip光线追踪算法的实现和思考(源码+项目说明).zip光线追踪算法的实现和思考(源码+项目说明).zip光线追踪算法的实现和思考(源码+项目说明).zip光线追踪算法的实现和...
教师应适时指导,让学生在遇到问题时独立思考,以提升其创业能力。 【总结】创新创业训练项目不仅是创业的准备,更是学习和成长的过程。学生需要明确项目目标,选择合适的创业项目,保持严谨态度和坚定信念。遇到...
"信息化-项目管理-项目管理实践的系统分析和理论思考——上海飞机制造厂波音平尾项目" 本资源是关于信息化项目管理的系统分析和理论思考,基于上海飞机制造厂波音平尾项目的实践经验。内容涵盖项目管理的基本概念、...
【商业街项目运作定位思考】 在商业街项目中,定位是至关重要的,它不仅决定了项目的特色,也影响了项目的成功与否。"商业街项目运作定位思考概述.ppt" 提供了一个详细的研究框架,主要探讨了如何对商业街进行有效...
结合矿建企业综合项目管理信息系统建设案例,就系统建设对企业从数据管理到业务控制的过程提出几点思考,拟在对矿山建设企业从项目合同签订开始,如何通过项目进度、成本的管控,结合合同条款的约束以及安全、技术、质量...
2. **分解任务**:将大项目分解为可管理的小任务。 3. **估算工作量**:对每个任务所需的时间进行估算。 4. **排序任务**:根据任务间的依赖关系确定执行顺序。 5. **创建时间表**:结合任务的顺序和工作量,制定...
"项目方法论-思考"着重探讨了如何在实际工作中应用和改进项目管理策略。 首先,项目管理的目标应当从客户的需求出发,建立并增强与客户的粘性。这不仅包括完成项目的验收,还涉及到与销售部门的协同工作,确保持续...
本文将深入探讨“项目管理思考之控制故障”的核心概念、实践方法以及在实际项目管理中的应用策略。 ### 一、理解控制故障 控制故障是项目管理中一个关键的环节,它涉及到识别、分析、预测和预防可能对项目造成负面...
"软件项目管理思考题" 软件项目管理是指对软件项目的规划、组织、协调、控制和监理,以确保项目的目标和要求得到实现。软件项目管理思考题是对软件项目管理的重要组成部分,它帮助项目经理和团队成员更好地理解软件...
【公司工程项目管理】是企业经营活动的核心,关系到企业的生存和发展。有效的工程项目管理不仅能提升工程质量,保障经济效益,还能增强企业的竞争力。以下是对加强工程项目管理的几点深入探讨和建议: 首先,构建...
【龙王庙国际广场】项目定位思考方案是一个深入探讨如何为该项目制定有效定位的战略文档,旨在为这个商业项目提供清晰的方向和策略。本方案由五个主要章节构成,涵盖了定位策略模式与路径、项目定位方向、主题定位、...
【中原嘉定唐朝大酒店项目策略思考】主要涵盖了在规划、营销和销售方面针对"唐朝大酒店"这一综合性酒店物业的深度探讨。以下是对这些知识点的详细阐述: 1. **区域市场理解与项目定位**:项目位于安亭镇,遵循“新...