301
社区成员
发帖
与我相关
我的任务
分享黑箱测试中,测试人员无需了解程序的内部实现和代码结构。测试的重点在于验证软件的功能和用户界面,确保输入数据能够产生预期的输出结果。这种方法适用于功能测试、用户界面测试和系统测试,能够有效发现软件功能上的缺陷,但可能无法识别内部代码的逻辑错误。
白箱测试是一种基于程序内部实现进行测试的方法。测试人员需要深入了解程序的代码结构和逻辑,通过分析源代码来设计测试用例。白箱测试的目标是验证程序的内部逻辑是否正确,检查代码路径、分支和循环等是否按预期运行。这种方法可以发现代码中的逻辑错误、潜在的漏洞和性能问题,通常用于单元测试和集成测试,确保代码质量和可靠性。
单元测试用于验证软件中最小可测试部分的正确性。开发人员编写测试用例,针对单个模块或组件进行测试,以确保每个部分独立运行时都能达到预期效果。
功能测试旨在验证软件的各项功能是否按照需求文档中的规定正常工作。测试人员通过输入不同的数据并观察输出结果,确保每个功能模块都能正确处理输入并产生期望的输出,确保用户需求得到满足。
集成测试用于验证不同模块或组件在集成后能否协同工作。测试人员将各个单元模块集成在一起,测试它们之间的接口和交互,确保系统的各个部分能够无缝结合,检测集成过程中的错误和不兼容问题。
压力测试用于评估软件在超出正常工作负载情况下的表现。测试人员通过模拟高负载、高并发的使用场景,观察系统的稳定性和响应能力,帮助发现系统在极端条件下的瓶颈和性能问题,确保软件在高负荷下依然能可靠运行。
回归测试用于检查软件在修改或更新后,是否仍然正确执行之前已经测试通过的功能。测试人员重复执行已有的测试用例,确保新代码的引入没有引起已有功能的缺陷或错误,从而维持软件的稳定性和可靠性。
本单元图构建的基本逻辑遵循JML描述,但在MyNetwork中我添加了一个私有类Graph如下,Graph提供了简单的连通性查询、深度查询等功能,使得MyNetwork能够不过度关心图的操作算法,而只需要调用Graph的方法即可。
public class Graph {
private HashMap<Integer, MyPerson> graph;
private HashMap<Integer, Boolean> visited;
private HashSet retSet = new HashSet<>();
private MyNetwork network;
private Queue<Node> nodeQueue = new LinkedList<>();
private int depth = 0;
public Graph(HashMap<Integer, MyPerson> graph, MyNetwork network) {
this.graph = graph;
visited = new HashMap<>();
this.network = network;
}
public void init() {
......
}
public HashSet getRetSet(int id) {
......
}
public void dfs(int id) {
......
}
public void bfs(int id1, int id2) {
......
}
public int shortPath(int id1, int id2) {
......
}
public void newModifyTag(int id1, int id2, int value) {
......
}
在图维护中,我使用并查集维护图的连通块、使用DFS更新并查集、使用BFS得到qsp,其它的维护内容则通过HashMap等容器的简化过程进行维护。
本单元中我在第一次作业中出现了性能问题,因为未对qts进行优化,之后对qts进行维护便解决了问题。
对于本单元规格与实现分离来说,我认为规格只是一个标准,一个基线,它可以对权责进行划分,而不仔细关注实现的好坏。
这种规格与实现基本分离的思维其实体现了程序的“设计”优先、“分层”思维,我们将一个复杂的任务逐步分解开来,一层一层地解析任务,我认为这是规格地核心背景。
本单元我的JUnit测试思路是:
1.使用随机数据与特殊数据结合构造图
2.对每个JML语句进行单独的Assert
3.对所有涉及的类属性进行单独判断
只要遵循了上述的测试设计逻辑,那么Junit应当能做到与规格一致的测试。
本单元的基础内容逻辑十分清晰,JML和Junit两个学习内容只要花时间就能逐步理解,感谢老师与助教。但在“评测”方面,强测对于“细小的差错”的容忍度有点过于苛刻。