作者:邵栋
当前常见软件竞赛ACM,Kaggle,华为软件精英挑战赛,阿里天池比较偏重算法;一些创业类竞赛重视创新和功能;ICSE SCORE竞赛侧重软件过程与文档。当前缺少偏重软件工程能力的软件竞赛。
软件开发者应当开发产品,而不是“玩具”。
软件工程专业强调软件开发的工程质量属性以及团队合作。
以下设计了一种适合大学生,强调软件工程特征的竞赛。
- 形式
Hackathon(编程马拉松,黑客松) ,24小时,4-5人组队,完成一个或命题或自由的项目。这可以降低组织者的工作量,也避免长时间参赛的懈怠。 - 组织
按照大学班级(40-50人)为单位,每个班级至少出一个团队(或更多,取决于报名情况),其它班级成员组成后援团。后援团不能直接编码,但可以提供咨询协助。 - 比赛评分
- 评委按照最终产品功能、工作量、创新性评分,不考虑软件质量,总分100分。
- 组织方提供代码静态评估工具,比如SonarQube等,使用通用规则,给出代码基本质量分,总分70分。在比赛过程中学生可以使用工具获知自己的分数,并加以改进。
- 组织方进行性能测试,给出性能有关分数,总分30分。
- 后援团以众包测试方式测试其它团队产品,发现bug后经组织方认定bug严重程度,扣除出现bug团队3-15分,相应给自己团队加扣减分数的三分之一。重复发现bug,只计第一次发现。
这种竞赛相对于常见重视算法和创新功能的竞赛的不同之处为:
- 培养团队合作精神。不管是参赛同学还是后援团同学,都可以具体参与到比赛中,通过有竞争性的比赛,培养大家的团队合作能力,这样可以极大增强学生参与比赛的积极性。
- 增强代码质量意识。通过代码静态质量扫描,并计分,使得学生重视代码质量。
- 增强产品质量意识。通过对抗性的众包测试和性能测试,培养参赛者的工程质量意识。