软件工程课的分数系统,和打分方法

  1. 云栖社区>
  2. 博客>
  3. 正文

软件工程课的分数系统,和打分方法

嗯哼9925 2017-11-22 19:08:00 浏览1092

以《构建之法》为核心的软件工程课已经在全国几十个学校开展了好几年,由于采用 Learning by doing (做中学) 的方法, 同学们通过实际的作业获得分数,逐渐累积并转换为最终分数,而不是等到期末的考试得到一个分数。 这种方式有很多好处,但是也引起一些困惑,每次开课的后期,大家都会对分数系统有一些疑问。 这里讲一些分数系统的设计理念,和如何对付一些新问题 (有很多同学根本不做作业怎么办, 同学开始浪荡,最后想及格怎么办, 异常差的学生导致分数系统的映射有偏移怎么办...) 。 这个博客就是想解答这些问题。

分数系统设计的理念:


- 每次发表的作业都有分数,在学期的任何时候,都可以根据公式,从已有的分数中推算出所有学生的期末成绩 (这样学生就不会说:啊老师!我从来不知道我有不及格的风险啊...)

- 奖勤罚懒,分数要拉开优秀作业和一般作业的差距,迟交 0 分,过期不交作业,倒扣分。

- 鼓励交流。作业不是一次交了就完事,再也不看, 而是学生和老师的一个交流途径。 老师和助教给学生博客的评论,学生应该积极回应。 回应就有分数,不回应就会被扣分。 

  师生要互相质疑,问答,就像培根说的:

        真理之川從它的錯誤之溝渠中流過;像萌芽一般,在一個真理之下又生一個疑問,真理疑問互為滋養。

- 分数规则对所有人开放,尽量保持简明。 用Excel 表就和一些简单公式可以统计好。
- 允许学生花额外的努力获得更多分数。
- 最后的分数是个人努力和全班同学相对排名的体现, 但是少数学生的异常情况 (分数特别高、特别底)不会对其他同学的分数产生大的影响。 

这个分数系统是建立在:“全班同学都至少付出了一定程度的努力” 的假设上的。如果少数同学什么作业都不做,那么这个分数系统不是为这样的学生设计的,这些同学不必参加后面提到的映射等操作。 
 

《构建之法》里的分数设计中的概念和词汇定义:

    学生要做项目(个人项目,结对项目,团队项目),项目有作业, 作业分代码作业和博客作业。 每个作业都会打分,基本上每个作业满分都是 10 分,最低分是 (-10) 分。   学生在团队项目中要做两次阶段性的展示(alpha 发布 和 beta 发布),这两次发布非常重要,体现了一个团队一段时间的努力成果。团队通常是写一个博客,把展示内容都组织成为一个博客,同时团队可以现场展示他们的成果。这个作业的满分是 100 分。  

分数转换的流程是: 

    原始分数 --> 累积并映射到各自区间 --> 归一化为百分制 --> 加上可选的个人附加分 --> 老师的调整 -->成绩单上的分数 

 

原始分数的累积和区间映射

原始总分=  
     个人项目成绩            (20%)
  + 结对项目成绩            (20%) 
  + 团队项目Alpha成绩    (25%)
  + Alpha阶段个人贡献分  (5%)
  + 团队项目Beta成绩      (25%)
  + Beta阶段个人贡献分   (5%)


个人项目成绩 (占原始总分的 20%) =

              每次作业成绩的累加,再把全班同学的最高成绩映射 20分,这个最高的累加分数到 20 分的比例为 R, 其他同学的成绩按 R 做映射。
              作业成绩累计是负分的同学,映射为 0 分。

              例如:三个同学 A, B, C 在个人项目中分别得了 50, 30, 10 的原始分, 这个项目的满分是20 分。 最高的原始分50 要映射到 满分20 , 比例是 50 / 20 = 2.5, 所以  R = 2.5

              这样我们就可以用 比例R 推出, B 得分=30 / 2.5 = 12, C得分 10 / 2.5 = 4

结对项目成绩 (占原始总分的 20%)= 每次作业成绩的累加,再把全班同学的最高成绩映射 20 分,这个最高的累加分数到 20 分的比例为 R, 其他同学的成绩按 R 做映射。
              作业成绩累计是负分的同学,映射为 0 分。

团队项目成绩 = 每次作业成绩的累加,再把所有项目组的最高成绩映射为 25 分, 其他小组根据映射比例做同样的映射。
              alpha, beta 两次团队项目同样处理,各占 25% 

个人贡献分 = 和个人项目成绩类似,最高分映射到 5 分,其余按比例映射。
              alpha, beta 项目同样处理

为什么要区间化?因为团队项目在进行过程中会有很多次作业(项目启动,需求,设计,WBS, 每日例会报告, 展现博客, 测试,复审得分...) 这个原始分会远远超过个人项目的原始分,这两种分数必须分别归类到各自的区间中,以保证各种努力在最终分数有适当的比例。

 

归一化

得到原始总分之后,原始总分要做一个归一化处理,回归到百分制。 原始分最高的获得100 分,其他人按照  最高原始分/100 的比率做相应的映射。这个方法和个人项目原始分映射类似。 

注:既然映射的参数是受到最高分的同学影响, 那么班级里有一个非常优秀的学生,他的原始分特别高,会导致其他学生的分数被映射得比较低,这公平么? 我们用软件业的浏览器市场做例子,原来的浏览器IE 是成绩比较好,但是后来班里面来了Chrome,Firefox 等学生,原始分最高的同学,映射到了100 分,遗憾的是,IE 不是最优秀的同学,那么IE 的最终分数就降低了,这有道理吧? IE 要获得高分,应该自己努力,而不是埋怨别的同学作业做得更好,对吧?

原来采用的是高限和底限都有的映射, 例如原始分分布是 [20 .. 90], 要映射为 [50.. 100], 这个两端都要照顾到的映射方式有一个巨大的缺点 -- 如果班级里面有一个较差的学生,那么其他人的分数就要被映射得比较高。  那么,为何一个同学的最终分数会受到班里面最差的同学的影响呢?  在软件市场上,最烂的软件不会影响优秀软件的市场占有率,对吧? 因此,在实验了几年之后,最低端的映射就不考虑了。 

那么,一些同学原始分低怎么办? 整体分数的分布比较奇怪怎么办?请继续看。

 

通过附加项目做最后调整

最后,每个同学有机会做额外的附加项目 (动机可能是:提高自己水平,获得更高分数, 避免不及格,等等), 个人附加项目分数的最高分是 10 分, 这样,如果有本科生同学的原始总分是全班最低的,映射为 50 分,那么,他可以通过挣这个附加项目分数的满分 10 分来避免不及格的命运。

附加项目做什么呢?例如,帮助老师做一些教学辅助工作,再做一个有难度个人项目,写深入的读书/论文笔记,等等。在学期过程中,和老师/助教有深入交流的学生(例如看博客的问答)也可以获得一些附加分数,这个由助教掌握。 

一些老师出于种种原因,还想加一个笔试环节。那么,笔试可以作为这个课程的附加分数,笔试的最高分映射为10分,当然,根据学校的要求和具体情况,笔试的最终分数也可以提高。 

 

分数分布奇怪怎么办

少数情况下,一个班的分数会出现奇怪的分布,例如,有一两个特别优秀的学生,他们得到非常高的分数,会导致其他同学的相对分数太低;或者学校对分数段的人数有规定,或者领导要求把某个不及格的分数变成及格(我听说过两次这样的情况)。

  把过于离散的分数分布变换到比较集中,靠近100 分:  把所有的分数都开平方,再乘以 10.  这个过程让所有非零的分数向 100 分靠近。

  把过于集中的分数分布变换到比较离散,远离100 分:  把所有的分数都和自己平方,再除以 10.  此过程让所有小于 100 的分数向 0 分靠近。

  

团队项目的展示复审阶段如何打分

1) 每个团队写一个alpha/beta 阶段的总结展示博客 (不要写 PPT),具体要求请看老师的说明。

2) 每个复审人看所有团队的总结展示博客,以及代码质量,实际测试结果, 决定名次(没有并列),说明项目的优点和缺点分析(不少于 140 字)

      谁来做复审人:老师,助教,每个团队选一个本团队的代表

                          团队博客列出团队的排名,和对这些团队的点评(不包括本团队)

      复审人看什么:

            - 基本要求:团队成员都到场了么(不倒扣分),现场讲解、回答问题水平如何?

            - 软件的质量:解决原计划解决的问题了么,软件运行质量如何?用户有多少,用户反馈如何?

            - 软件工程的质量:代码在哪里? 代码能在新的机器上构建成功么? 代码可维护性如何?每日构建有么?

                                     项目如何管理的?燃尽图反映真实状态么?老师和助教的点评有回答或改进么?

      复审怎么做:

      a) 面对面集中做,老师和所有在场的复审人现场提问,排名次

      b) 不能面对面的,通过看博客和代码,博客评论交流的方式平均并排名次。 大家都是学过软件工程,做过项目的人了,评论要有点专业性,不能光谈感性认识 (“这个小组做的App 看起来还可以...”), 而是要点评这个产品和软件工程相关的地方,书上提到下面的公式: 

        软件 = 程序 + 软件工程

        软件(的质量) = 程序(的质量)+ 软件工程(的质量)

       我们要好好测试一下程序的质量,给出明确的,定量的评定。同时我们要观察这个小组软件工程的质量(通过他们的每日例会,燃尽图,以及其它博客)点评他们项目的目标实现了么?项目的风险是如何应对的?找到用户的痛点并解决了么? 对主要和次要的需求是如何取舍的?如果换成我来领导这个小组,我会做什么不一样的事情?

 

小组的名字和链接 优点                                     缺点,bug 报告(至少140字)

最终名次

(无并列)

team 1  ...

程序有什么具体的bug?

项目的目标实现了么?项目的风险是如何应对的?找到用户的痛点并解决了么?

对主要和次要的需求是如何取舍的?

源代码管理如何?

如果换成我来领导这个小组,我会做什么不一样的事情?

 
team 2  ...  ...  

 

 

3) 助教收集所有复审人的名次信息, 按平均名次排列, 并给予分数。

4) 这个展示作业的满分是 100 分,其余名次按照阶梯递减(例如,每个阶梯是 10 分或 5 分),取决有多少团队参加了评比,阶梯要拉开,也要保证付出了努力的团队获得相当于及格的分数。 也可以分类评比,例如,所有自选项目在一类,所有做学校老师布置的项目在一类,等。

 





本文转自SoftwareTeacher博客园博客,原文链接:http://www.cnblogs.com/xinz/p/6819371.html,如需转载请自行联系原作者