零、前言

  1. 本次作业要求个人编写程序,截止日期2019年9月25日23:00
  2. 请先阅读《构建之法》第一章至第三章的内容,并在下方作业里体现出阅读后的成果。特别是第2章中的效能分析及个人软件开发流程(PSP)。

一、编码要求

  1. 在Github仓库中新建一个学号为名的文件夹。
  2. 在开始实现程序之前,在PSP表格[附录1]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
  3. 使用C++ 或者Java语言实现,C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。
  4. 提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。
  5. 完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
  6. 使用Github[附录2]来管理源代码和测试用例,代码有进展即签入Github。签入内容请注意测试须知组织目录,其余的文件(包括单元测试)不必上传,使用.gitignore忽略。签入记录不合理的项目会被助教抽查询问项目细节。
  7. 使用单元测试[附录3]对项目进行测试,并使用插件查看测试分支覆盖率等指标;并写出至少10个测试用例确保你的程序能够正确处理各种情况。

二、博客撰写要求

  1. 在文章开头给出Github项目地址
  2. 给出PSP表格
  3. 解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。
  4. 设计实现过程。设计包括代码如何组织,比如会有几个,几个函数,他们之间关系如何,关键函数是否需要画出流程图?单元测试是怎么设计的?
  5. 记录在改进程序性能上所花费的时间,描述你改进的思路。
  6. 代码说明。展示出项目关键代码,并解释思路注释说明
  7. 结合在构建之法中学习到的相关内容,撰写解决项目的心路历程与收获

三、需求

实现一个命令行程序,不妨称之为Sudoku。

百度百科简介:

数独盘面是个九宫,每一宫又分为九个小格。在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字。使1-9每个数字在每一行、每一列和每一宫中都只出现一次,所以又称“九宫格”。

具体任务:

现在我们想一步一步来,完成从三宫格到九宫格的进阶;完成三宫格和其他博客任务,就算过了初级考核,其他的算升级。具体各阶规则如下:

三宫格:盘面是3*3。使1-3每个数字在每一行、每一列中都只出现一次,不考虑宫;
四宫格:盘面是2*2四个宫,每一宫又分为2*2四个小格。使1-4每个数字在每一行、每一列和每一宫中都只出现一次;
五宫格:盘面是5*5。使1-5每个数字在每一行、每一列中都只出现一次,不考虑宫;
六宫格:盘面是2*3六个宫,每一宫又分为3*2六个小格。使1-6每个数字在每一行、每一列和每一宫中都只出现一次;
七宫格:盘面是7*7。使1-7每个数字在每一行、每一列中都只出现一次,不考虑宫;
八宫格:盘面是4*2八个宫,每一宫又分为2*4八个小格。使1-8每个数字在每一行、每一列和每一宫中都只出现一次;
九宫格:盘面是3*3九个宫,每一宫又分为3*3九个小格。使1-9每个数字在每一行、每一列和每一宫中都只出现一次;

输入:

输入文件名以命令行参数传入。例如我们在命令行窗口(cmd)中输入:

Sudoku.exe -m 9 -n 2 -i input.txt -o output.txt


其中各参数一定会出现,意义如下:

  • -m 宫格阶级(3~9的整数)
  • -n 待解答盘面数目
  • -i 指定输入文件
  • -o 指定程序的输出文件

输入文件说明:
总共包含n个盘面,每两个盘面间空一行,每个盘面中,每两个小格之间有一个空格;待填入的格子用0代替。输入保证有且仅有一个解,所编写的程序不需要考虑无解时的输出。

上面的命令行对应的输入文件input.txt如下:

0 0 8 0 0 4 0 0 9
0 6 0 0 0 0 1 0 0
0 3 7 0 0 0 0 0 0
8 0 1 2 6 9 0 0 3
0 2 5 4 7 0 0 6 8
0 9 0 0 0 5 0 0 0
9 0 0 1 5 2 3 7 4
0 4 0 3 9 8 0 1 6
1 5 3 6 4 7 8 0 22 0 0 0 0 0 0 0 0
0 0 6 3 0 0 0 7 0
5 0 0 0 0 0 1 0 0
9 6 7 4 0 0 0 0 5
8 1 3 0 0 0 0 0 0
4 2 0 7 1 8 9 6 3
3 5 0 0 4 1 6 9 7
6 9 8 2 7 3 5 4 1
0 4 0 0 5 9 2 0 8

输出:

输出n个程序解出的盘面,每两个盘面间空一行,每个盘面中,每两个小格之间有一个空格。
上面的命令行对应的输出文件output.txt组织如下:

5 1 8 7 2 4 6 3 9
2 6 9 5 8 3 1 4 7
4 3 7 9 1 6 2 8 5
8 7 1 2 6 9 4 5 3
3 2 5 4 7 1 9 6 8
6 9 4 8 3 5 7 2 1
9 8 6 1 5 2 3 7 4
7 4 2 3 9 8 5 1 6
1 5 3 6 4 7 8 9 22 7 9 1 8 4 3 5 6
1 8 6 3 2 5 4 7 9
5 3 4 9 6 7 1 8 2
9 6 7 4 3 2 8 1 5
8 1 3 5 9 6 7 2 4
4 2 5 7 1 8 9 6 3
3 5 2 8 4 1 6 9 7
6 9 8 2 7 3 5 4 1
7 4 1 6 5 9 2 3 8

四、测试须知

组织目录

助教在测试时,将运行自动测试程序编译源文件并运行,进行批量测试,因此请保证项目的组织目录符合要求

Java

对于使用Java语言的项目有以下两点要求:

  1. 【以学号为名的文件夹中】的目录下必须有src文件夹
  2. 在src目录下必须有名为Main.java文件,且Main.java中包含 public static void main(String[] args) 方法

一个Java项目的示例组织目录如下所示:

031702188 (文件夹名字为学号)
|- src|- Main.java(主程序,可以从命令行接收参数)|- lib.java(包含其它自定义函数,可以有多个,对名字不做要求)

C++

对于使用C++ 语言的项目有以下要求:

  1. 【以学号为名的文件夹中】的目录下必须有src文件夹
  2. 在src文件夹中是可在VS2017下编译运行的解决方案,解决方案的名字必须为 Sudoku。

一个C++工程示例组织目录如下所示:

031702188 (文件夹名字为学号)
|- src|- Sudoku.sln|- Sudoku|- stdafx.cpp|- stdafx.h|- Sudoku.cpp|- Sudoku.vcxproj

助教在测试时,将自动按照指定编译环境编译源代码,并利用命令行进行批量测试。

错误处理

本次自动测试会加入各种各样出错情况的测试,要求开发者程序不能崩溃,并且能够尽可能精确报错。你可以有“容错性”的出错设计,但必须输出必要的提示或说明。

五、评分规则

博客评分规则

以下可以作为同学们写博客的提纲参考,具体分数可能会做修改,修改时再提醒。(40'+10')

  1. 在文章开头给出你的仓库的Github项目地址。(1')
  2. 在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(5')
  3. 计算模块接口的设计与实现过程。 设计包括代码如何组织,比如会有几个,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。 (20')
  4. 计算模块接口部分的性能改进。 记录在改进计算模块性能上所花费的时间,描述你改进的思路。(3')
  5. 计算模块部分单元测试展示。 展示出项目部分单元测试代码,并说明测试的函数,构造测试数据思路;测试数据有覆盖到所有的代码吗?并将单元测试得到的测试结果,发表在博客中。 (5')
  6. 计算模块部分异常处理说明。 在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(4')
  7. 在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。 (2')
  8. 完成三宫格之上的更高阶级,并在以上各个条目体现出来。(10')

程序评分规则

正确性(20'+30')

  • 完成三宫格(20')
  • 之后的阶级每完成一个(5')

六、附录

1.PSP表格
PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
Estimate 估计这个任务需要多少时间
Development 开发
Analysis 需求分析 (包括学习新技术)
Design Spec 生成设计文档
Design Review 设计复审
Coding Standard 代码规范 (为目前的开发制定合适的规范)
Design 具体设计
Coding 具体编码
Code Review 代码复审
Test 测试(自我测试,修改代码,提交修改)
Reporting 报告
Test Repor 测试报告
Size Measurement 计算工作量
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划
合计

一个功能完备的程序不是一蹴而就的。可将一个大任务划分为可操作的小任务,同时最好按照任务难度或紧急程度指定各个任务的完成次序。因此,在动手开发之前,要先估计将在程序各模块开发所需耗费的时间,以及完成整个项目所需的时间,将这个[估计值]记录下来,写成PSP 的形式。
PSP的目的是:记录工程师如何实现需求的效率,和我们使用项目管理工具(例如微软的Project Professional,或者禅道等)进行项目进度规划类似。
有关PSP的更多内容,请自行阅读邹欣老师的博客:工程师的能力评估和发展


2.Github
请阅读邹欣老师的博客:源代码管理,了解源代码管理的10个实践问题。
本次作业要求使用Github进行源代码管理,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
对代码签入的具体要求如下:根据需求划分功能后,每做完一个功能,编译成功后,应至少commit一次。具体的功能划分,请自行定义,并在撰写博客时体现出来,遵循自己对需求的功能划分来提交代码即可。
对Commit不是很熟悉的话,请阅读阮一峰的博客:Commit message 和 Change log 编写指南,了解更多细节。


3.单元测试
请根据自己以往积累的测试经验,在编码完成之后,提交产品之前,设计测试用例,并编写单元测试,对自己的项目进行测试。
首先,至少应采用白盒测试用例设计方法来设计测试用例,其他测试方法不限。其次,要设计至少10个测试用例,确保你的程序能够正确处理各种情况。最后,结合测试评估的要求,对自己的测试设计进行评价,这些测试用例能满足该程序测试的要求吗?
另一个重要的措施是要把单元测试自动化,这样每个人都能很容易地运行它,并且可以使单元测试每天都运行。每个人都可以随时在自己的机器上运行。团队一般是在每日构建中运行单元测试的,这样每个单元测试的错误就能及时被发现并得到修改。
推荐阅读邹欣老师的博客:关于单元测试和回归测试

转载于:https://www.cnblogs.com/kofyou/p/11529342.html

test软件工程第三次作业相关推荐

  1. 2019软件工程第三次作业

    2019软件工程第三次作业 数独游戏 戳这里进入Github项目 第一眼看到要做数独的时候,脑海里的第一反应就是用深搜.现在好了,确定了算法,接下来就是要去实现它,可是对于将近半年没写过深搜的我要写一 ...

  2. 软件工程第三次作业——软件质量保证鄙见

    阅读教材第14章及课后参考文献  写一篇关于软件质量保障的博文 参考文献: 两种不同的声音(1)https://coolshell.cn/articles/6994.html (2)https://w ...

  3. 北航2022软件工程第三次作业——结对编程(最长英语单词链)

    软件工程第三次结对编程作业 项目 内容 这个作业属于哪个课程 北京航空航天大学2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对编程项目-最长英语单词链 我在这个课程的目标是 学习软件工程 ...

  4. 软件工程第三次作业(微软小娜案例分析)

    第一部分 调研, 评测 1.上手体验  我使用的是win10系统,所以自带Cortana,之后又在手机上下载了安卓版本.第一感受不管是在电脑上还是在手机上都比较流畅,优化的比较好.电脑上使用也比较方便 ...

  5. 2017年软件工程第三次作业-2效能分析

    要求0 以 战争与和平 作为输入文件,重读向由文件系统读入.连续三次运行,给出每次消耗时间.CPU参数       首先,我下载ptime.exe,不知道什么原因我下载下来以后运行老出现闪退现象.一直 ...

  6. 软件工程第三周作业:微软必应词典案例分析

    0x01 :微软必应词典案例分析 0x0104 :微软必应词典功能性BUG说明       0x010404 : BUG – 1 – 模块功能未实现 运行环境或平台 iOS 9.0.1 必应词典软件版 ...

  7. 现代软件工程第三周作业——Word Frequence

    本博文是现代软件工程第二次结对编程Word Frequence(作业要求)的总结,本项目的源码在这里 how you collaborate: working separately? pair pro ...

  8. 3组现代软件工程第三次作业

    请同学们根据"学生自我评价结果",制定本次课程中可以改进提高的方面,发表博客明确自己的改进目标. 詹睿: 1:某一门开发语言和开发平台有一定的了解. 2:要有通用的软件设计思想和软 ...

  9. 软件工程第三次作业-功能测试

    要求1 要求包括: (1)bug标题,(2)bug内容,含测试环境和准备工作.测试的步骤.运行结果.期待的结果.运行结果与期待结果间的差异, (3)佐证材料,至少包括运行截图.引用作业要求 (wf s ...

最新文章

  1. Python解析照片EXIF信息,获取坐标位置
  2. 全球5G专利能力榜T0P15出炉:谁是冠军?
  3. 架构师书单 2nd Edition--转载
  4. hdu_5701_中位数计数
  5. 几个标准的说明,关于EMC的
  6. ssh查找linux端口,linux – 查找当前连接的端口号SSH
  7. docker和数据卷问题探究
  8. DI使用value属性与value标签的区别以及xml预定义实体引用
  9. JavaScript的作用域(1)
  10. HTML的form表单标签
  11. 53. Element setAttribute() 方法
  12. github 上适合java初学者跟的项目
  13. 干货 | Modbus协议调试分享
  14. 期刊会议的论文,sci,ieee,ccf ,acm等等他们之间的关系,以及如何能看到这些高质量文章
  15. excel表格打印每页都有表头_表格很长,如何使打印出来的每张纸上都有固定的表头?...
  16. SpringMVC中的MultipartResolver,LocaleResolver
  17. 需求挖掘的十三种方法
  18. 引导(booting)
  19. PetaLinux使用Gstreamer传输USB摄像头到DP显示屏
  20. 六大云端 Jupyter Notebook 平台测评

热门文章

  1. 常见的预设分栏包括_计算机应用基础_实训项目二Word综合应用
  2. 三星oneui主屏幕费电_这或许是单手握持手感最佳的手机 三星Galaxy S20上手体验...
  3. 6个部件组成一个圆球_怎样找一个好月嫂?这6个问题一问便知!
  4. linux终端中书名号,Linux双引号、单引号和反向单引号
  5. js return 闭包为null_那么如何让你的 JS 写得更漂亮?
  6. python数字排序_python按照列表元素中的数字大小排序
  7. 怎么删除用户_小米手机如何恢复最近删除的便签 - 学显
  8. python编写代码运用递归画图形_python数据结构与算法 22 递归图形
  9. c++ 迭代器++和+1_C ++中的迭代器简介
  10. kotlin button_使用Kotlin和XML的Android Button