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

考考考,老师的法宝;分分分,学生的命根。 以《构建之法》为核心的软件工程课已经在全国几十个学校开展了好几年,由于采用 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:同学们的团队项目往往拍脑袋就想出来,并没有很严肃地做各种软件工程的调查。中途拍大腿后悔, 最后拍屁股走人,项目烂尾。  问题2:每个软件项目都可能是很好的软件工程案例, 但同学们对于其他团队的项目不太关心, 只是最后评审的时候看看别人软件的界面,草草给一个分数,浪费了很多的学习机会。  

解决:把点评做成有趣的场景, 让同学们专注于分析各个项目的成功的可能性, 让同学们自己用批判的眼光分析问题,跟踪项目的进展。 

 具体方法:

  1. 让所有团队根据  NABCD 自己审核一下自己的团队项目,把 NABCD 元素加到自己的团队博客的项目说明中, 同时说明预期的 “项目发布后3天的用户量”。  可以给机会让同学们修改团队项目,所有团队发表博客。
  2. 然后, 所有团队写一个博客, 依次评价其他团队的项目立项 NABCD, 排名次 (名次没有并列)。  助教统计所有名次,  名次最低的团队必须做出重大修改, 包括选一个新的项目。
  3. 可以用风险投资做比喻 ,  每个学生都是有钱的风投资本家,  要给这个班级的所有项目投资, 10 个团队项目你只能投6 个,  你投哪些?   请列出你的选择。  有些同学们不是很想创业,做有意思的项目吸引风投吗?  这就让他们练习实际的风投。  例如, 同学可以对任意项目投资, 每个项目可以投 一元钱。    评审获得前三名的项目对应团队的同学就能得到当初投资的钱。  如果这个项目在学期最后没有进入前 3 名, 这个钱就归老师分配。  老师拿了这些钱做奖品, 例如:再分给那些投资了前三名团队的学生。

评审阶段的打分安排:

1) 每个团队写一个alpha/beta 阶段的总结展示博客 (不要写 PPT),具体要求请看老师的说明。有些项目暂时还没有实际用户,或者面临各种问题, 那团队可以深入分析失败的原因,并总结“我学到了什么软件工程的原理,获得了什么经验教训”,这也达到了学习的目的。 

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

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

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

      复审人看什么:

            - 基本要求:团队成员都到场了么(无理由不到的,要倒扣分),现场讲解、回答问题水平如何? 是否各个角色都有发言和回答问题的机会?

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

            - 软件工程的质量:代码在哪里? 代码能在新的机器上构建成功么? 软件的架构如何 (下表有更详细的说明)?代码可维护性如何?每日构建有么?

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

      复审怎么做:

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

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

软件 = 程序 + 软件工程

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

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

有不少团队的项目看似功能都有,但是一具体使用就出现很多问题;当然还有不少团队项目具体功能不行, 但是项目成员号称:“我们的架构好!”, 一个软件的功能性特质比较好评判,那么那些 “非功能性” 的特质,如何评判呢?我们看看如下几个方面,它们也有各自的  “非功能性测试” (参见《构建之法》相关章节):

高性能

从测试的角度看:系统最快能有多块?支持最多的用户,能有多少?换句话说,系统必须满足预期的性能目标,在并发用户数(Concurrent Users)、并发事务数(Transactions per Second,TPS)、吞吐量(Throughout)等指标方面达到预估值,支撑使用人群的正常使用操作。团队项目考察:团队有测试数据或真实运行数据说明软件达到了哪些高性能指标?

可靠性 & 稳定性 & 可用性

很多软件是客户业务系统一部分,它直接影响到用户的经营和管理,客户希望软件在使用周期内长期稳定运行,这要求系统具有一定的容错能力。可用性是指系统在指定时间内的提供服务能力的概率值。我们一般采取集群、分布式等手段提升系统的可用性。我们不能认为所有软件都像一些消费类型的手机App那样 - 闪退多,重启一下就好。 团队项目考察:团队是否有压力测试,是否收集程序崩溃、闪退记录?MTTF 是多少?

安全性

用户的业务数据是具有非常高的商业价值,如果被泄露或篡改将会带来重大损失。安全性是软件系统的一个重要的指标,也是架构设计的一个重要目标。团队项目考察:软件是怎么保护用户隐私的?软件能防止外力入侵系统么?

灵活性 & 可扩展性

软件系统应该具备满足不同特点的用户群和目标市场的能力,更灵活。业务和技术都在不断的发展变化,软件系统需要随时根据变化扩展改造的能力。一个简单的例子:用户想把App 的界面都换成另外一种语言,软件如何做到?是要重启App,还是要下载一个不同的App? 一个稍微复杂的例子:一个团队号称做了 A大学校园周边的 “美食指南”App,如果让这个软件也支持另一个城市的 B大学的周边美食, 程序要全部重新写呢,还是只需简单换一些数据、配置信息就可以?我们软件工程经常讲的高内聚,低耦合就发挥作用了!团队项目考察:看源代码,分析它的模块化、内聚、耦合、可扩展性。

易用性

软件系统必须拥有较好的用户体验,便于用户使用。团队项目考察:请按照《构建之法》第十二章 “用户体验”的建议来测试易用性。

可维护性

软件系统的维护包括修复现有的错误,以及将新的需求和改进添加到已有系统。因此一个易于维护的系统对于用户提出的问题或改进,可以及时的实现高效的反馈和响应支持,同时有效降低维护成本。团队考察:代码注释、文档,代码质量。问自己:你愿意接受这样质量的源代码么?

经常有人说:“架构是系统非功能性需求的解决办法的集合”,如果同学们自称“架构好”,那就用数据来证明。

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

最终名次

(无并列)

team 1 ...

程序有什么具体的bug?

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

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

源代码管理如何?

“非功能性质量”如何? 选择至少 3 个方面来测评

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

 
team 2 ... ... 

3) 助教收集所有复审人的名次信息, 按平均名次排列, 并给予分数(再次强调:小组互相评名次,不打分,助教最后打分)。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程作业 – 计算最长英语单词链

结对编程 – 计算最长英语单词链 《构建之法》练习题 大家经常玩成语接龙游戏,我们试一试英语的接龙吧:一个文本文件中有N 个不同的英语单词, 我们能否写一个程序,快速找出最长的能首尾相连的英语单词链,每个单词最多只…

现代软件工程讲义 个人项目和结对项目练习 四则运算

这是构建之法 《现代软件工程》课的作业题之一。 下面的题目, 从简单的命令行处理和数据处理开始开始,让同学们逐步练习,巩固算法,学会松耦合的设计,学会PSP,源代码控制,单元测试,回…

软件工程作业 - word count

(编程和软件工程作业系列) 实践最简单的项目:WC 实践是理论的基础和验证标准,希望读者贯彻“做中学”的思想,动手实现下面的项目,并和别人的成绩相比较,分析产生差距的原因。 1. 实现一个简单而完整的软件工具(源程序特…

软件工程课, 编程课 助教的工作介绍

在用 "做中学 (Learning By Doing) " 方式讲授编程和软件工程课的时候,我们认为助教在其中起了很大的作用。 费曼学习方法的精髓是 “以教代学” 。如果不能向其他人简单地解释一件事,那么你就还没有真正弄懂它。 我们课程的各位助教&#xff…

软件工程资料 - 优秀的大学怎么教程序开发和软件工程课

他山之石,可以攻玉 世界上很多大学都有不错的教学方法, 例如我们曾经的助教总结他在国外的学习经历,可以看出老师和学校对于如何教好课是花了心思, 有很多投入的。 一门课怎么上: https://zhuanlan.zhihu.com/p/206103…

第二届构建之法论坛预告(草案)

(草案) 时间:2018年7月初 (暂定 7/9 - 7/11) 地点: 北京航空航天大学 活动:为期三天的软件工程教案设计培训和软件专业教育方法的讨论 时间内容工具备注第一天上午 1. 论坛主题演讲 “构建之法教学改进” 构建之法的教学是如何演进到目前的形态的&#x…

AI应用开发实战系列之一: 从零开始配置环境

AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问:https://www.bilibili.com/video/av24421492/ 零、前提条件 一台能联网的电脑,使用win10 64位操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈,请发送到 https://g…

usb连接不上 艾德克斯电源_第十二届(深圳)新能源汽车核心电源技术研讨会成功举办...

2019年4月26日,由大比特主办的第十二届(深圳)新能源汽车核心电源技术研讨会在深圳登喜路国际大酒店成功举办。本次会议受到了法雷奥、长安铁雪龙、比亚迪、蔚来汽车、麦格米特、科陆电子、欣锐、英威腾、晶福源、英可瑞、瀚美特、航嘉驰源、核达中远通、永联、优优绿…

AI应用开发实战系列之二:从零开始搭建macOS开发环境

AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 零、前提条件 一台能联网的电脑,使用macOS操作系统请确保鼠标、键盘、显示器都是好的 建议和反馈,请发送到 https…

安卓能硬改的手机机型_手机后盖材质,金属比塑料的好,玻璃比金属的好,是这样么?...

从2000年至今,18年手机发生了巨大变化到现在,人们不再唯性能至上屏幕、拍照、材质、工艺等等也成了人们选购手机的标准手机后盖材质的发展史很好的见证了人们喜好的变化接下来我们来看手机后盖材质的演变史从手机的创造到手机的普及作为一个材料人我们经…

AI应用开发实战系列之三:手写识别应用入门

AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等。但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手。本文从简单的MNIST训练出来的模型开始,和…

重力加速度换算_中考物理重难点汇总——公式换算大全

初中物理中最重要的部分就是公式了,在这之中公式的换算可以说是一个难点,也是一个重点。力学部分一、速度公式火车过桥(洞)时通过的路程s=L桥+L车声音在空气中的传播速度为340m/s 光在空气中的传播速度为3108m/s二、密度公式(ρ水…

[人工智能教程] 人工智能暑期课实践项目建议

哈工大人工智能暑期课实践项目建议 这个博客介绍了暑期课实践作业的建议。 时间:7/10 - 7/22. 一周上课, 一周项目实践。 要求:项目实践的过程请用公开的博客记录。 项目的源代码请放到 github 中。 每4 ~ 5 人一个小组,从下…

新手一小时就写出人工智能应用 - 看图识熊

来不及了,先上车: 人工智能开发案例 熊的分类 如何安装必要的工具并配置环境呢,请看这个详细的解说 今后会有更详细的文字版在这个专题出现。 如果有对这个教程有疑问,请在这里留言。

c++ 线性回归_模型之母:简单线性回归的代码实现

模型之母:简单线性回归的代码实现关于作者:饼干同学,某人工智能公司交付开发工程师/建模科学家。专注于AI工程化及场景落地,希望和大家分享成长中的专业知识与思考感悟。0x00 前言 在《模型之母:简单线性回归&最小…

AI应用开发实战系列之四 - 定制化视觉服务的使用

AI应用开发实战 - 定制化视觉服务的使用 本篇教程的目标是学会使用定制化视觉服务,并能在UWP应用中集成定制化视觉服务模型。 前一篇:AI应用开发实战 - 手写识别应用入门 建议和反馈,请发送到 https://github.com/Microsoft/vs-tools-for-…

server sql 众数_sql 语句系列(众数中位数与百分比)[八百章之第十五章]

众数众数就是出现最多的那个数。select sal,count(*) as cntfrom empwhere DEPTNO20group by sal通过分组把他们的行数计算出来。那么最关键的部分在于,你如何知道最大值。是的我们可以查出当前最大值,然后再取出最大值的sal。但是这肯定要用到两个临时视…

【干货】快速部署微软开源GPU管理利器: OpenPAI

介绍 不管是机器学习的老手,还是入门的新人,都应该装备上尽可能强大的算力。除此之外,还要压榨出硬件的所有潜力来加快模型训练。OpenPAI作为GPU管理的利器,不管是一块GPU,还是上千块GPU,都能够做好调度&a…

python调用ansysworkbench_Workbench通过Python设定材料参数

微信公众号:CAE技术分享以下一段代码是在Workbench中通过Python设定材料的弹性模量和泊松比参数:# encoding: utf-8# Release 16.0SetScriptVersion(Version"16.0.361")template1 GetTemplate(TemplateName"EngData")system1 temp…

现代软件工程 结对/团队作业 - 汉字的 2048 + 俄罗斯方块

一个很有趣的软件工程/编程作业,如果把汉字构成的规律运用在 2048 俄罗斯方块这样的游戏中,会有什么效果呢? (链接1, 链接2) 既然是软件工程的作业, 那就要体现出一些工程的特性: 作业要求: 1) 学生自行…