艾伟也谈项目管理,只有好代码的项目能成功吗?

简介:   Simon Brown,集开发者、架构师及作家于一身,他认为成功的项目需要的不仅仅是好代码。在他的演讲《好代码是不够的》中,Brown讨论了项目成功所需的所有元素,从前期设计到操作文档。  Brown认为好代码是一个好的开始,但要取得成功,人们需要知道要构建什么、要发布什么以及它可以运作起来。

  Simon Brown,集开发者、架构师及作家于一身,他认为成功的项目需要的不仅仅是好代码。在他的演讲《好代码是不够的》中,Brown讨论了项目成功所需的所有元素,从前期设计到操作文档。

  Brown认为好代码是一个好的开始,但要取得成功,人们需要知道要构建什么、要发布什么以及它可以运作起来。

  要知道构建什么,需要一套需求。收集完需求之后,要有一个“大局观”,软件架构代表了当前对该产品的认识。然后,大问题需要被分解成更小的解决方案,其中包含了组件、组件之间的交互以及用到的服务。随后,估计实现这个解决方案需要多少成本。据Brown说,所有这一切,从确定需求到做出估算,只要1-2天。这不是一个人的工作,应该是所有直接参与的人共同完成,这样才能群策群力。

  如果做得好,一个轻量级的软件架构能为项目引入结构——“什么是组件以及它们如何互相沟通”——与指导方针——“源自文档模式、模板和原则”,这能带来一致性——“以标准的方法来解决常见问题”——与清晰性——人们能知道自己的方向,因为他有“大局观”。作为一个反例,Brown提到一个项目,其中使用了三种持久化解决方案:Spring、EJB和Hibernate。这是因为没有人事先决定使用什么持久化框架。

  接下来的步骤是确定优先级。除非是一个小项目,否则不该试图一步到位构建并发布整个项目,而是应该确定什么是最重要的,首先完成这部分。这需要完善并挑战需求范围,决定实现需求的一个子集,它足以满足最初设想的愿景的一部分内容。

  其次是跟踪进度。跟踪进度有不同的方法,例如电子表格或看板。Brown指出,这些方法都是用来了解迭代进行到目前为止的进度完成情况的,它们并不跟踪已发布的软件。

  架构是否可以运作起来?如果作为结果的解决方案无法如预期那样运作,那一切都是徒劳的。Brown认为,对于一个可用的解决方案而言,它必须满足以下要求:

  • 它能满足架构需要:功能和非功能性需求、环境约束和所采用的原则
  • 它为代码提供了一个坚实的基础,人们可以在此之上进行构建
  • 它为解决解决方案中试图描述的初始业务问题提供了一个平台

  构建一个原型。无论架构有多伟大,代码看起来有多漂亮,没人真正知道系统是否能令人满意,是否可以扩展。原型正是人们所需要的。原型是对概念的一个验证,包含系统的垂直切片、主要需求和基础部分,刚好用于模拟实际运作,通过负载测试将整个系统至于压力之下。用于原型的代码后期可用于生产环境,也可丢弃。

  负载测试是这样实现的,“模拟典型使用场景中的多个用户,并且环境越接近生产越好”。原型和负载测试要在项目的早期阶段进行,用于验证架构。

  源码控制提供了:源代码备份、代码变更日志、恢复到不同版本的机制、经简化的并行开发方式,使用源码控制是构建解决方案中的重要一步。

  自动化测试也是必不可少的一块。刚加入的新代码会破坏什么东西吗?对项目某个部分的变更可能会对其他部分产生负面影响。为了限制变更可能造成的破坏,单元测试和集成测试是必须的,否则就要在每次变更后手动测试整个系统的功能。要做多少测试呢?Brown认为,100%的测试覆盖率是很难做到的,非常不切实际,他建议80%,覆盖代码最重要的部分。

  自动化构建。代码经过测试后,需要在目标机上进行构建和部署。但很多时候,系统在其他机器上无法进行构建,构建脚本需要保证该系统可在任意目标机上正常构建。

  Brown认为还有一个有用的步骤,即使用持续集成。持续集成服务器能自动从代码库中获取源代码、编译、测试、打包并安装,在此过程中出现任何错误它都会发出通知。这有助于确保代码的正确构建,及早发现问题。

  自动化测试和构建引入了一致性和可重复性。在多代码分支上进行并行开发时,自动化就更加有用了。

  提取配置信息。系统配置信息取决于环境,最好将它放在代码之外进行维护。

  应用程序的版本应该包含在某处:在元数据中、在诊断页面中、在日志文件中,这样人们才能知道自己正在看哪个版本的程序。

  最后就是操作文档。如果开发团队不是支持该软件的团队,那么有些操作文档是必须的,其中包含的信息涉及如何使用系统、如何监控系统、如何管理系统以及有问题时如何进行诊断。

  所有这些有助于创造一个成功产品的元素都包含在下图中了:

  查看英文原文:Is Good Code Enough for a Project to Be Successful?

目录
相关文章
|
测试技术 项目管理
艾伟也谈项目管理,项目做完了,总结一下
  在连续封闭N个月以及再后来的N个月的加班后,项目终于以延期N个月的结果结束了。不管曾经发生过什么,不管项目是否延期,重要的是项目结束了,所有的项目成员都可以松一口气了。曾经和同事开玩笑说:在我经过过的失败项目中多了一个项目,以后就能避免同样类型的失败了。
991 0
|
测试技术 项目管理
艾伟也谈项目管理,大项目的思考
  引言:进入现在这个我们内部号称“豪门”的项目已经两个多月了。现在回想起进入项目前一位前辈的话:“大项目有大项目的问题,但大项目也有很多东西可学“,自己此时深表赞同。两个月的时间,自己从刚来前两周的观察学习,到现在的基本融入,在这个过程中自己有了很多的想法和思考。
934 0
|
测试技术 项目管理
艾伟也谈项目管理,对项目管理的几点认识
自2007年参加工作以来,参与的项目也有好几个了,但都是以项目成员的角色参与,从来没有以项目经理的角色参与项目。中国有句古话叫“旁观者清”,同一个问题站的角度不同,可能会形成不同的结论。下面我就以一个普通项目成员的角度谈一下对项目管理的几个看法,希望大家给予指正。
922 0
|
程序员 项目管理
艾伟也谈项目管理,较大型项目的产品工作心得
  最近做的一个项目从需求分析到上线绵延了四个月之久,这也是目前接手过功能点最繁复,产品线对接最多的一个项目。从中得到的一些关于设计较大型产品的心得,拿出来跟大家分享。   立项前   1、统一元素设计需考虑周全   也许是初创团队的缘故,我不得不感叹团队对产品经理要求之严格之缜密,项目全程只有一个人负责,所以大到产品线对接,小到一句提示的位置和展示形式都需要一一推敲。
1255 0
|
Java 项目管理 容器
艾伟也谈项目管理,代码背后的点滴
  有段时间没有更新技术blog了,现在有空每天都写写围脖,记录生活和工作的点滴,但是有时候发现有些技术的想法和工作总结没有像过去那么完整的写很大一篇,但是也有零零散散的不少点滴,因此想着随意的写这么一个连续的片段分享。
1091 0
|
测试技术 项目管理
艾伟也谈项目管理,关于项目管理的一点体会
  这段时间,一直在负责一个项目的管理与开发。在时间短、任务紧,而团队人员又大部分是没有经验的菜鸟的恶劣情况下,我带领接近40人的团队,终于在客户规定的时间范围内如期交付产品。这其中,经历了需求变更、人员变动(因为其它任务,先后有近10人离开团队)等诸多问题,项目仍然取得成功了,不能不说有几分侥幸,但此外也有一些经验与教训可以与大家分享。
949 0
|
架构师 项目管理
艾伟也谈项目管理,个人管理:写书之前应该回答的几个问题
  我在06年和一个同事写过一本Delphi入门的示例书籍Delphi数据库通用模块及典型系统开发,当时体会到了写书不像想象中的简单,基本上业余时间都没了,所以我之后就不想出书了,其中更重要的一个原因是,我还没有找到一本真正想与大家分享并且自己能写出来的书籍。
1240 0
|
项目管理 开发者
艾伟也谈项目管理,项目的故事
  这是关于一个项目的故事,与其它项目相比,既不非常复杂,也不是很简单: 一个应用程序与数据库以及其它两个系统通信。这在技术和架构角度都是主流,而在管理角度则是标准情况: 所有工作都应该在昨天完成,但还有很多没有完成的。
1198 0
|
项目管理
艾伟也谈项目管理,关于导致项目失败的程序的讨论
  最初的问题   上周,在SCNA(北美2010软件技术大会)的一个专题小组讨论会上,Chad Fowler (@chadfowler)问道,“有多少项目是因为程序的原因失败的?”。按当时的情形,我想他的观点是,项目的失败归咎于业务问题,而非程序。
1039 0
|
项目管理
艾伟也谈项目管理,IT项目管理的六种错误思维
  错误一:错误的需求调研阶段,导致很多项目永远无法结束!       在软件行业,在界面设计没有正式展现给客户之前,所有的工作都处于需求调研阶段。其实建筑行业已经给我们做好了先例:客户买房子之前是先要看看样板房和模型的,什么都看不到,这房子你敢买么?除非你不是自己住!而在我们所学的软件工程概念模型中,这是三个阶段:需求调研、需求分析、概要设计。
1216 0