软件构造第一次实验

软件构造第一次实验

开发环境(JDK、Eclipse、Git)

JDK配置:下载JDK10.02及配置本机环境变量
java系统环境变量配置在这里插入图片描述
Eclipse(基于Java的可扩展开发平台):
在这里插入图片描述
GIt(操作本地仓库及远程仓库):

git add:将本地文件增加到暂存区

git commit:将暂存区的内容 提交到 本地仓库(本地分支,默认master分支)

git push:将本地仓库内容 推送到 远程仓库(远程分支)

git pull:将远程仓库(远程分支)内容 拉取到 本地仓库(本地分支)

git branch :查看所有分支

git checkout xxx:切换分支到xxx

git checkout xxx -f:强制切换分支到xxx

git checkout -d xxx:创建并切换到xxx分支

git branch -d xxx:删除xxx分支

git branch -D xxx:强制删除xxx分支

一篇有关Git相关操作的文章:https://blog.csdn.net/qq_40323256/article/details/92384334

JAVA学习

本次实验主要是考察让我们利用JAVA语言进行编程

Java是一种面向对象语言

面向对象编程三大特性------封装、继承、多态

支持以下基本概念:

· 多态

· 继承

· 封装

· 抽象

· 类

· 对象

· 实例

· 方法

· 重载

本次实验涉及到了许多JAVA的类、接口、方法。
具体见实验内容

具体实验

实验一 Magic Squares (MIT)

实验内容描述:

isLegalMagicSquare()函数判断输入的txt文件(矩阵)是否是Magic Squares
generateMagicSquare()函数输入正奇数生成一个Magic Squares

实验主要操作:

首先将下载的txt文件放置在我的仓库的src目录下的P1子目录的txt子目录下,通过txt文件的相对路径(例:src/P1/txt/1.txt)读取文件内容。先一行一行的读取文件内容,再通过(“\t”)将单个数字分隔开,再通过Integer.valueOf(String)将String转为int 型数据。在整个过程记录行数,每行的列数,每行的总和,每列的总和,斜对角线总和。进行Magic Squares所需要求判断,不满足提示错误信息并输出false,满足则输出true。

文件读取相关操作:

FileReader()
BufferedReader ()
readLine()
split()

当文件中的数据不符合 Magic Square 的定义(行列数不相等、并非矩阵等)、矩阵中的某些数字 并非正整数、数字之间并非使用\t 分割等;我们在 isLegalMagicSquare()函数进行判断并抛出异常Main函数利用 try{} catch{} 捕获异常输出错误信息并退出。

generateMagicSquare()函数操作流程
在这里插入图片描述

实验二 Turtle Graphics

实验内容描述:

首先我们要利用Git相关操作下载实验二内容

实验主要内容:

(1) 绘制多边形:

通过forward()、turtle(),color()方法进行海龟的移动及前进角度偏转及线路颜色选择。

通过多边形内角和及边数的关系,由已知边数求得内角,再求得外角得到turn()的角度偏转。

(2) 计算偏转角

计算从当前位置移动至目标位置所需方向偏转(当前位置已有偏转角)

(3) 凸包算法

利用礼物包装算法,依次求得最小偏转角的点,即所提供的点集的凸包点集。

(4) 个性化绘制。通过提供的方法自己设计图形

实验二的每个方法实现相关在每个函数的上方都有相关规约,我们根据规约实现函数

实验二我重点想说的是凸包问题

首先我们要了解什么是凸包:
凸包(Convex Hull)是一个计算几何(图形学)中的概念。

在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包。X的凸包可以用X内所有点(X1,…Xn)的凸组合来构造.

在二维欧几里得空间中,凸包可想象为一条刚好包著所有点的橡皮圈。

用不严谨的话来讲,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。

*** 凸包求解

实验所需JAVA类: Set类、 HashSet
我采用的是礼物包装算法:

选取从当前位置移动所需偏转角度最小的点,依次选取直至回到起始点。

首先进行输入点列所含点数的判断,若点数<=3,则输入的点序列就是凸包的点序列。

若输入点序列大于3,首先进行起始点选取:与原点相距最远的点一定是凸包的点。

再利用已实现的calculateBearingToPoint(double currentBearing, int currentX, int currentY, int targetX, int targetY)方法求取偏转角度最小的点,若两个点所需的偏转角度相同,选择两个点中距离更大的点,并将当前点前面所有点的偏转角相加得到当前点已经偏转的角度。

实验三 Social Network

实验内容:

实验三拟刻画的社交网络是无向图,建立社会人物关系图,通过人物关系计算两个人之间的最短路径。人物关系为整个图,每个人为图中的一点,人与人之间存在关系,两点间就有线连接。

Person类为一个一个的人个体,name,friendslist是Person的内部属性,设计方法实现获取name及friendslist

FriendshipGraph类描绘的就是社交网络,实现往社会中添加人,添加人物关系,获取人与人之间的最短距离
** JAVA相关类:
HashSet 避免重名情况 出现重名我们抛出异常,Main函数捕获异常输出错误信息并退出

*** 获取最短距离

实验三我主要想说如何获取人与人之间的最短距离

采取广度搜索的方法,利用队列先进先出的规律,利用HashMap建立人物与最短路径一一对应的关系。根据人物关系列表,求取最短路径。

测试

软件构造与我们之前所学习的课程不同的是,这门课不仅仅是要编写程序来构造软件,我们还要有更多方面的考虑。

  1. 了解软件开发过程中应考虑哪些质量目标
    我们不仅要实现软件构造,还要实现质量高的软件构造,要知道从哪些方面来考量软件
  2. 掌握面向关键质量目标的软件基本构造技术
  3. 形成面向质量目标的软件开发思维模式

构造软件,最重要的是正确性

测试是检验软件构造的重要手段、提高软件质量的重要手段

测试分为:有效测试、无效测试
我们编写测试用例来验证程序的是否满足我们的要求
测试用例:输入+执行条件+期望结果

测试用例划分:

基于等价类划分的测试:将被测函数的输入域划分为等价类, 从等价类中导出测试用例。 :相似的输入,将会展示相似的行为。故可从每个等价类中选一个代表作为测试用例即可 ,从而可以降低测试用例数量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值