你或你的公司的编程流程是什么?

21

我想寻求流程建议,并在网站上看到了一些。 我想听听您在公司或个人爱好项目中具体使用的内容。 欢迎提供与这些主题相关的其他网站链接!

以下是可以基于其回答的一些问题:

  1. 用户如何向您报告错误/功能请求? 您使用哪种软件来跟踪它们?
  2. 错误/功能请求如何转化为“工作”? 您是否计划工作? 是否有时间表?
  3. 您是否有规范并遵循它们? 它们有多详细?
  4. 您是否有技术领导? 他们的角色是什么? 他们自己编程还是只从事架构/指导工作?
  5. 您是否进行单元测试? 它如何帮助您? 您会说您的覆盖率是多少?
  6. 您是否进行代码审查? 在紧急期限下工作时,可读性是否受到影响? 您是否计划稍后返回并进行清理?
  7. 您是否记录文档? 您或您的公司对多少注释感到舒适? (类描述、每种方法以及内部方法的描述?还是只描述代码的棘手部分?)
  8. 您的SCM流程是什么样子? 您使用特性分支、标签吗? 您的“主干”或“主枝”是什么样子? 它是新开发发生的地方,还是您代码库中最稳定的部分?

已经修复了。抱歉,我检查过了,但是放了太多标签。这是个bug吗? - Colin Curtin
哇,突然有了一个关于如何让电脑上的某件事情让人快乐的好主意,想要利用它,但不知道从哪里开始?这里可不是正确的地方。 - hmcclungiii
+close:这个问题太大了,没有答案。 - Jason Cohen
学习一个团队在公司中开发软件的不同方式对我来说很有趣,我相信这里有很多人也是这样想的。更简洁的问题是,你们的工作流程是什么? - Colin Curtin
4个回答

11

对于我们(小)公司:

  • 我们首先设计用户界面(UI)。这对于我们的设计来说绝对至关重要,因为复杂的UI几乎会立即疏远潜在的买家。我们在纸上制作原型,然后在确定设计的具体细节时,为我们的设计准备视图(View)和任何适当的控制器(Controller)代码,以进行连续的交互式原型设计。

  • 随着我们朝着可接受的UI前进,我们会为应用程序的工作流程逻辑编写一份纸质规范书。纸张是便宜的,而且通过设计的不断推敲,可以确保您至少花费了一点时间思考实现而不是盲目编码。

  • 我们的规范书与源代码一起保存在版本控制中。如果我们决定更改或想要尝试新的东西,我们就会分支代码,并立即更新规范书,详细说明我们想要通过这个特定分支实现什么。分支的单元测试不是必需的;但是,如果我们想将其合并回主干,则需要进行单元测试。我们发现这鼓励了实验。

  • 规范书不是神圣的,也不属于任何特定的个人。通过将规范书提交到源代码的民主环境中,我们鼓励不断实验和修订 - 只要有记录,以便我们以后不会感到困惑。
    在最近的一款iPhone游戏(尚未发布)中,我们最终拥有了近500个分支,这随后转化为近20个不同的功能、大量的概念简化(进度条上的“点击取消”而不是单独的按钮)、一些被拒绝的想法和3个新项目。最棒的是,每一个想法都有记录,因此很容易想象这个想法如何改变产品。

  • 在每次重要构建之后(任何在主干中更新的内容,都需要通过单元测试),我们尝试至少让2个人测试该项目。主要是我们试图找到对计算机知识了解较少的人,因为我们发现设计复杂性而不是简单性太容易了。

  • 我们使用DOxygen生成文档。目前我们没有将自动生成文档纳入构建流程,但我们正在努力实现这一点。

  • 我们不进行代码审查。只要单元测试能正常工作,源码不会引发问题,那就可以了——但这是因为我们相信程序员的质量。在其他环境下可能行不通。

  • 单元测试对我们的编程实践产生了巨大帮助。由于没有经过适当的单元测试,新代码不能被传输到主干,因此我们的主干有了相当好的覆盖率,并且分支上也有中等的覆盖率。然而,它并不能替代用户测试——只是达到那个阶段的辅助工具。

  • 我们使用Bugzilla进行漏洞跟踪。我们不喜欢它,但现在它还能用。我们可能很快要么自己开发解决方案,要么迁移到FogBugz。我们的目标是在达到零已知漏洞状态之前不发布软件。正因为这种立场,我们对现有代码包的更新通常相当小。

  • 因此,我们的流程通常如下:

    1. 纸质UI规格说明+计划»精神测试»第1步
    2. 查看代码+单元测试»用户测试»第1或第2步
    3. 纸质控制器和模型规格说明+计划»精神测试»第2或第3步
    4. 模型和控制器代码+单元测试»用户测试»第3或第4步
    5. 分支想法»规格说明»编码(无单元测试)»精神测试»拒绝
  • 分支思路 » 规范 » 编码 (无单元测试) » 精神测试 » 验收 » 单元测试 » 主干 » 步骤 2 或 4
  • 已知漏洞 » 漏洞跟踪器 » 漏洞修复 » 步骤 2 或 4
  • 完成产品 » 漏洞报告 » 步骤 2 或 4
  • 我们的流程并不完美,但是完美流程意味着完美的人类和技术——这在短期内不可能实现。我们在规划过程中使用的纸张数量惊人——也许该与Dunder Mifflin签订合同了?


    5
    我不确定为什么这个问题会被投票负面。我认为这是一个很好的问题。谷歌搜索并阅读一些随意的网站,其中很多时候试图销售某些东西而不是客观的,这是一回事。询问SO群体(开发者/IT经理)分享他们的经验,以及对于他们的团队有效或无效的方法,那就是另一回事了。
    既然这个问题解决了,我相信很多开发者会指向“敏捷”和/或Scrum,要记住这些术语通常使用非常松散,特别是敏捷。可能我会听起来很有争议,但这些方法论已经被过度宣传了,尤其是Scrum,更像是Scrum顾问正在营销的产品,而不是“真正”的方法论。尽管如此,在一天结束时,你必须使用最适合你和你的团队的方法,如果是敏捷/Scrum/XP或其他什么,请使用它。同时,你需要在这方面保持灵活性,不要变得对任何方法,工具或技术抱有固执的想法。如果某些东西对你没有用,或者通过改变某些东西可以更高效,那就去做吧。
    为了更具体地回答你的问题。这里是对我有用的技术的基本概括(其中很多都是常识):
    1. 将特定项目的所有文件和电子邮件整理好,并通过一个中央位置使其对其他人可访问(我使用 MS OneNote 2007,喜欢它用于所有我的文档、进展、功能和缺陷跟踪等)。

    2. 所有会议(应尽量减少)都应该有行动项,每个行动项都分配给一个具体的人。任何口头协议都应写成书面文件。所有文档都添加到项目站点/仓库中(在我的情况下是 MS OneNote)。

    3. 在开始任何新的开发之前,要有一个关于系统将能够做什么(以及不能做什么)的书面文件。承诺它,但要灵活适应业务需求。这个文件应该有多详细?详细到每个人都能理解最终系统将能够做什么。

    4. 时间表很好,但要实事求是并对自己和业务用户诚实。我使用的基本准则是:发布质量和可用性较高的软件,而不是带有所有功能的错误软件。

    5. 在您的开发团队和开发人员与业务团队之间保持开放的沟通渠道,但在一天结束时,一个人(或几个关键人物)应该负责做出重要决策。

    6. 在适当的情况下进行单元测试。但不要过度沉迷于此。100%的代码覆盖率并不等于没有错误,并且软件按照规范正确运行。

    7. 确保有代码标准和代码审查。坚持标准,但如果对某些情况不起作用,则允许灵活性。

    8. 注释您的代码,特别是难以阅读/理解的部分,但不要把它变成小说。

    9. 如果您已经在处理那个类/方法,实施新功能、修复错误等,请回头清理您的代码。但不要仅仅为了重构而重构,除非您没有其他事情可做并且感到无聊。

    10. 最后也是最重要的一点:不要对任何特定的方法论或技术变得过于固执。从每个方面借鉴最好的方面,并找到适合您和您的团队的平衡点。


    你对待“inaction items”怎么处理?利用协同效应?;-)(抱歉,这是我个人的小烦恼。它们只是“items”。) - Alan Hensel

    4
    1. 我们使用Trac作为我们的缺陷/功能请求跟踪系统
    2. Trac票据会被审查,更改为可行的单元,然后分配给里程碑
    3. Trac票据是我们的规格,包含大部分非常稀疏的信息,这些信息必须在里程碑中讨论
    4. 不过,我们的开发团队只有两个成员
    5. 是的,我们进行测试,并且TDD对我们非常有帮助。覆盖率约为70%(Cobertura)
    6. 不,我们只有在需要时才进行重构(在代码更改期间)
    7. 我们仅记录公共方法和类,我们的最大行数为40,因此方法通常很小而自描述(如果有这样的事情;-)
    8. svn与主干,rc和稳定分支
      1. trunk-开发新特性,修复旧特性的错误
      2. rc-用于内部测试,从主干合并了错误修复
      3. stable-仅从主干或rc合并的错误修复

    1
    为了给出更好的答案,我们公司的政策是尽可能地使用XP,并遵循《敏捷宣言》中概述的原则和实践。

    http://agilemanifesto.org/

    http://www.extremeprogramming.org/

    因此,这包括故事卡、测试驱动开发、配对编程、自动化测试、持续集成、一键安装等内容。我们不太注重文档,但我们意识到需要制作足够的文档以创建可工作的软件。

    简而言之:

    • 创建足够的用户故事以开始开发(这里的用户故事是与业务进行对话的开始,而不是完成的规格或完全详细的用例,而是可以在不到1个迭代中实现的业务价值短片段)
    • 根据业务优先级迭代实施故事卡
    • 从业务方面获取有关刚刚实施的内容的反馈(例如,好的、坏的、几乎等等)
    • 重复以上步骤,直到业务决定软件已足够好

    你会感到惊讶的。顺便说一句,你的回答不是答案,请将其作为评论发布并删除它。 - SilentGhost
    你会感到惊讶的。你要求几十年的经验在互联网论坛上被概括。 - hmcclungiii
    不,他不是在问有哪些进程存在,他在问你们公司做什么。 - JoshJordan
    这根本不是答案。 - Alex Fort
    有哪些进程并不是一个好问题。个别发帖人所使用的进程是一个合理的问题,特别是作为社区维基。 - David Thornley
    显示剩余3条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接