【问题标题】:How to estimate the contribution of an individual to a software project? [closed]如何估计个人对软件项目的贡献? [关闭]
【发布时间】:2010-03-13 09:41:35
【问题描述】:

我从事一个软件项目,并想估计我在软件开发中投入的总贡献的百分比。有什么工具可以做到这一点吗?例如,这样的工具可用于评估或谈判。毕竟,我们为钱而工作(是的,不仅是钱,重点仍然存在)。我认为最重要的事情已经足够挥手了。

估计是非常主观的(至少现在对我而言),但我不知道有任何工具甚至可以提供主观估计。我知道 Sloccount 使用代码行说明了全部工作量,但不是基于每个开发人员。

我对用于此目的的理想工具的想法是:

  • 衡量代码的复杂度(越复杂,付出越多,但付出越多,贡献越大)
  • 衡量软件的可分解性/灵活性(可分解性越高越好)
  • 使用了多少库代码——使用库代码加快了开发过程,增加了相关风险,并要求开发人员从以前了解或了解库。
  • 要有足够的智能来区分“谁编写了代码”、“谁复制了代码”和“谁缩进了代码”。

很难区分实现的复杂性和问题的内在复杂性。如果有的话,也许可以与等效的开源对应物进行比较,或者单独对每个子模块进行比较。

如果没有这样的工具,那么拥有这样的工具就没有好处吗?还是您相信“我工作,我不衡量”?毕竟这需要时间。也许项目经理应该连续进行这种估算,比如每周一次。有什么标准吗?是的,标准化很困难,因为每个项目都有不同的目标,但这也许意味着应该有多个标准,而不是根本没有标准。这看起来类似于公司在市场上的估值方式。

更新:在看到一些初步答案后:想象一个只输出百分比的工具是没有意义的。是否有工具可以帮助人类(尤其是管理者)做出更好的决策?或者什么是做出更好决策的充分统计数据?这些统计数据可用吗?

【问题讨论】:

    标签: software-estimation


    【解决方案1】:

    我真的怀疑是否有任何可靠、值得信赖的方法来衡量个人对解决方案的贡献。有时重写一些复杂的遗留代码会导致更少的代码行,不太复杂的解决方案(更小的圈复杂度等)可以被视为一个非常重要的贡献,而在其他情况下删除有价值的代码覆盖导致相同统计数据的边缘情况(更少的代码行,更小的CC等)绝对是坏事。这一切都归结为人、信任和合作,团队中的个人主义几乎总是错误的,我宁愿避免它,尤其是不要把它作为激励因素。

    【讨论】:

    • 团队中的个人主义是错误的,当团队规模较小且个人凝聚力很好时。在大型团队中,或者当个人对团队的认同度不高时,个人会获胜。是的,经理不使用“积分”来激励是有道理的,而是作为私人信息。
    • 在“删除有价值的代码”的情况下,这将表现为错误数量的增加。当然,检测导致错误的更改本身就是一个具有挑战性的问题。
    【解决方案2】:

    这本身就是一个研究课题。有几个工具试图定义像 code ownership 这样的指标。还有其他方法可以解决协作开发的其他方面,例如我们可以在代码中使用的 trustability

    还有几项研究试图使用来自错误跟踪器的信息。例如,识别更可能引入错误的开发人员。但很难做到客观(分配给系统最关键部分的优秀开发人员仍然更有可能引入关键错误)。

    实际上很难通过开发任务获利。一个错误的成本是多少?重构的好处是什么?然而,这将是评估开发人员贡献的一种方式。

    我看到的最后一个很酷的工具是用于 Hudson 持续集成系统的Game Plugin。根据每个开发者的操作为他们分配一个分数

    • -10 如果他们破坏了构建
    • -1 用于破坏测试
    • +1 用于修复测试

    这又是一种以某种方式评估开发人员贡献的方法。

    总而言之,我确实觉得你要求的东西是存在的,但还很不成熟。

    【讨论】:

      【解决方案3】:

      我认为您无法获得一个工具来评估您在项目中的份额。测量源线都很好,但源的质量如何?如果这项工作本可以在 20 内轻松完成,那么您不会希望有人将 200 行源代码的功劳归于...

      另外,想一想我的雇主,很多人以代码以外的方式为项目做出贡献。我能想到的直接例子是项目经理和测试员——他们都是必不可少的,他们都理所当然地值得称赞。

      马丁

      【讨论】:

        【解决方案4】:

        我唯一能想到的就是投票系统。我完全不知道这是否适用于您的团队或任何地方 - 但我敢肯定,您将需要人工来对代码质量进行任何现实的估计。

        【讨论】:

          【解决方案5】:

          在 Stroustrup 的 C++ 书中,我读过一次“不要试图用技术手段解决社会问题”。

          以编程的方式思考,通过一起进行代码审查并就相关主题进行讨论,可以非常快速地评估程序员的态度和能力。

          作为一个 IT 爱好者和一个控制狂,这应该不是很难,实现一个可教的机器学习软件,它使用版本控制、错误数据库等,并提高了实时性能每个贡献者的数据。例如。可以使用 R、KNIME 或 WEKA。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-06-03
            • 1970-01-01
            • 1970-01-01
            • 2013-01-24
            • 2013-01-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多