软件工程第三次作业评分

有疑问请在2019.10.12 12:00之前在群内@助教或者在评论中提出

一、作业内容

解不同阶的数独

二、对一些问题做说明:

1.主函数参数argc和argv
在命令行输入Sudoku.exe -m 9 -n 1 -i input1.txt -o output1.txt 时,主函数的参数中,argc表明了字符串个数,argv是字符串数组;在给程序中的变量(盘面数目、阶数、文件名)赋值前,应该先判断标志是什么,比如在argv中扫描到"-i"时,才知道后面紧跟的是输入文件名。
①这样的话,无论助教测试时以怎样的顺序给出参数,程序都可以处理。比如使用 Sudoku.exe -i input1.txt -o output1.tx -n 1 -m 9
②这样还可以使用缺省值。比如,规定在不使用"-m"选项时,程序默认数独的阶数为9。此时的命令行是Sudoku.exe -i input1.txt -o output1.tx -n 1


2.文件读写
打开或者创建文件时应该使用命令行指定的文件名。不应将文件名固定为“input.txt”(这样的话,输入给的参数就没有使用到),实际上助教在测试时使用的是其他名字的文件;也不应在函数内指定文件的路径,一般助教测试时,目录结构和你的不同;助教测试时,既可以使用绝对路径指定文件,也可以使用相对路径。


3.单元测试
本次作业中这个部分扣分比较多。有的同学贴出了程序的执行结果和参考输出,有的输出了运行过程中的变量或者提示,这些不满足单元测试。还没来得及了解的再阅读现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试并搜索相关资料,结对编程依然有这个部分。从链接中截取了一部分信息:

解释单元测试的结构
从上面这个例子可以看到创建单元测试函数的主要步骤:
(1)设置数据(一个假想的正确的E-mail地址);
(2)使用被测试类型的功能(用E-mail地址来创建一个User类的实体);
(3)比较实际结果和预期的结果(Assert.IsTrue(target!= null);)。


好的单元测试的标准
(1)单元测试应该在最低的功能/参数上验证程序的正确性。
……
(7)单元测试应该覆盖所有代码路径,包括错误处理路径,为了保证单元测试的代码覆盖率,单元测试必须测试公开的和私有的函数/方法。
……

上面的第一点要求程序合理地设计模块接口,如果程序只有一个主函数,就无法达到这一点。

三、评分标准

博客评分标准(45'+10')

  1. 在文章开头给出你的仓库的Github项目地址(1')

  2. 在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间(3');在你实现完程序之后,记录下你在程序的各个模块上实际花费的时间(2')

  3. 计算模块接口的设计与实现过程。 设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。 (20')
    • 代码组织:类,函数及关系(5'):简单罗列函数(2'),类图+简要功能说明;(5')
    • 算法关键说明(12'):简单说明(6'),举例讲解、画图说明、流程图说明,提出注意事项;关键点说明等(7'-12')。如果使用的是回溯法,在什么时候得到解?在什么时候停止回溯?
    • 独到之处(3'):比如说程序可以解决多解,原理是xxx。

  4. 计算模块接口部分的性能改进。 记录在改进计算模块性能上所花费的时间,描述你改进的思路。(5')
    • 改进的思路(4')
    • 改进效果(1'):试想的改进实际上有效果吗?需要改进前后的性能分析图对比
    • 只有一张性能分析图不加说明不得分

  5. 计算模块部分单元测试展示。 展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路;测试数据有覆盖到所有的代码吗?并将单元测试得到的测试结果,发表在博客中。 (10')
    • 测试代码(3')
    • 说明测试函数,测试数据的构造思路(4')
    • 测试结果(3')

  6. 计算模块部分异常处理说明。 在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(4')
    • 设计目标,对应的场景(2')
    • 相应的单元测试代码,样例(2')

  7. Code Quality Analysis工具的分析结果贴图以及你的说明。(3')
    • 贴图证明消除所有警告(1')
    • 说明遇到哪些警告,为什么警告,如何解决(2')
    • 或者遇到的其他问题以及解决

  8. 完成三宫格之上的更高阶级,并在以上各个条目体现出来。(7')
    • 处理三阶之上用到了什么的额外函数?
    • 宫如何处理?宫的大小不一如何处理?
    • 三阶之上的如何测试:测试函数、测试数据、测试结果

程序评分标准(25'+20')

说明:在本次作业描述中,两个数字之间是1个空格,但是发布了2个空格的样例。在本次作业自动化测试中,进行了两种规格样例的测试,得分取两种测试中高的那一个。感谢助教@衡与墨额外进行了二次测试。程序测试详情

  1. 三宫格测评(25')
  2. 之后的阶级每完成一个(3'),其余六个阶级全部完成(20')

四、作业得分详情

博客+程序总分

软件工程第三次作业评分_第1张图片

五、第三次作业得分排行

软件工程第三次作业评分_第2张图片

六、千帆竞发图

软件工程第三次作业评分_第3张图片

七、作业推荐

这篇作业讲解到位,有一个视频:
【2019.09.19】数独(Sudoku)游戏之我见(软工实践第三次作业)

这篇作业的性能分析到位,结合排除法和回溯法,有前后的分析比较,可以作为参考:
软件工程实践2019第三次作业

这篇作业提到了排除、回溯之外的方法,有时间可以学习:
软件工程实践2019第三次作业

八、总结

作业中要求自学的内容比较多,第五次作业结对编程也是这样;请参照评分标准,尽力完成每一个得分点。

你可能感兴趣的:(软件工程第三次作业评分)