软件构造lab2

  1. 实验目标概述

根据实验手册简要撰写。

针对给定的应用问题,从问题描述中识别所需的ADT

设计ADT规约(pre-conditionpost-condition)并评估规约的质量;

根据ADT的规约设计测试用例;

ADT的泛型化;

根据规约设计ADT的多种不同的实现;针对每种实现,设计其表示(representation)、表示不变性(rep invariant)、抽象过程(abstraction function

使用OOP实现ADT,并判定表示不变性是否违反、各实现是否存在表示泄露(repexposure

测试ADT的实现并评估测试的覆盖度;

使用ADT及其实现,为应用问题开发程序;

在测试代码中,能够写出testing strategy并据此设计测试用例。

  1. 实验环境配置

简要陈述你配置本次实验所需环境的过程,必要时可以给出屏幕截图。

特别是要记录配置过程中遇到的问题和困难,以及如何解决的。

安装配置EclEmma

在这里给出你的GitHub Lab2仓库的URL地址(Lab2-学号)。

  1. 实验过程

请仔细对照实验手册,针对三个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。

    1. Poetic Walks

在这里简要概述你对该任务的理解。

实现并测试具有标记顶点的Graph。然后实现一个使用单词的图生成诗歌的类

      1. Get the code and prepare Git repository

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。

从实验指南中发布的链接上直接下载获取

      1. Problem 1: Test Graph <String>

以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。

  1. testadd():测试能不能加入新顶点
  2. testSet():测试能不能加入一条新边
  3. testRemove():在图中加入一条边,然后删除某顶点,测试这条边是否还存在
  4. testVertices():向图中加入顶点测试集合是否正确
  5. testsSources():向图中加入顶点和边测试是否返回源头点和权重
  6. testTargets():向图中加入顶点和边测试测试某顶点相连是否正确
      1. Problem 2: Implement Graph <String>

以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。

        1. Implement ConcreteEdgesGraph

Edge:用source表示源点,target表示目标点,weight表示权重,编写get以上三种数据,然后检查是否存在非法数据

        1. Implement ConcreteVerticesGraph

Vertex:用vertexname表示顶点,map存储与改点有关的数据,check检查是否存在空顶点。

      1. Problem 3: Implement generic Graph<L>
        1. Make the implementations generic

搜索所有的string并将其转换为L

        1. Implement Graph.empty()

利用conctreteedgesgraph()实现Graph.empty()

      1. Problem 4: Poetic walks
        1. Test GraphPoet

借助测试用例实现功能

        1. Implement GraphPoet

从文本中获得单词图,返回处理好的字符串

        1. Graph poetry slam

      1. 使用Eclemma检查测试的代码覆盖度
      2. Before you’re done

请按照C:\Users\a\Downloads\before_youre_donehttp://web.mit.edu/6.031/www/sp17/psets/ps2/#before_youre_done的说明,检查你的程序。

如何通过Git提交当前版本到GitHub上你的Lab2仓库。

在这里给出你的项目的目录结构树状示意图。

    1. Re-implement the Social Network in Lab1

在这里简要概述你对该任务的理解。

在定义了Graph的情况下,实现friendshipgraph类

      1. FriendshipGraph类

给出你的设计和实现思路/过程/结果。

用Graph表示人物关系

Addvertex()添加顶点

Getdistance()寻找最短路径并返回路径长度

      1. Person类

给出你的设计和实现思路/过程/结果。

Name表示顶点名字。

Distance表示最短距离。

Map存储所有相连顶点及其权重

List存储所有相连顶点

Check检查是否有重复级和空元素

      1. 客户端main()

给出你的设计和实现思路/过程/结果。

由lab1实验指南可得

      1. 测试用例

给出你的设计和实现思路/过程/结果。

      1. 提交至Git仓库

如何通过Git提交当前版本到GitHub上你的Lab3仓库。

Git add

Git commit -m “xxxx”

Git push origin master

在这里给出你的项目的目录结构树状示意图。

  1. 实验进度记录

请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。

每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。

不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。

日期

时间段

计划任务

实际完成情况

2021/6/5

19:00-22:00

3.1

完成

2021/6/7

19:00-22:00

3.2

粗糙完成

2021/6/13

12:00-16:00

修改bug,完成报告

完成

  1. 实验过程中遇到的困难与解决途径

遇到的难点

解决途径

函数较为复杂,编写过程中多次出现问题

继续练习,熟练编写技巧

分析图中关系时顺序混乱

从头理头绪

  1. 实验过程中收获的经验、教训、感想
    1. 实验过程中收获的经验和教训

丰富了对于不同类的理解和应用,进一步提高了编程和算法能力

    1. 针对以下方面的感受
  1. 面向ADT的编程和直接面向应用场景编程,你体会到二者有何差异?

ADT能够复用数据结构和一系列方法,让代码更加清晰

  1. 使用泛型和不使用泛型的编程,对你来说有何差异?

泛型更方便但限制条件多

  1. 在给出ADT的规约后就开始编写测试用例,优势是什么?你是否能够适应这种测试方式?

在一边实现具体类时可以一边测试,利于修改

  1. P1设计的ADT在多个应用场景下使用,这种复用带来什么好处?

能够提高效率

  1. P3要求你从0开始设计ADT并使用它们完成一个具体应用,你是否已适应从具体应用场景到ADT的“抽象映射”?相比起P1给出了ADT非常明确的rep和方法、ADT之间的逻辑关系,P3要求你自主设计这些内容,你的感受如何?

还没理解透彻,仍感到一些困难

  1. ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,这些工作的意义是什么?你是否愿意在以后编程中坚持这么做?

使开发者能够注意步骤,避免编程混乱

  1. 关于本实验的工作量、难度、deadline

工作量比较大,需要比较长的时间

  1. 《软件构造》课程进展到目前,你对该课程有何体会和建议?

学会了如何提高效率,实现更好的编译

  1. 实验目标概述

根据实验手册简要撰写。

针对给定的应用问题,从问题描述中识别所需的ADT

设计ADT规约(pre-conditionpost-condition)并评估规约的质量;

根据ADT的规约设计测试用例;

ADT的泛型化;

根据规约设计ADT的多种不同的实现;针对每种实现,设计其表示(representation)、表示不变性(rep invariant)、抽象过程(abstraction function

使用OOP实现ADT,并判定表示不变性是否违反、各实现是否存在表示泄露(repexposure

测试ADT的实现并评估测试的覆盖度;

使用ADT及其实现,为应用问题开发程序;

在测试代码中,能够写出testing strategy并据此设计测试用例。

  1. 实验环境配置

简要陈述你配置本次实验所需环境的过程,必要时可以给出屏幕截图。

特别是要记录配置过程中遇到的问题和困难,以及如何解决的。

安装配置EclEmma

在这里给出你的GitHub Lab2仓库的URL地址(Lab2-学号)。

  1. 实验过程

请仔细对照实验手册,针对三个问题中的每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。

    1. Poetic Walks

在这里简要概述你对该任务的理解。

实现并测试具有标记顶点的Graph。然后实现一个使用单词的图生成诗歌的类

      1. Get the code and prepare Git repository

如何从GitHub获取该任务的代码、在本地创建git仓库、使用git管理本地开发。

从实验指南中发布的链接上直接下载获取

      1. Problem 1: Test Graph <String>

以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。

  1. testadd():测试能不能加入新顶点
  2. testSet():测试能不能加入一条新边
  3. testRemove():在图中加入一条边,然后删除某顶点,测试这条边是否还存在
  4. testVertices():向图中加入顶点测试集合是否正确
  5. testsSources():向图中加入顶点和边测试是否返回源头点和权重
  6. testTargets():向图中加入顶点和边测试测试某顶点相连是否正确
      1. Problem 2: Implement Graph <String>

以下各部分,请按照MIT页面上相应部分的要求,逐项列出你的设计和实现思路/过程/结果。

        1. Implement ConcreteEdgesGraph

Edge:用source表示源点,target表示目标点,weight表示权重,编写get以上三种数据,然后检查是否存在非法数据

        1. Implement ConcreteVerticesGraph

Vertex:用vertexname表示顶点,map存储与改点有关的数据,check检查是否存在空顶点。

      1. Problem 3: Implement generic Graph<L>
        1. Make the implementations generic

搜索所有的string并将其转换为L

        1. Implement Graph.empty()

利用conctreteedgesgraph()实现Graph.empty()

      1. Problem 4: Poetic walks
        1. Test GraphPoet

借助测试用例实现功能

        1. Implement GraphPoet

从文本中获得单词图,返回处理好的字符串

        1. Graph poetry slam

      1. 使用Eclemma检查测试的代码覆盖度
      2. Before you’re done

请按照C:\Users\a\Downloads\before_youre_donehttp://web.mit.edu/6.031/www/sp17/psets/ps2/#before_youre_done的说明,检查你的程序。

如何通过Git提交当前版本到GitHub上你的Lab2仓库。

在这里给出你的项目的目录结构树状示意图。

    1. Re-implement the Social Network in Lab1

在这里简要概述你对该任务的理解。

在定义了Graph的情况下,实现friendshipgraph类

      1. FriendshipGraph类

给出你的设计和实现思路/过程/结果。

用Graph表示人物关系

Addvertex()添加顶点

Getdistance()寻找最短路径并返回路径长度

      1. Person类

给出你的设计和实现思路/过程/结果。

Name表示顶点名字。

Distance表示最短距离。

Map存储所有相连顶点及其权重

List存储所有相连顶点

Check检查是否有重复级和空元素

      1. 客户端main()

给出你的设计和实现思路/过程/结果。

由lab1实验指南可得

      1. 测试用例

给出你的设计和实现思路/过程/结果。

      1. 提交至Git仓库

如何通过Git提交当前版本到GitHub上你的Lab3仓库。

Git add

Git commit -m “xxxx”

Git push origin master

在这里给出你的项目的目录结构树状示意图。

  1. 实验进度记录

请使用表格方式记录你的进度情况,以超过半小时的连续编程时间为一行。

每次结束编程时,请向该表格中增加一行。不要事后胡乱填写。

不要嫌烦,该表格可帮助你汇总你在每个任务上付出的时间和精力,发现自己不擅长的任务,后续有意识的弥补。

日期

时间段

计划任务

实际完成情况

2021/6/5

19:00-22:00

3.1

完成

2021/6/7

19:00-22:00

3.2

粗糙完成

2021/6/13

12:00-16:00

修改bug,完成报告

完成

  1. 实验过程中遇到的困难与解决途径

遇到的难点

解决途径

函数较为复杂,编写过程中多次出现问题

继续练习,熟练编写技巧

分析图中关系时顺序混乱

从头理头绪

  1. 实验过程中收获的经验、教训、感想
    1. 实验过程中收获的经验和教训

丰富了对于不同类的理解和应用,进一步提高了编程和算法能力

    1. 针对以下方面的感受
  1. 面向ADT的编程和直接面向应用场景编程,你体会到二者有何差异?

ADT能够复用数据结构和一系列方法,让代码更加清晰

  1. 使用泛型和不使用泛型的编程,对你来说有何差异?

泛型更方便但限制条件多

  1. 在给出ADT的规约后就开始编写测试用例,优势是什么?你是否能够适应这种测试方式?

在一边实现具体类时可以一边测试,利于修改

  1. P1设计的ADT在多个应用场景下使用,这种复用带来什么好处?

能够提高效率

  1. P3要求你从0开始设计ADT并使用它们完成一个具体应用,你是否已适应从具体应用场景到ADT的“抽象映射”?相比起P1给出了ADT非常明确的rep和方法、ADT之间的逻辑关系,P3要求你自主设计这些内容,你的感受如何?

还没理解透彻,仍感到一些困难

  1. ADT撰写specification, invariants, RI, AF,时刻注意ADT是否有rep exposure,这些工作的意义是什么?你是否愿意在以后编程中坚持这么做?

使开发者能够注意步骤,避免编程混乱

  1. 关于本实验的工作量、难度、deadline

工作量比较大,需要比较长的时间

  1. 《软件构造》课程进展到目前,你对该课程有何体会和建议?

学会了如何提高效率,实现更好的编译

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值