哈工大软件构造lab2实验报告

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>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运行如下
    哈工大软件构造lab2实验报告_第1张图片
    3.1.6 Before you’re done
    Git add
    Git commit -m “xxxx”
    Git push origin master
    哈工大软件构造lab2实验报告_第2张图片
    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()
    哈工大软件构造lab2实验报告_第3张图片
    3.2.4 测试用例
    带入具体数据进行测试,测试上述部分是否有错误。
    哈工大软件构造lab2实验报告_第4张图片
    3.2.5 提交至Git仓库
    Git add
    Git commit -m “xxxx”
    Git push origin master
    哈工大软件构造lab2实验报告_第5张图片
    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设计/实现方案
    客户端首先读入玩家选择游戏的种类。
    在这里插入图片描述
    接下来按照输入调用游戏方法并初始化玩家名字
    哈工大软件构造lab2实验报告_第6张图片
    在游戏中针对操作则由客户端进行输入并检查输入是否合法
    在这里插入图片描述
    如果合法则有由相应的game类执行操做,并由对应的action判断操作是否正确,如果操作合法则记录操作,并进入下一个玩家回合。如果输入是end则结束游戏并选择是否查看历史。
    演示截图(chess为例):游戏开始:
    哈工大软件构造lab2实验报告_第7张图片
    查询:
    哈工大软件构造lab2实验报告_第8张图片
    统计(玩家1吃了玩家2一个子):
    哈工大软件构造lab2实验报告_第9张图片
    历史:
    哈工大软件构造lab2实验报告_第10张图片
    3.3.3 ADT和主程序的测试方案
    简单测试了一下GoGame和ChessGame的方法

你可能感兴趣的:(哈工大软件构造lab2实验报告)