zoukankan      html  css  js  c++  java
  • 哈工大2020春软件构造Lab1笔记

    去年因为出去交换对方学校没有软件构造课,于是只能大三补修。
    HIT的软件构造课分数构成中有5%是日常积累也就是写博客
    因此本系列博客将记录我在本学期的软件构造课程中的一些感想与收获

    实验内容与要求

    • MagicSquare
      第一问是判断一个矩阵是否满足每行、每列以及对角线之和都相等,另外还需判断输入格式是否满足要求;第二问是给一个已经写好的生成MagicSquare的算法,要求理解即可。锻炼基本的Java操作。

    • Turtle Graphics
      这个问题是MIT6.031课程中的一个题目,实验要求也基本和MIT一致。
      其中也分了很多小问题,基本都比较简单,个别地方需要注意四舍五入以及单位、坐标转换之类的东西。倒数第二问是求凸包。

    • Social Network
      这是CMU17-214课程的一道题目,要求实现一个“朋友关系”的图,并且能够计算图中任意两人之间的距离,抽象来说就是边上权重为1的无向图,以及求两点间的最短路径。

    实验过程

    整个实验大概花了一周多的时间。因为之前没用过Java,前期对Java的摸索比较费时间,但了解了之后发现其实Java的逻辑还是比较清晰的,包括目录、测试等之前没注意过的地方。

      实验中比较难的问题大概就是P2的求凸包了,虽然网上现成的代码很多,但是要想比较好地理解Gift wrapping和Graham Scan算法也需要花上一段时间。一开始我以为Graham算法就已经是效率最高的算法,后来在网上查了之后才知道有一个Chan's algorithm,是一种将Gift wrapping和Graham Scan结合的算法。三种算法的介绍
      在做凸包问题的测试时,MIT给的Test是直接判断

    assertEquals(convexHull, TurtleSoup.convexHull(points));
    

      两个对象都是HashSet类型的,而Set实现了equals接口,因此这句比较的是两个集合中的元素是否相等。然而我在一开始实现convexHull函数时,不知道怎么想的,对每个点都是新建了一个坐标与其相等的新对象加入集合,于是得到的结果和Test中的convexHull虽然每个点的坐标都相等,但是并不是同一个对象,在这里卡了半个小时才意识到这里比较的是对象,因此不用新建对象,直接把输入的点加入凸包即可。
      本实验另一个比较重要的就是JUnit了,这是我第一次接触单元测试。刚开始我不理解什么是单元测试,有点怀疑它的功能是不是跟debug重合了。而实际使用过就大概明白了JUnit的作用:它是测试所有的方法是否正确的工具,即对每一个方法,提供一些测试用例,判断这个方法的输出是否正确,如果不正确,则可以进一步debug检查具体哪里出错。单元测试是软件开发过程中测试的第一阶段,对一个很大规模的软件,运行JUnit测试后便可很快发现哪些方法正确、哪些方法出错,是一种效率很高的测试。
      为一个Java项目添加JUnit的过程如下:

    使用Travis-CI

      由于实验指导书上说为了保证TA能正确执行我们提交的代码,最好在提交前脱离本地eclipse环境进行build。于是我便尝试在Travis CI上进行在线build(参考文章)。

    1.在Travis-CI官网用github账号登录

      登录成功后会看到左侧自己的项目

    2.在Lab1目录下新建File, 命名为.travis.yml

      内容如下图所示
      

    3.将项目转换为Maven项目

      Lab1->右键->Configure->Convert to Maven,这时Lab1下会出现pom.xml文件。接下来需要在(https://mvnrepository.com/) 查找你用到的jar包,并将下方的代码复制到pom.xml中:


      注意由于不只在test中用到了JUnit(P2的src下也有TurtleSoupTest),所以要把<scope>test</scope>那一行去掉。
      最后将.travis.yml和pom.xml push到你的git仓库,Travis-CI就会自动build,这里显示pass就代表可以成功build了

    总结

      本次实验总的来说难度不大,关键是让我们熟悉git、eclipse、JUnit等工具的使用,ddl设置也比较合理。

  • 相关阅读:
    UI进阶--UIPikcerView实现餐点搭配示例
    UI基础--UITableView实现仿QQ好友列表页面
    通知和代理
    UI基础--UITableView实现仿QQ聊天页面
    UI基础--UITableView实现仿微博页面
    UI基础--UITableView,UITableViewDataSource,UITableViewDelegate的一些属性和方法
    UI基础--使用UIScrollView、UIPageControl、NSTimer实现图片循环播放
    UI基础--UIScrollView和UIScrollViewDelegate
    NSURLSession 简介
    Core Animation
  • 原文地址:https://www.cnblogs.com/shijiyuanaa/p/12402169.html
Copyright © 2011-2022 走看看