软件构造第一次实验
软件构造第一次实验
文章目录
开发环境(JDK、Eclipse、Git)
JDK配置:下载JDK10.02及配置本机环境变量
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.****.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建立人物与最短路径一一对应的关系。根据人物关系列表,求取最短路径。
测试
软件构造与我们之前所学习的课程不同的是,这门课不仅仅是要编写程序来构造软件,我们还要有更多方面的考虑。
- 了解软件开发过程中应考虑哪些质量目标
我们不仅要实现软件构造,还要实现质量高的软件构造,要知道从哪些方面来考量软件 - 掌握面向关键质量目标的软件基本构造技术
- 形成面向质量目标的软件开发思维模式
构造软件,最重要的是正确性;
测试是检验软件构造的重要手段、提高软件质量的重要手段
测试分为:有效测试、无效测试
我们编写测试用例来验证程序的是否满足我们的要求
测试用例:输入+执行条件+期望结果
测试用例划分:
基于等价类划分的测试:将被测函数的输入域划分为等价类, 从等价类中导出测试用例。 :相似的输入,将会展示相似的行为。故可从每个等价类中选一个代表作为测试用例即可 ,从而可以降低测试用例数量