1 实验目标概述
2 实验环境配置
3 实验过程
3.1 Poetic Walks
3.1.1 Get the code and prepare Git repository
3.1.2 Problem 1: Test Graph
3.1.3 Problem 2: Implement Graph
3.1.3.1 Implement ConcreteEdgesGraph
3.1.3.2 Implement ConcreteVerticesGraph
3.1.4 Problem 3: Implement generic Graph
3.1.4.1 Make the implementations generic
3.1.4.2 Implement Graph.empty()
3.1.5 Problem 4: Poetic walks
3.1.5.1 Test GraphPoet
3.1.5.2 Implement GraphPoet
3.1.5.3 Graph poetry slam
3.1.6 Before you’re done
3.2 Re-implement the Social Network in Lab1
3.2.1 FriendshipGraph类
3.2.2 Person类
3.2.3 客户端main()
3.2.4 测试用例
3.2.5 提交至Git仓库
3.3 Playing Chess
3.3.1 ADT设计/实现方案
3.3.2 主程序MyChessAndGoGame设计/实现方案
3.3.3 ADT和主程序的测试方案
1 实验目标概述

本次实验训练抽象数据类型(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 并据此设计测试用例。
2 实验环境配置
进入eclemma官网下载文件安装并使用eclemma
3实验过程
3.1 Poetic Walks

实现具有标记顶点的Graph并测试。然后实现一个使用单词的图生成诗歌的类
3.1.1 Get the code and prepare Git repository
https://github.com/rainywang/Spring2020_HITCS_SC_Lab2/tree/master/P1/test/poet,从网上直接下载。
3.1.2 Problem 1: Test Graph
此部分针对Graph设计测试策略。

  1. testadd():测试是否能加入一个新的顶点,如果返回true则成功,如果返回false则没能加入。
  2. testSet():加入一条新的边,测试返回值是否是0,如果是0则成功,反之失败。再继续向图中以一定权重加刚才加入的边,测试返回值是否是刚才的权重。最后以0权重加入这条边,判断是否存在边
  3. testRemove():向图中加入一定的边,删除某顶点,测试被删除顶点的边是否依然存在
  4. testVertices():向图中加入顶点测试集合是否正确
  5. testSources():向图中加入顶点和边测试是否返回源头点和权重
  6. testTargets():向图中加入顶点和边测试某个顶点相连是否正确
    3.1.3 Problem 2: Implement Graph
    3.1.3.1 Implement ConcreteEdgesGraph

    Edge:利用source表示源点,target表示目标点,weight表示权重。同时编写getsource,gettarget,getweight返回这三种数据。Check检查是否有非法数据。ConcreteEdgeGraph:用set<>vertices表示顶点集,list<edge<>>edges表示边的集合。Check检查是否有重复的顶点。
    3.1.3.2 Implement ConcreteVerticesGraph
    vertex:用vertexname代表顶点,map存储与该点相连的数据,check检查不能出现一个空的顶点。数据类型使用private来防止rep。put()和move()可以向map中加入或删除边。
    ConcreteVerticesGraph:用vertices存储顶点,check检查顶点是否重复。
    3.1.4 Problem 3: Implement generic Graph
    3.1.4.1 Make the implementations generic

    找到所有的string换成L
    3.1.4.2 Implement Graph.empty()
    利用conctreteedgesgraph()实现Graph.empty()
    3.1.5 Problem 4: Poetic walks
    3.1.5.1 Test GraphPoet

    利用之前提供的注释为例编写的测试用例
    3.1.5.2 Implement GraphPoet
    从文本中获得单词图并返回处理过的字符串
    3.1.5.3 Graph poetry slam
    Main.Java运行如下

    3.1.6 Before you’re done
    Git add
    Git commit -m “xxxx”
    Git push origin master

    3.2 Re-implement the Social Network in Lab1
    基于之前在 Poetic Walks 中定义的 Graph及其两种实现,重新实现 Lab1 中的 FriendshipGraph 类。
    3.2.1 FriendshipGraph类
    利用graph表示用户之间的关系。
    Addvertex()表示添加顶点,成功true失败false
    Addvertex()表示添加边,最后返回好友列表
    Getdistance()用来寻找最短路径并返回长度
    3.2.2 Person类
    Name表示顶点名字。
    Distance表示最短距离。
    Map存的是所有相连顶点及其权重
    List存的是所有相连顶点
    Check检查是否有重复级是否有空元素
    3.2.3 客户端main()

    3.2.4 测试用例
    带入具体数据进行测试,测试上述部分是否有错误。

    3.2.5 提交至Git仓库
    Git add
    Git commit -m “xxxx”
    Git push origin master

    3.3 Playing Chess
    3.3.1 ADT设计/实现方案
    Action接口:对玩家行为的抽象
    Board接口:对棋盘的抽象
    ChessAction接口:对国际象棋玩家行为的抽象
    GoAction接口:对围棋玩家行为的抽象
    Game接口:对游戏的抽象
    Piece接口:对棋子的抽象
    Player接口:对玩家的抽象
    Position类:棋盘上的一个位置
    ChessBoard类:国际象棋棋盘的类
    ChessGame类:国际象棋游戏的类
    ChessPiece类:国际象棋棋子的类
    ChessPlayer类:国际象棋玩家的类
    GoBoard类:围棋棋盘的类
    GoGame类:围棋游戏的类
    GoPiece类:围棋棋子的类
    GoPlayer类:围棋玩家的类
    3.3.2 主程序MyChessAndGoGame设计/实现方案
    客户端首先读入玩家选择游戏的种类。

    接下来按照输入调用游戏方法并初始化玩家名字

    在游戏中针对操作则由客户端进行输入并检查输入是否合法

    如果合法则有由相应的game类执行操做,并由对应的action判断操作是否正确,如果操作合法则记录操作,并进入下一个玩家回合。如果输入是end则结束游戏并选择是否查看历史。
    演示截图(chess为例):游戏开始:

    查询:

    统计(玩家1吃了玩家2一个子):

    历史:

    3.3.3 ADT和主程序的测试方案
    简单测试了一下GoGame和ChessGame的方法

哈工大软件构造lab2实验报告相关推荐

  1. 软件构造lab2 - 实验报告

    软件构造lab2 - 实验报告 1.实验目标概述 2.环境配置 3.实验过程 3.1Poetic Walks 3.1.1Get the code and prepare Git repository ...

  2. 哈工大2020软件构造Lab2实验报告

    本项目于3.17日实验课验收,请放心参考 参考时文中有给出一些建议,请查看 基本更新完成 2020春计算机学院<软件构造>课程Lab2实验报告 Software Construction ...

  3. HIT 软件构造 lab2实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 2实验报告 学号 1180300223 班号 1803002 目录 1 实验目标概述 1 2 实验环境配置 1 3 实验过程 1 3 ...

  4. 软件构造 Lab2 实验报告

    2021年春季学期 计算学部<软件构造>课程 Lab 2实验报告 姓名 王雨宁 学号 1190201118 班号 1903006 电子邮件 1756840811@qq.com 手机号码 1 ...

  5. 哈工大软件构造Lab1实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 1实验报告 目录 1 实验目标概述... 1 2 实验环境配置... 1 3 实验过程... 1 3.1 Magic Squares ...

  6. 哈工大软件构造Lab2实验

  7. [HITSC]哈工大2020春软件构造Lab3实验报告

    Github地址 1 实验目标概述 本次实验覆盖课程第 3.4.5 章的内容,目标是编写具有可复用性和可维护 性的软件,主要使用以下软件构造技术: 子类型.泛型.多态.重写.重载 继承.代理.组合 常 ...

  8. HIT 软件构造 lab3实验报告

    2020年春季学期 计算机学院<软件构造>课程 Lab 3实验报告 姓名 赵旭东 学号 1180300223 班号 1803002 电子邮件 1264887178@qq.com 手机号码 ...

  9. (软件构造)2022哈工大软件构造 lab2内容以及心得

    2022年春季学期 计算学部<软件构造>课程 Lab 2实验报告 姓名 艾浩林 学号 120L021917 班号 2003006 电子邮件 2017869860@qq.com 手机号码 1 ...

最新文章

  1. 《为什么在多核处理器下需要内存屏障(MenmoryBarrier)?》
  2. 荐六十款针对Hadoop和大数据顶级开源工具
  3. 学着造轮子-RxLifeCycle
  4. 在GridView中使用Cache
  5. x265-确定slice type-2
  6. 关于人行acs对账不及时_记工记账新方法,不用本子不用笔,一个手机全搞定
  7. 吴恩达|机器学习作业2.0Logistic 回归
  8. Google 又又又要“重回中国”了?
  9. mac下8080端口到80端口的转发
  10. css特效一:文字覆盖图像悬停效果
  11. Nginx访问间歇性卡顿的解决办法
  12. 在记事本上用java写一段代码,程序到底是如何跑起来的?
  13. 10.cocos2d坐标系
  14. RMON学习笔记(二)
  15. win10如何修改锁屏(欢迎界面)的用户名
  16. Python列表,元组,字典,集合 练习
  17. PHP 第三方登录学习笔记
  18. 315护眼灯测试哪一款合格?盘点315合格儿童护眼灯品牌
  19. Mysql的介绍和软件环境的部署
  20. 一起学JAVA 学习路线 知识体系Plus

热门文章

  1. 详图讲解U盘安装windows8系统
  2. oracle 修改po税api_Oracle PO控制状态变更
  3. C语言花样霓虹灯程序,LM4229显示屏的单片机按键控制多种花样霓虹灯设计报告与源码...
  4. 4个经典案例:国外社交媒体是这样病毒性营销的
  5. excel分类_excel分类汇总
  6. CompletableFuture(异步编程)
  7. Integer源码详解
  8. Windows 10源代码泄露风波(上)
  9. 如何查看电脑运行记录
  10. 平头哥RVB2601测评:web播放器