您或您公司的编程过程是什么?

时间:2009-03-25 18:30:58

标签: process workflow

我正在寻找流程建议,我在网站上看到了一些。我喜欢听到的是你在公司,或者只是你和你的爱好项目中特别使用的东西。当然,欢迎任何与其他网站讨论这些主题的链接!

基于以下答案的一些问题:

  1. 用户如何向您报告错误/功能请求?你使用什么软件来跟踪它们?
  2. 如何将错误/功能请求变为“工作”?你有计划的工作吗?你有时间表吗?
  3. 你有规格并遵循它们吗?它们有多详细?
  4. 你有技术领导吗?他们的角色是什么?他们自己做任何编程,还是只是建筑/指导?
  5. 你进行单元测试吗?它对你有什么帮助?你会说你的报道是什么?
  6. 您是否对代码进行了审核?在紧迫的期限内工作时,代码可读性会受到影响吗?你打算以后回去清理吗?
  7. 你有文件吗?您或您的公司对此感到满意吗? (类,每个方法和内部方法的描述?或者只是代码的棘手部分?)
  8. 您的SCM流程是什么样的?你使用功能分支,标签吗?你的“后备箱”或“主人”是什么样的?它是新开发的地方,还是代码库中最稳定的部分?

4 个答案:

答案 0 :(得分:11)

对于我的(小)公司:

  • 我们首先设计UI。这对我们的设计来说非常重要,因为复杂的用户界面几乎会立即疏远潜在买家。我们在 paper 上对我们的设计进行原型设计,然后在决定设计细节时,准备View和任何适当的Controller代码,以便对我们的设计进行连续的交互式原型设计。

  • 当我们向可接受的用户界面迈进时,我们会为应用程序的工作流逻辑编写 paper 规范。纸张价格便宜,通过设计进行搅拌可以保证您至少花费少量时间考虑实施而不是盲目编码。

  • 我们的规格与我们的来源一起保持在版本控制中。如果我们决定进行更改,或者想要进行实验,我们会对代码进行分支,并立即更新规范以详细说明我们要使用此特定分支完成的操作。不需要对分支进行单元测试;然而,它们是我们想要整合回主干的任何东西所必需的。我们发现这鼓励了实验。

  • 规格不是神圣的,也不属于任何特定的个人。通过将规范应用于源控制的民主环境,我们鼓励不断的实验和修改 - 只要记录在案,我们就不是说“WTF”了。后来,
    在最近的iPhone游戏(尚未发布)中,我们最终获得了近500个分支,后来转化为近20种不同的功能,大量的概念简化(进度条上的“点击取消”而不是单独的按钮) ,一些被拒绝的想法,以及3个新项目。最棒的是每个想法都有记录,因此很容易想象出这个想法如何改变产品。

  • 在每次主要构建之后(主干中的任何内容都会更新,单元测试通过),我们尝试让至少2个人测试项目。大多数情况下,我们试图找到对计算机知之甚少的人,因为我们发现设计复杂性而非简单性太容易了。

  • 我们使用DOxygen生成我们的文档。我们还没有将自动生成纳入我们的构建过程,但我们正在努力。

  • 我们不对代码进行审核。如果单元测试工作,并且源不会导致问题,那可能没问题 - 但这是因为我们能够依赖程序员的质量。这可能不适用于所有环境。

  • 单元测试一直是我们编程实践的神灵。由于任何新代码在没有适当的单元测试的情况下都无法传递到主干,因此我们的主干覆盖范围相当好,而且我们的分支机构覆盖范围适中。但是,它不能替代用户测试 - 只是一种有助于达到这一点的工具。

  • 对于错误跟踪,我们使用bugzilla。我们不喜欢它,但它现在有效。我们可能很快就会推出自己的解决方案或迁移到FogBugz。我们的目标是在我们达到0已知错误状态之前不发布软件。由于这种立场,我们对现有代码包的更新通常很少。

所以,基本上,我们的流程通常看起来像这样:

  1. Paper UI Spec + Planning»心理测试»第1步
  2. 查看代码+单元测试»用户测试»步骤1或2
  3. 纸张控制器&型号规格+规划»心理测试»第2步或第3步
  4. 型号&控制器代码+单元测试»用户测试»步骤3或4
  5. 分支理念»规范»编码(无单元测试)»心理测试»拒绝
  6. 分支理念»规范»编码(无单元测试)»心理测试»接受»单元测试»中继»步骤2或4
  7. 已知错误»错误跟踪器»错误修复»步骤2或4
  8. 成品»错误报告»步骤2或4
  9. 我们的过程无论如何都不是完美的,但完美的过程也意味着完美的人类和技术 - 而且这种情况不会很快发生。我们在计划中经历的纸张数量是惊人的 - 也许是我们与Dunder Mifflin达成合同的时候了?

答案 1 :(得分:5)

我不确定为什么这个问题被投了票。我认为这是一个很好的问题。谷歌搜索是一回事,并阅读一些随机网站,这些网站很多时候试图向你推销一些东西,而不是客观。另外一件事是要求那些开发人员/ IT管理人员分享他们的经验,以及哪些对他们的团队有效或无效。

现在这一点已经不在了。我相信很多开发人员都会指向“敏捷”和/或Scrum,请记住这些术语通常使用得非常松散,尤其是敏捷。我可能听起来很有争议,说这不是我的意图,但这些方法被过度炒作,尤其是Scrum,它更像是由Scrum顾问推销的产品,而不是“真正的”方法。话虽如此,在一天结束时,你必须使用对你和你的团队最有效的东西,如果它是敏捷/ Scrum / XP或其他什么,那就去吧。与此同时,您需要对此保持灵活性,不要对任何方法,工具或技术抱有信心。如果某些东西不适合你,或者你可以通过改变某些东西来提高效率,那就去吧。

更具体地说明您的问题。以下是对我有用的技术的基本总结(其中很多都是常识):

  1. 整理与特定项目相关的所有文档和电子邮件,并通过中央位置让其他人可以访问(我使用MS OneNote 2007并将其用于我的所有文档,进程,功能和错误跟踪等等)

  2. 所有会议(您应尽量减少)应遵循行动项目,其中每个项目都分配给特定的人员。任何口头协议都应写入书面文件。所有文档都添加到项目站点/存储库中。 (在我的案例中是MS OneNote)

  3. 在开始任何新的开发之前,请准备一份关于系统能够做什么(以及它不会做什么)的书面文档。致力于此,但要灵活应对业务需求。文件的详细程度如何?足够详细,以便每个人都能理解最终系统的功能。

  4. 时间表很好,但要对自己和业务用户保持现实和诚实。我使用的基本准则:发布缺乏某些功能的质量可用软件,而不是具有所有功能的错误软件。

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

  6. 有意义的单元测试。但不要迷恋它。 100%代码覆盖率!=没有错误,软件根据规格正常工作。

  7. 有代码标准和代码审查。承诺标准,但如果它在某些情况下不起作用则允许灵活性。

  8. 评论您的代码特别难以阅读/理解部分,但不要将其变成小说。

  9. 如果您已经在使用该类/方法,请返回并清理代码;实现新功能,修复错误等等。但不要仅仅为了重构而重构它,除非你没有别的事可做,而且你很无聊。

  10. 最后也是最重要的项目: 不要对任何特定的方法或技术有所了解。借用每个方面的最佳方面,找到适合您和您的团队的平衡点。

答案 2 :(得分:4)

  1. 我们使用Trac作为我们的错误/功能请求跟踪系统
  2. Trac门票经过审核,更改为可行单位,然后分配到里程碑
  3. trac门票是我们的规格,包含大部分非常稀少的信息,必须在里程碑期间讨论
  4. 不,但我们的开发团队只有两名成员
  5. 是的,我们测试,是的,TDD对我们非常有帮助。覆盖率约为70%(Cobertura)
  6. 不,我们在适当时(在代码更改期间)进行重构
  7. 我们只记录公共方法和类,我们的最大行数是40,所以方法通常很小,不能自我描述(如果有这样的东西; - )
  8. svn with trunk,rc和stable branches
    1. trunk - 新功能的开发,旧功能的错误修正
    2. rc - 对于内部测试,错误修正从主干
    3. 合并
    4. 稳定 - 仅从主干或rc
    5. 合并错误修正

答案 3 :(得分:1)

为了给出更好的答案,我公司的政策是尽可能使用XP,并遵循敏捷宣言中列出的原则和做法。

http://agilemanifesto.org/

http://www.extremeprogramming.org/

所以这包括故事卡,测试驱动开发,结对编程,自动测试,持续集成,一键安装等等。我们在文档方面并不重要,但我们意识到我们需要生成足够的文档才能创建可用的软件。

坚果壳:

  • 创建足够的用户故事以开始开发(这里的用户故事意味着与业务对话的开始,而不是完整的规范或完全充实的用例,但是可以实现的少量业务价值1次迭代)
  • 根据业务优先级最重要的
  • 迭代实施故事卡
  • 从业务中获得有关刚刚实施的内容的反馈(例如,好,坏,差不多等)
  • 重复,直到业务决定软件足够好