跳转至

平台说明

我们会将分组DDL设在退课第一阶段结束后不久,分组DDL后开放仓库创建,每个组有一个仓库。注意如果你们分组已经非常明确,则完全可以在那之前开始完成实验,分发仓库后再将代码全部放入其中即可。

仓库创建通过教学实验平台 UniLab Platform 完成,分组信息导入完成后助教会发公告说明,通过该平台的指引可以创建仓库/获取权限。注意对多人小组来说,第一位操作的同学通过该平台会创建仓库并获得权限,后续同学也需要通过该平台获取仓库的权限。

由于测例中有必做内容也有选做内容,且测例之间可能存在明显的依赖关系,因此你可以通过设置相关 flag 变量的方法来约束 CI 进行的测试,从而使得你在完成部分测试时也能看到 CI 通过的✔️标志,同时也能有效避免无效的 CI 时间。关于 flag 的具体使用说明你可以在测例仓库的 README 中查看。

为了方便大家快速获知测例基本信息,下面放了一个用 Mermaid 绘制的流程图来表示测例依赖关系及其他元信息。每一个框代表一个测例,每个框中的第一行是测例名以及小括号内的分值,如果该测例需要满足 flag 才能开启则会第二行小括号内用逗号隔开的若干个 flag。注意,你必须通过了全部必做部分的测例后,才能开始完成选做测例(为此设置了一个名为 optional 的 0 分测例作为区分)。

测例分值

简便起见,每个测例只有拿0分和拿满分两个情况,我们已经尽可能将测例进行拆散以便于大家得分。

下面是必做部分的测例:

flowchart RL system["system(5)"] table["table(7)"] index-data["index-data(8)\n(index)"] data["data(0)\n(data)"] table-data["table-data(2)\n(data)"] query-a["query-a(3)\n(query)"] query-b["query-b(3)\n(query)"] query-c["query-c(3)\n(query)"] query-d["query-d(3)\n(query)"] query-data-a["query-data-a(3)\n(query)"] query-data-b["query-data-b(3)\n(query)"] join-data["join-data(3)\n(join)"] join["join(3)\n(join)"] comb-pk["comb-pk(2)\n(comb,pk)"] pk["pk(2)\n(pk)"] comb-fk["comb-fk(2)\n(comb,fk)"] fk["fk(2)\n(fk)"] comb-fk-schema["comb-fk-schema(1)\n(fk,comb)"] comb-pk-schema["comb-pk-schema(1)\n(pk,comb)"] fk-schema["fk-schema(1)\n(fk)"] pk-schema["pk-schema(1)\n(pk)"] index-schema["index-schema(4)\n(index)"] table --> system index-data --> query-data-b index-data --> index-schema data --> table-data table-data --> system query-a --> table query-b --> table query-c --> table query-d --> table query-data-a --> data query-data-b --> data join-data --> query-data-a join --> query-a join --> query-b comb-pk --> query-a pk --> query-a comb-fk --> comb-pk fk --> pk comb-fk-schema --> comb-pk-schema comb-pk-schema --> pk-schema fk-schema --> pk pk-schema --> pk index-schema --> query-data-a

下面是选做部分的测例:

flowchart BT optional["optional(0)"] multi-join-opt["multi-join-opt(4)\n(mjo)"] multi-join["multi-join(2)\n(mj)"] query-aggregate["query-aggregate(1)\n(aggregate)"] query-fuzzy["query-fuzzy(2)\n(fuzzy)"] query-group["query-group(1)\n(group)"] query-nest["query-nest(2)\n(nest)"] query-order["query-order(2)\n(order)"] date["date(1)\n(date)"] unique["unique(1)\n(unique)"] null["null(2)\n(null)"] multi-join-opt --> multi-join multi-join --> optional query-aggregate --> optional query-fuzzy --> optional query-group --> optional query-nest --> optional query-order --> optional date --> optional unique --> optional null --> optional

开发顺序

尽管实验文档是按照从下而上的顺序编写的,但是这个顺序可能并不符合敏捷开发的工程实践,相比之下你或许会希望快速完成整个框架,逐步通过部分测试以渐渐增长测试分数,这种情况下你也可以依据测例的依赖关系来决定你的功能实现顺序。

关于 dbs-testcase 的具体用法见该仓库的 README.md,强烈推荐你在本地进行测试完成后再运行CI,CI仅用作上传分数。

在你通过(部分或全部) CI 测例后,你可以在 CI 输出中看到自己的分数。我们通过 UniLab Platform 进行了分数汇总,这里会保留你的最高成绩作为最终成绩,你可以前往平台查看。

Unilab Web 页面

例如上述样例图片中的 5/12 即表明根据开启的 flag 可能运行的全部测例满分为 12 分,而实际上运行 CI 通过的测例总分为 5 分,因此最终得分为 5 分。

如果你希望查看 CI 运行的详细信息,例如在上例中想知道为何有 7 分没通过,则应该前往自己的清华 Gitlab 仓库查看评测详情。对 Gitlab 不熟悉的同学需要注意,从 Gitlab 仓库页面点击✔️或❌会进入到 Pipeline 页面,需要再点击具体的 Job 名字(如 run-all-test)才能进入 job 详情页查看具体的输出,如下图所示:

Job 详情页面

Authors: Congyuan Rao