2022年春季学期
计算学部《软件构造》课程
Lab 2实验 告
姓名 |
赵卓凡 |
学 |
120L021804 |
班 |
2003006 |
电子邮件 |
759140563@qq.com |
手机 码 |
13804501310 |
目录
1 实验目标概述 1
2 实验环境配置 1
3 实验过程 1
3.1 Poetic Walks 1
3.1.1 Get the code and prepare Git repository 1
3.1.2 Problem 1: Test Graph
3.1.3 Problem 2: Implement Graph
3.1.3.1 Implement ConcreteEdgesGraph 2
3.1.3.2 Implement ConcreteVerticesGraph 2
3.1.4 Problem 3: Implement generic Graph
3.1.4.1 Make the implementations generic 2
3.1.4.2 Implement Graph.empty() 2
3.1.5 Problem 4: Poetic walks 2
3.1.5.1 Test GraphPoet 2
3.1.5.2 Implement GraphPoet 2
3.1.5.3 Graph poetry slam 2
3.1.6 Before you’re done 2
3.2 Re-implement the Social Network in Lab1 2
3.2.1 FriendshipGraph类 2
3.2.2 Person类 3
3.2.3 客户端main() 3
3.2.4 测试用例 3
3.2.5 提交至Git仓库 3
4 实验进度记录 3
5 实验过程中遇到的困难与解决途径 3
6 实验过程中收获的经验、教训、感想 4
6.1 实验过程中收获的经验和教训 4
6.2 针对以下方面的感受 4
- 实验目标概述
本次实验训练抽象数据类型(ADT)的设计、规约、测试,并使用面向对象 编程(OOP)技术实现 ADT。具体来说:
? 针对给定的应用问题,从问题描述中识别所需的 ADT;
? 设计 ADT 规约(pre-condition、post-condition)并评估规约的质量;
? 根据 ADT 的规约设计测试用例;
? ADT 的泛型化;
? 根据规约设计 ADT 的多种不同的实现;针对每种实现,设计其表示 (representation)、表示不变性(rep invariant)、抽象过程(abstraction function)
? 使用 OOP 实现 ADT,并判定表示不变性是否违反、各实现是否存在表 示泄露(rep exposure);
? 测试 ADT 的实现并评估测试的覆盖度;
? 使用 ADT 及其实现,为应用问题开发程序;
? 在测试代码中,能够写出 testing strategy 并据此设计测试用例。
- 实验环境配置
简要陈述你配置本次实验所需环境的过程,必要时可以给出屏幕截图。
特别是要记录配置过程中遇到的问题和困难,以及如何解决的。
直接下载即可
在这里给出你的GitHub Lab2仓库的URL地址(Lab2-学 )。
https://github.com/ComputerScienceHIT/HIT-Lab2-120L021804.git
- 实验过程
请仔细对照实验手册,针对两个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。
-
- Poetic Walks
利用ADT和OOP,在两个类中实现Graph和其相应的功能。
-
-
- Get the code and prepare Git repository
-
从https://github.com/rainywang/Spring2022_HITCS_SC_Lab2/tree/master/P1下载代码并解压,之后git init创建初始库,git add *.*将文件加入git库,再用git commit -m “init”标注为初始文件,再git push origin master传到自己的远程库上。
- Problem 1: Test Graph
- Problem 1: Test Graph
在Graph的empty中返回一个新的ConcreteEdgesGraph
在ConcreteEdgesGraph中返回vertices
用GraphStaticTest进行测试
在GraphInstance中设计了针对Add、Set等功能的测试代码,但暂时无法测试,需在测试GraphEdges时才能测试
-
-
- Problem 2: Implement Graph
- Problem 2: Implement Graph
-
以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。
-
-
-
- Implement ConcreteEdgesGraph
-
-
先写Edge类
再构建ConcreteEdgesGragh类
得到测试结果
覆盖度如上,其中覆盖度低的百分之二十分布在try{}catch(Exception e)中和checkRep这些无法测试到的部分
-
-
-
- Implement ConcreteVerticesGraph
-
-
先写Vertex类
再写ConcreteVerticesGraph类
-
-
-
Problem 3: Implement generic Graph
- Make the implementations generic
-
Problem 3: Implement generic Graph
-
依照上图按照 错依次把String转为L即可
-
-
-
- Implement Graph.empty()
-
-
如图new出一个新图然后返回
-
-
-
Problem 4: Poetic walks
- Test GraphPoet
-
Problem 4: Poetic walks
-
如图构建测试
-
-
-
- Implement GraphPoet
-
-
先设计Graphpoem
再设计poem
输出结果如下
上图为覆盖度。
-
-
-
- Graph poetry slam
-
-
如上图把莎士比亚的十四行诗创建成图,当输入I love you more and more.时应该输出I love you more lovely and more.
-
-
- Before you’re done
-
请按照http://web.mit.edu/6.031/www/sp17/psets/ps2/#before_youre_done的说明,检查你的程序。
如何通过Git提交当前版本到GitHub上你的Lab2仓库。
在这里给出你的项目的目录结构树状示意图。
git add *.*
git commit -m “first”
git push origin master
结构:
Src
P1
Graph
Poem
Teat
P1test
Graph
poem
- Re-implement the Social Network in Lab1
用上个实验里设计的Graph类重写上次实验的人际关系图
-
-
- FriendshipGraph类
-
如图设计addVertex,addEdge,getDistance三个函数
-
-
- Person类
-
如图设计Person类
-
-
- 客户端main()
-
沿用上一次实验的main
-
-
- 测试用例
-
沿用上一次实验的测试用例
-
-
- 提交至Git仓库
-
如何通过Git提交当前版本到GitHub上你的Lab2仓库。
在这里给出你的项目的目录结构树状示意图。
git add *.*
git commit -m “first”
git push origin master
结构:
Src
P4
interval
P4
interval
- 实验进度记录
请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。
每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。
不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。
日期 |
时间段 |
计划任务 |
实际完成情况 |
5.13.2022 |
15:30-19:30 |
完成3.1.2 |
延后 |
5.14.2022 |
10:00-21:30 |
完成3.1.3 |
vertex的set的测试一直不成功,延后完成 |
5.15.2022 |
9.00-18:30 |
完成3.1.5 |
延后,困难3还未解决 |
5.16.2022 |
13:00-21:00 |
完成3.2 |
完成 |
- 实验过程中遇到的困难与解决途径
遇到的难点 |
解决途径 |
3.1.2中测试一直不成功 |
返回vertices时多写了一个(),导致方法套方法,还不会 错,一直没发现,蚌埠住了 |
3.1.3中测试一直不成功 |
一直没找到问题所在,先跳过 |
3.1.5.2中,创造图一直不成功,如果set(string[3],string[4],1)的话无法创造出该边,但要是将字符串写出来的话set(“test”,”of”,1)却成功,可是二者理论上应该是等价的,不知道错在哪里 |
暂未解决(5.16更新:已解决) |
困难3 |
解决了,字符串比较要么全用equal,要么==不能混用,离谱 |
-
实验过程中收获的经验、教训、感想
- 实验过程中收获的经验和教训
学习了很多java的写法,学习了ADT和OOP的相关知识
-
- 针对以下方面的感受
- 面向ADT的编程和直接面向应用场景编程,你体会到二者有何差异/li>
ADT感觉可能应用到实际会更方便
- 使用泛型和不使用泛型的编程,对你来说有何差异/li>
泛型比较麻烦,需要修改的比较多,自己手写会bug很多
- 在给出ADT的规约后就开始编写测试用例,优势是什么是否能够适应这种测试方式/li>
在类更多的时候便于管理,便于直到输入输出,暂时还不适应
- P1设计的ADT在多个应用场景下使用,这种复用带来什么好处/li>
节省时间,更方便
- 为ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,这些工作的意义是什么是否愿意在以后编程中坚持这么做/li>
防止出错,不想写,但感觉应该很有用,还是写吧
- 关于本实验的工作量、难度、deadline。
虽然感觉不难,但在写的时候出了很多很难解决的bug,耗费了非常多的时间,比预计完成晚了很久
- 《软件构造》课程进展到目前,你对该课程有何体会和建议/li>
感觉这门课比较抽象,挺难的
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91337 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!