`

多人开发较大项目的一点总结

阅读更多
我有过自己一个人一条龙作完一个项目的经历(7万行代码),也试过在一个20多人的团队里参与一个更大的项目(40多万行代码)

总的说来,我觉得做大项目的难度要大一些。过程中也总结了一些想法,在此记录一下

首先,为什么说多人开发大型项目比较困难呢?我觉得主要有以下几个原因:

1、沟通的问题。如果是我自己一个人做,我对自己的想法和思路肯定是很清楚的,就不存在交流的成本和障碍

2、为了维持架构和设计的一致性,需要额外的努力

3、涉及到并发的问题,比如代码提交的冲突、依赖的冲突等,在单人开发,或者小团队开发时,比较不容易遇到

4、大项目本身就有比较高的复杂度。小项目可能一个工程就可以搞定,构建和部署都非常简单。但是大项目就需要拆分工程,构建、部署都会比单工程复杂非常多。即使是2个工程,也比1个工程复杂得多,是1和N的区别

对于大型项目的合作开发,我有以下的想法:

一、项目的总体架构和设计

应该由一个小团队,在开发启动之前,先完成项目整体的架构和设计。对于“架构”一词,每个人都有自己的理解。我个人的理解来自于POEAA,“架构是对系统最高层面的设计,及不能轻易改变的东西”

这个阶段需要输出很多东西,包括但不限于:逻辑架构图、部署图、开发者视图、模块依赖关系、代码框架(分层、公共组件、包结构等)、平台(权限、UI、日志、SSO等)

以下东西我认为不应该在这个阶段输出,包括但不限于:模块内详细设计、具体特性设计等

这个阶段,实际上规定了后续开发中的整体框架,也需要解决主要的技术风险

举个例子,某项目由多个子系统组成,几个子系统之间决定用JMS来集成。如果在开发阶段,才临时决定改用web service来集成,那对整个项目的进度和质量都必定会造成很大的冲击

又比如说,某项目在这个阶段决定使用OSGi,但是又没有完成原型开发,在开发到一半的时候,才说实现不了,那这个完全就是一种搞笑的行为

二、开发阶段的注意事项

1、构建工具

前面说到,拆分多工程之后,系统的构建和部署的复杂度就会成倍上升,因此选择合适的构建工具就非常重要(单工程的项目,直接用eclipse的export功能就可以了,修改的代码也可以即时生效)

目前我觉得maven是一个很不错的工具,除了比较好地处理了依赖管理之外,还可以比较容易地进行分模块地开发,与CI的集成也很不错

2、源码和构件的一致性

不过用了maven的话,开发过程中就同时存在源代码,和构件这2个东西。如果源码和构件不一致的话,就会发生很多问题。因此必须要想办法,保持源码和构件的一致性

3、CI

越大的项目越需要CI。如果是比较小的项目,我觉得CI倒未必是必须的,nightly build就挺好,或者每天手工构建一下问题也不是太大

4、提交冲突

如果多个开发人员修改同一个模块,甚至是同一个文件,就要想办法解决提交冲突的问题。或者2个开发人员负责的模块之间有依赖关系,也要避免提交后的编译问题

三、一种可行的开发流程

针对上面说的这些问题,我们在开发过程中总结出一套流程,还是比较有效的,用到了maven、svn、hudson、nexus

首先项目经理,和各组长的机器上应该有全套的代码,这样可以及时发现、定位问题。另外也可以在必要的时候手工执行完整的构建(先全量更新,再整体构建)

其他开发人员,只需要check out自己负责的工程(及总的parent工程),然后就只需要维护好这个工程就可以了

如果在本地构建(package)时发生错误(编译失败或者UT失败),则与所依赖的下层模块的开发人员沟通,共同定位问题。本地构建成功之后,则将代码提交到svn

此时hudson轮询发现svn代码有更新,则全量更新所有代码,然后执行一次整体构建。如果构建成功,则把代码deploy到私服上。如果构建失败,则发邮件通知相关代码的责任人,及项目经理

这样做的好处是,开发人员不需要关心周边的代码,可以把注意力集中在自己负责的模块上。研发过程也提倡“高内聚,低耦合”;另外可以保证源码和构件的一致性

四、集成环境与本地环境

CI系统在整体构建之后,会将系统部署到集成服务器上,因此在集成服务器上看到的是系统整体的最新状况

除此以外,开发人员自己的机器上,也应该都有本地环境,才能比较方便地调试,并验证本地构建的正确性

开发人员A环境上的系统,和开发人员B环境上的系统,肯定是不一致的。A做的修改,在B上是没有办法即时看见的,这个是正常现象。如果要看到完整的最新系统,需要在集成服务器上看

有一个问题是,开发人员修改代码后,需要手工替换到本地环境上验证。我们目前还没有想到更好的办法,把这个步骤也自动化。比如说,改动了abc.jsp,能够自动替换到本地环境里,看到修改后的效果。不知道大家有没有什么好办法
分享到:
评论
2 楼 ganbo 2015-11-06  
写得太好了,最近正在学习maven构建项目,看了楼主的文章后,感觉受益颇多。
1 楼 key232323 2013-02-05  
前面写的8错——

最后一个自动化本地部署的问题,我目前也是做的手工,自己写一个简洁的build的脚本,不过做成自动化应该不麻烦吧,做一个定时,记录last modified time,有修改,就运行这个build对应的块就可以了

如果文件不多,整个运行都没问题,如果文件很多,可以分成块,根据修改的文件路径判断执行哪个快就可以了

定时效率估计不会高了

相关推荐

    C#多人合作开发项目策略

    在C#编程环境中,多人合作开发项目是一项挑战,但通过有效的策略可以显著提高效率和协作效果。本策略主要关注如何组织代码,使团队成员能够独立工作,并最终将各自的工作集成到一个统一的项目中。以下是对这个策略的...

    大型多人在线游戏开发

    【大型多人在线游戏开发】是一种复杂而综合的软件工程领域,涉及到网络编程、数据库设计、图形渲染、人工智能、服务器架构等多个方面。在这个专题中,我们将深入探讨这个领域的主要技术和概念。 一、网络编程基础 ...

    大型多人在线游戏开发,大型多人在线游戏开发 pdf,C,C++

    大型多人在线游戏(MMORPG)开发是一个复杂而庞大的工程,涉及到多方面的技术和知识。这份PDF文档很可能是关于这个领域的深入探讨,涵盖了从设计初期的概念构建到最终产品上线的全过程。以下是一些可能涵盖的关键...

    7-07在Gitlab中多人协作开发项目.ppt

    7-07在Gitlab中多人协作开发项目.ppt

    基于springboot+vue前后端分离的多人在线文档编辑项目源码.zip

    基于springboot+vue前后端分离的多人在线文档编辑项目源码.zip已获导师指导并通过的高分毕业设计项目。下载即可使用,无需修改,确保可以直接运行!本项目是一套基于springboot+vue前后端分离的多人在线文档编辑项目...

    大型多人在线游戏开发,大型多人在线游戏开发 pdf,C,C++源码.zip

    大型多人在线游戏(MMORPG,Massively Multiplayer Online Role-Playing Game)的开发是一个复杂而庞大的工程,涉及到多个技术领域,包括编程语言、网络通信、数据库管理、图形渲染、人工智能等。在这个主题下,C和...

    VS2008/VS2010 + GoogleCode + SVN 多人开发详细入门教程(更新)

    VS2008/VS2010 + GoogleCode + SVN 多人开发详细入门教程 这个是我在做课程设计时,花了点时间研究的,积分要5个,不算过分,没分的,注册个马甲来下载吧。 更新说明:更新关于SVN路径的几个问题。

    大型多人在线游戏开发 源代码

    大型多人在线游戏(MMO,Massively Multiplayer Online Game)是一种可以让成千上万的玩家同时参与的游戏类型,其开发过程复杂且技术含量高。这里提到的"大型多人在线游戏开发源代码"显然是一份包含了此类游戏核心...

    VR多人游戏-源码-unity-直接运行-初步实现房间加入和多人在线互动VR功能项目源码

    本项目中已经引入了所有需要的插件,包括VR开发需要的toolkit和多人游戏需要的Photon Pun2插件。 注意:Photon Pun2的服务部分需要你自己去官网注册关联你的Phonton App ID。才可以使用多人在线服务。不然这个项目...

    基于C++和socket编程开发的单词消除多人对战游戏项目源码+代码注释(课程设计项目).zip

    基于C++和socket编程开发的单词消除多人对战游戏项目源码+代码注释(课程设计项目).zip 基于C++和socket编程开发的单词消除多人对战游戏项目源码+代码注释(课程设计项目).zip 基于C++和socket编程开发的单词消除多人...

    dotnet-Unity中的第一人称多人射击游戏示例项目

    标题 "dotnet-Unity中的第一人称多人射击游戏示例项目" 暗示这是一个基于Unity...通过这个项目,开发者不仅可以深化对Unity和.NET编程的理解,还能学习到多人游戏开发中的实际问题解决策略,提升自己的游戏开发技能。

    软件著作权多人合作开发合同模板.docx

    《软件著作权多人合作开发合同》是针对多个开发者共同参与软件创作的一种法律文件,旨在明确各方在软件开发过程中的权利和义务。以下是对该合同主要内容的详细解析: 首先,合同明确了合作目的,即为了完成特定软件...

    基于springboot+websocket开发实现多人聊天室的项目源码(java期末大作业)

    基于springboot+websocket开发实现多人聊天室的项目源码(java期末大作业)含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。包含:项目源码、数据库脚本等...

    Unity3d 多人在线坦克大战源码

    Unity游戏代码 ,Unity经典游戏源码 , Unity休闲游戏源码, Unity容易上手的游戏源码,Unity小游戏源码,Unity新手练习源码,Unity个人开发源码,Unity优秀项目,Unity商店优秀作品。 Unity3d 多人在线坦克大战源码 Unity3d...

    多人blog开发设计

    选用JBuiler作为开发工具,其强大的集成开发环境为项目的快速开发提供了便利。Struts框架使得业务逻辑与视图分离,提高了代码的可读性和可维护性;Hibernate框架通过映射关系模型到数据库,降低了数据库操作的复杂性...

    多人合作开发协议书.doc

    多人合作开发协议书是软件开发领域中常见的法律文件,它规定了多个著作权人在共同开发一款软件过程中的权利、义务和责任。在这个特定的案例中,协议涉及到的是名为"xxx 软件 V 1.0"的软件开发项目。以下是协议书中...

    多人网络斗地主开发实战基于(Unity2017) 视频教程

    多人网络斗地主开发实战基于(Unity2017) 视频教程+斗地主相关素材,斗地主游戏开发视频教程227节

    Git多人协作开发.docx

    Git多人协作开发 Git多人协作开发是一种典型的做法,首先创建一个...Git多人协作开发是一种非常重要的开发模式,它可以帮助多个开发人员协作开发一个项目。使用Git可以简化开发过程,避免版本冲突,并提高开发效率。

    大型多人在线游戏开发.pdf

    大型多人在线游戏开发.pdf 游戏开发可以看看

Global site tag (gtag.js) - Google Analytics