程序员如何在一个项目上一起工作?

我一直都是独立编程的,我还是个学生,所以我从来没有和其他人一起编程,我以前甚至没有使用过版本控制系统。

我正在开发一个项目,它需要知道程序员如何在公司的一个软件上一起工作。

软件是如何编译的? 它是否来自版本控制系统? 是由个人程序员吗? 它是周期性的吗? 是否有人决定build造什么? 是否有任何testing,以确保它“工作”?

任何事情都可以做。

实际上,这些stream程的变化与许多公司一样多。 意思是说,每个公司都有一些不同于其他公约的惯例,但是大多数地方都有一些常用的最佳惯例。

总是有用的最佳做法

  • 项目的所有源代码以及构build它所需的任何东西都在版本控制 (也称为源代码pipe理)下。 任何人都应该能够一键构build整个项目。
    此外,不必要的文件(目标文件或编译后的二进制文件) 不能添加到版本库中,因为它们可以很容易地重新生成,只会浪费回购空间。
  • 每个开发者都应该每天更新几次版本控制。 大多数时候他们完成了他们正在进行的任务并进行了足够的testing,所以他们知道它并不包含微不足道的错误。
  • 再次说明: 任何人都应该能够通过单击来构build项目。 这非常重要,可以让所有人都轻松testing。 如果非程序员(如老板)也能这样做的话,这是很大的优势。 (这让他们觉得能够看到团队正在做什么。)
  • 每个开发人员都应该在将它们提交到存储库之前 testing它们添加的新function或错误修复。
  • 设置一个定期(按预定间隔)从服务器上更新自己的服务器,并尝试在整个项目中构build一切 。 如果失败了,它会向团队发送电子邮件以及对版本控制的最新提交(因为哪个提交没有build立)来帮助debugging问题。
    这种做法被称为持续集成 ,构build也被称为夜间构build
    (这并不意味着开发人员不应该在自己的机器上构build和testing代码,如上所述,他们应该这样做)。
  • 显然, 每个人都应该熟悉项目的基本devise/架构,所以如果需要的话,团队中的不同成员不必重新发明轮子。 编写可重用的代码是一件好事。
  • 团队成员之间需要进行某种沟通 。 每个人都应该知道别人在做什么,至less有一点。 越多越好。 这就是为什么每日站立在SCRUM团队中有用的原因。
  • unit testing是一个非常好的实践,可以自动testing代码的基本function。
  • 一个错误跟踪软件 (有时称为时间跟踪软件 )是一个非常好的方法来跟踪什么是错误,以及不同的团队成员有什么样的任务。 testing也很好:您的项目的alpha / betatesting人员可以这样与开发团队沟通。

这些简单的事情确保项目不会失去控制,每个人都使用相同版本的代码。 持续的整合过程可以帮助一些事情变得非常糟糕。

它还可以防止人们将不会构build的东西提交到主存储库。
如果您想要包含一个需要数天时间才能实现的新function,并且会阻止其他人构build(和testing)项目,请使用版本控制的分支function。

如果这还不够的话,你可以设置自动化testing,如果这个项目可能的话。

一些更多的想法

上面的列表可以乍一看非常重量级。 我build议您按照需要遵循它:从版本控制和bug跟踪器开始,然后在需要时设置持续集成服务器。 (如果这是一个大项目,你很快就会需要的。)开始为最重要的部分编写unit testing。 如果这还不够,那就写更多。

一些有用的链接:
持续集成 , 每日构build是你的朋友 , 版本控制 , unit testing

例子:

对于版本控制,我倾向于现在使用Git来处理我的个人项目。 Subversion也很受欢迎,例如,如果使用Windows服务器, VisualSVN很容易设置。 对于客户来说, TortoiseSVN最适合很多人使用。 这里是Git和SVN的比较。

对于错误跟踪软件, Jira和Bugzilla非常受欢迎。 我们还在以前的工作场所使用过螳螂 。

对于持续集成软件,有一个Teamcity (另外, CruiseControl和.NET的对应值得注意)。

回答你的问题:“谁来决定项目的主要devise?”

当然,这将是主要的开发者。
在公司中,首席开发人员是与项目的财务/市场营销人员进行交谈的人,根据公司的财务能力,计划的特点来满足用户的需求和可用的时间来决定分拆。

这是一个复杂的任务,通常涉及多个人。 有时还要求团队成员参与或集体讨论整个项目或特定部分的devise。

我也是一名学生,最近完成了一个软件工程课程,整个学期由一个大型项目组成。 让我开始说,我们可以做三个人,整个学期我们要做12个。 与人合作是一件困难的事情。 沟通是关键。

绝对使用一个存储库。 每个人都可以远程访问所有的代码,并添加/删除/更改任何内容。 但是颠覆的最好的部分是,如果有人打破了代码,你可以回到早期的版本,并评估从那里出了什么问题。 沟通仍然是关键,但要知道你的队友正在做什么,这样就没有冲突。 不要坐在你的代码上,快速,有意义的提交到版本库是最有效的。

**我也推荐一个bug追踪器,比如Redmine。 你可以为每个人build立账户,分配不同优先级的任务,还可以追踪人们是否已经处理了某些问题,或者如果有更多的问题出现。

而且,如前所述,unit testing将会有很大的帮助。 祝你好运! 希望这有助于:-)

通常最好不要将构build工件检查到存储库中。 存储库将包含源代码树,构buildconfiguration等 – 任何人写的东西。 软件工程师会将他们的代码复制到本地文件系统上,并在本地构build。

作为构build过程的一部分运行unit testing也是很好的做法。 这样,开发人员将立即知道他的更改是否使任何unit testing失效,并有机会在检查其更改之前修复它们。

您可能希望查看版本控制系统(Subversion,CVS,Git等之一)和构build系统(例如,在Java中有Ant和Maven)的文档。

大的事情是:

  • 一个计划 – 如果人们不知道他们要去哪里,他们不会去任何地方。 因此任何项目的开始都需要一些人(通常是项目负责人)陷入困境并提出一个计划; 该计划不需要非常详细,但仍然是必需的。
  • 版本控制系统 – 没有这个,你不在一起工作。 你还需要坚定的承诺,如果事情没有犯下,他们不算。 “哦,它在我的沙箱之一”只是一个蹩脚的借口。
  • 问题追踪器 – 您无法通过电子邮件文件夹追踪这些事情。 应该肯定是数据库支持的。
  • 通知系统 – 人们需要知道何时致力于编写代码,或者对其负责的错误进行评论。 电子邮件可以为此工作,因为可以IRC(当然,每个人都使用它)。
  • 构build系统 – 发生这种情况并不重要,只要通过一个动作就可以获得目前状态的完整构build,无论是开发沙箱还是主存储库。 最好的select取决于你使用的语言。
  • testing套件 – testing套件可以帮助人们避免愚蠢的错误。 它需要像构build一样容易运行(作为构build的一部分是好的 )。 请注意,testing只是一个正确的替代品,但他们比没有好多了。

最后,你需要一个愿意共同努力来实现这个计划。 这往往是艰难的一部分。

程序员如何在一个公司的软件上一起工作

开发人员从来不像一个团队一样工作 队吸吮。 迪尔伯特很有趣,不是因为他是像高飞这样的滑稽人物。 他很有趣,因为他是真实的,人们认识到他所处的状况。

滑稽

你所问的事情没有标准。 而是有一些公约,这些公约在很大程度上取决于组织的规模和成熟度。 如果你在一个小型组织中,说几个程序员,那么事情可能会与个人开发者进行编码,构build和testing有点不正式。

在较大的组织中,可能会有一个专门的构build工程师和stream程。 这种组织通常会定期进行正式的构build,例如每天一次,使用任何源代码进行检查。该过程通常还包括BVT(构buildvalidationtesting)以及可能的一些回归testing。 开发人员将检查存储库中的代码,在本地工作,然后检入。

在像微软或谷歌这样的最大的组织中,他们将拥有一个完全专门的团队和完整的实验室,这个实验室将会或多或less地build立起来,使每次运行的结果都可用。 这些组织有非常正式的stream程和程序,包括检查什么时候检查什么,检查代码的过程是什么等等。

简短的回答 – “这取决于”。

目前,我正在自己的项目上工作,所以我是build立/使用VCS的人。 我知道其他地方,你有团队通过不寒而栗的电子邮件一起工作的团队。 或使用VCS的大(+5)团队。

在这个笔记上,我强烈推荐学习至less一些VCS,而Joel Spolsky有一个很好的Mercurial入门教程 。 Bazaar(我个人的select)是相似的,然后Git在相似性方面是第二近的,但可能比两者(至lessATM)更受欢迎。 之后,你有SVN这是相当弱的比较。

实际上,Joel 谈到了你的大部分问题 – 我推荐阅读他拥有的10年档案 – 这些都是非常有用的信息,而且大部分都与你现在和将来的情况有关。

没有用于软件开发的食谱,但是一般来说,版本控制系统应该是构build系统的核心,即使你在一个只有你自己的开发者的项目中工作。 即使在这种情况下,能够恢复版本和阅读版本日志是非常值得欢迎的帮助修复错误。 这不是版本控制系统的唯一function,但仅凭这一点就足以安装,configuration和维护版本控制系统。

构build可以由每个开发人员在添加新代码时完成,也可以由“构build服务器”定期完成。 最后一种方法需要更多的设置,但有助于更快地找出构build错误。

正确的编程是一件非常重要的事情。 配对编程就像运行多个处理器的意识一样,人们可以忽略其他人看到的东西,只要他们沟通,就可以带来很大的进步。

首先,团队通过使用知识库(可以是专业的版本控制,或者被认为是“现场”的目录,但是修订控制系统是事实上的标准)来工作。 另外,项目的pipe理策略取决于你如何工作(瀑布,敏捷等)。 如果你在迭代中工作,你可以构build自持的组件/插件/模块/库,然后执行unit testing,直到完成签名为止。 作为一个团队,你在一个团队中工作,这意味着你不能同时在整个项目中工作。 相反,你会得到一个在项目领域内执行的任务。 在某些情况下,您必须修复不属于您的代码,但通常会在发生奇怪的行为时发生。 基本上,你正在对你开发的部分进行testing。

让我把这个扩大到你。 你在一个build筑工人队伍里面。 build筑师有一个build筑的计划,领class看起来需要build造什么,然后聘请施工人员。 泥工做墙壁,检查他们的力量,并很好地粘合起来。 电工完成build筑物内的所有布线,以便电力可以stream动。 每个人都有自己的工作。 有时候,电工可能想与泥瓦匠讨论是否可以雕刻某些墙壁,但总是与工头一起工作。

我希望这对你有一些帮助!

通常,源代码pipe理系统包含源代码,通常没有二进制文件。 如果你想构build它并运行它,你可以检查代码并在本地机器上构build它。

有些地方夜间运行,以确保一切正常。 甚至可能有一些自动化testing是运行在服务器端的。 如果构build或其他任何失败,则会自动通知某人。

Eric Sink的源代码控制HOWTO http://www.ericsink.com/scm/source_control.html

在他的例子中,他使用SourceGear Vault,因为他写了所有的东西,但这些方法可以应用于其他版本控制系统。

这也是为什么我们应该考虑开源项目的一个很好的理由。

大型OpenSource项目(如Chromium,Mozilla Firefox,MySQL,Popular Gnu Software)的首席开发人员都是专业人士。 他们有很多的经验,这些项目已经有数百名这样的专业人士的想法多年演变。

在这些OpenSource项目中可以find他们在答案中提到的所有东西(计划,版本控制系统,问题跟踪器,通知系统,构build系统,testing套件)。

如果你真的想要一个经验,我强烈build议你通过一些stream行的大型OpenSource项目,然后从任何项目(使用版本控制)获得源代码,并build立自己的。

PS:我也是一名学生,参与OpenSource项目是我一生中做过的最好的事情。 相信我! 你也会有同样的感受