如何预测编程题的难度?

举报
云上有未来 发表于 2019/12/26 14:35:30 2019/12/26
【摘要】 编程题的难度和一致性的评估一直在业界没有很好的共识和很有效的办法,无论是学校考试,公司面试,编程竞赛等。一般的解决方法分为两类:分类法 (Taxonomy)和指标分析(Metrics)。

1 挑战

编程题的难度和一致性的评估一直在业界没有很好的共识和很有效的办法,无论是学校考试,公司面试,编程竞赛等。


2 通常解决方法

一般的解决方法分为两类:分类法 (Taxonomy)和指标分析(Metrics)。

1)分类法通常是基于认知模型,如布鲁姆模型(Bloom’s Taxonomy)


1577342234702165.jpg

是基于专家系统对代码问题的思考层面(Level of Thinking)的难易和知识点难易的评判,有时会理解不一致,难达成共识和偏主观。业界的建议是进行一定程度的修正,如不仅考虑写代码的难度,还考虑读题和代码的难度的SOLO分类模型,题目如果过长和文字描述冗余会增加难度,题目短和样例多被认为相对容易。


评判体系可以是3类人群的组合:

1出题的专家

2 试做的人员(未参加出题)

3 独立的专家(未参加出题和试做)

三组人群综合给题目打分,会一定程度的去除主观偏门性

 

2)指标分析(Metrics)

美国大学的学者Said Elnaffar 2016 IEEE全球工程师教育论坛上发表了基于Metrics来预测编程题目难度的论文(Using Software Metrics to Predict the Difficulty of Code Writing Questions

论文的核心观点是有效的Metrics生成的难度预测指数PDIPredicated Difficulty Index)在大多数的场景可以很有效的预测题目的难度:

1577342234913300.jpg

• Cyclomatic Complexity (M1) 圈复杂度

·       Average Depth of Nested Blocks(嵌套块的平均深度)(M2).

• The total number of commands (or statements) 命令(或语句)的总数(M3)

• The total number of operators 运算符总数 (M4).

• The number of unique operators特有运算符的数量 (M5).

PDI=M1+M2+M3+M4+M5

工具可参考静态分析工具列表:https://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

PDI 的短板是对一些特殊编程方法如递归等评估不足,需要进行修正。

 

启发:

1 结合指标分析PDI和3类人群的评判系统,来综合预测编程题的难度

2 结合考试结果和考生表现分析 来优化 #1的模型


本文作者吴昊

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。