Skip to content

arong489/OO_Unit3

Repository files navigation

Unit 3

前言

本单元的背景是慢变化的社交网,在这个网络上模拟节点和边的变化,模拟发信和一些图上算法

具体任务是根据JML注释 翻译 代码,课程组为了培养 测试 和 规格意识 出个这单元感觉不是很成功

唯一需要思考的就是社交网上的最小环求解问题,我采用的有标签的多起点dijkstra算法。初始时给目标节点周围的直连节点加上标签并将其作为起点,寻路过程中,标签交汇时就比较一次最小值。

测试

黑箱测试

黑箱测试:已知产品的功能设计规格,可以通过测试证明每个实现了的功能是否符合要求。软件的黑箱测试意味着测试要在软件的接口处进行。这种方式是把测试对象看做一个箱子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格(JML)说明书,检查程序的功能是否符合它的功能说明。因此黑箱测试又叫做功能测试或数据驱动测试。黑箱测试主要是为了发现以下几类错误:

  • 是否有不正确或遗漏的功能?
  • 在接口上,输入是否能正确地接受?能否输出正确的结果?
  • 是否有数据机构错误或外部信息(例如数据文件)访问错误?
  • 性能上是否能够满足要求?
  • 是否有初始化或终止性错误?

白箱测试

白箱测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。软件的白箱测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的箱子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期状态一致。因此白箱测试又称为结构测试或逻辑驱动测试。白箱测试主要是想对程序模块进行如下检查。

  • 对程序模块的所有独立的执行路径至少测试一遍
  • 对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一遍。
  • 在循环的边界和运行的界限内执行循环体。
  • 测试内部数据结构的有效性等。

单元测试

开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个定义函数的行为。

单元测试是由程序员自己来完成,最终受益的也是程序员自己。程序员有责任编写功能代码,同时也有责任为自己的代码进行单元测试。执行单元测试,就是为了保证局部行为和我们期望的一致。

功能测试

对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。一般通过黑箱测试进行验证

集成测试

集成测试(也叫作组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:将两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将一个模块与其他组的模块一起测试。最后,将构成进程的所有模块一起进行测试。

压力测试

测试验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃。验证其甚至可以测试超出正常工作点的测试,并评估软件在极端条件下的工作情况。

回归测试

对软件的原来状态重新进行功能和非功能的测试,用以确保先前开发并测试过的软件在缺陷修复、配置改变、软件更新等等这些变化之后,仍能符合要求的运行,确保迭代过程没有引入新的问题。

测试工具

找大佬要数据生成,然后自己写几行powershell进行对拍

数据构造策略

生成大量随机数据进行强度测试 手搓小数据对不确定的功能模块单元测试

架构设置

架构课程组已经给好了,是固定的,指:用runner访问,network调配,person、message等进行最终的数据修改。 甚至容器的指向很明确,我认为同学们应该都是一样的 不一样在于用foreach循环还是迭代器 唯一自己有不一样的就是算法的选择,但是能过的简单的算法有限所以算法应该也是只有几种

图模型构建和维护策略

适应课程组提供的模型,记录点(Person)集合,点记录边关系 本次作业没有动态维护,联通(双向bfs),联通块数目(并查集),三元环(普通的遍历),最小环(路径树,有标记的dijkstra),都是运行时现场算,极大降低编程难度、维护成本,并且正确性有保障(速度以外的都好)好在没有数据点卡我

分析性能问题及修复情况

本单元作业没有出现性能问题,但是出现了一些小问题

hw9 : OKtest内 keyset误写 values hw10: 没考虑没有couple的情况导致运行错误(加入0标记没有couple) hw11: 用0标记没有couple(用NULL标记没有couple)

规格和实现分离

省流:定了标准苦了程序员

JML到现在我也不知道是哪个角色来写,但是个人认为一定不是用户,也觉得不是测试人员写的(开发应该在测试之前),难道是项目经理、架构师这类人吗?

不可否认,jml比起自然语言更能说明细节上的问题,细到告诉你这里报什么错,返回什么值。但是也十分的不直观,有一种拿着离散数学写代码的美感,同时实现人员要先阅读大量的jml推测每个数据的意义再进行编写,否则容易重写

当然以上坏处建立在不是实现人员写这个规格,如果是,那就只有好处了

OK测试方法

  • jml对码农是不够直观的,能用上的大概就是做单元测试
  • 从完成作业的角度没什么问题但是测试OKtest是坏文明(测试 测试模块)
  • Oktest建议新开类封成静态方法,私以为不该放 network(给理解hw9造成了不小的confuse)
  • 限定ml语法使得其支持openJML,然后用openJML验证代码,极大提升jml的地位

学习体会

  1. 算法要求太高了,对我十分不友好
  2. 本单元教会了我怎么做码农,照着框架直接填写代码
  3. 学会了一些jml,至少可以阅读了

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages