大二下面向对象设计与构造课程总结-3
title: 大二下面向对象设计与构造课程总结-3
第三单元博客总结
测试过程的分析
-
黑箱测试
黑箱测试即功能测试,主要用于检测软件的每一个功能是否可以正常使用,在测试中,我们将软件程序看作一个不可开启的黑箱,在不考虑软件程序内部的结构与特性的基础上对软件接口进行测试,进而检查程序功能是否按照相应的设计需求和规定正常打开使用
-
白箱测试
白箱测试即结构内部测试,用于检测软件编码内部的具体错误,即检查编码质量和内部正确性
-
单元测试
对软件基本组成单元进行测试,如具体到函数或者方法,单元具备一些基本的属性,例如明确的功能、规格定义、明确的与其他部分的接口定义等等,使其可以清晰地与同一程序的其他单元划分开来
-
功能测试
类似于黑盒测试,基于测试样例,确保样例结果与设想一致即可
-
集成测试
将软件集成起来后进行测试,又叫子系统测试、组装测试、部件测试等,集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试,主要是测试接口之间的关系
-
压力测试
压力测试,也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等,其中时间和空间方面的性能考察为主
-
回归测试
在软件项目中,开发人员在修改了软件的代码以修复已经发现的bug后,测试人员在需要重新测试前面已经测试过的内容,以确认此次修改没有引入新的错误。 也就是说,回归测试的目的就是检查开发人员在修复已有bug时是否又导致了新的bug,即重点检测代码的修改是否正确且有效
-
数据构造策略
在本单元中,测试样例的构造主要是基于
JML的规格要求,并且需要测试到exceptional_behavior,除此之外的构造策略与前面的单元并无太大差别,仅需保证能覆盖到所有的功能和特殊情况即可,评测机随机嗯造就完事了
架构设计
-
图模型构建
对本单元的社交网络架构图,我主要采用了并查集来作为图模型的构建结构,即通过创建和维护各个元素的根节点来减少如
qci等操作时的时间开销,进而保证总体软件架构的性能,根节点这一单一变量的创建可以帮助我们更加高效的得知两个元素之间是否具有路径,即他们是否可以构成圈,因此在维护并查集的过程中,我们需要着重考虑当关系创建和删除时对应产生的合并与断联的操作,值得一提的是,当涉及到并查集的合并时,我们需要检查两个并查集的秩,并将秩较小的并查集并入到秩大者,从而进一步提高性能public static void merge(MyNetwork myNetwork, int id1, int id2) { MyPerson father1 = myNetwork.getPerson(id1).getFatherNode(); MyPerson father2 = myNetwork.getPerson(id2).getFatherNode(); int rank1 = father1.getRank(); int rank2 = father2.getRank(); if (rank1 > rank2) { father2.changeFatherNode(father1); } else if (rank1 < rank2) { father1.changeFatherNode(father2); } else { father2.changeFatherNode(father1); father1.rankPlus(); } }public static void cut(MyNetwork myNetwork, int id1, int id2) { HashSet<MyPerson> union = new HashSet<>(); bfs(myNetwork, id1, union); for (MyPerson person : union) { person.changeFatherNode(myNetwork.getPerson(id1)); } myNetwork.getPerson(id1).setRank(2); if (union.contains(myNetwork.getPerson(id2))) { return; } myNetwork.addBlockSum(); union.clear(); bfs(myNetwork, id2, union); for (MyPerson person : union) { person.changeFatherNode(myNetwork.getPerson(id2)); } myNetwork.getPerson(id2).setRank(2); } -
数据维护策略
在本单元中,有相当一部分的查询操作如果采用实时计算的策略时会有过大的时间开销,因此我们需要适时采用动态维护策略,例如其中的
qts、qbs等,均需要我们在添加或修改元素关系时对相关变量进行维护,而在研讨课中我也学习到了在软件编程中脏位的使用,如查询tag内的平均年龄这一操作,便可以适时利用好脏位,来进一步地提高其性能,而当并查集的分离发生时,我们则是需要使用bfs或者双向bfs来获取到可能产生的新连通图综上可知,对于规格的解读和实现实际上并不一定需要一对一的实现,我们可以通过更加高效有力的算法来摆脱简单且费时的低级遍历,而这中间的转变和提高正是我们作为编程者需要不断思考与精进的部分
Junit测试与规格信息的利用
在该单元中,我们需要利用好规格中的相应信息来配对Junit的测试,其中我们需要重点关注的不只是我们需要达到的输出匹配,我们更需要关注到一个方法或操作是否会带来规格之外的副作用,此时我们便需要对一个单元或者与其关联单元的其他元素进行检查,进而保证我们实现的功能不会产生无法挽回的错误,而JML的规范性要求则是恰恰帮助了我们对这一部分的维护思路进行完善,例如not assignable关联的变量我们便需要重点关注
心得体会
本单元的难度较低,总体来说是在引导我们对于JML进行相对初步的了解与探索,而对于我而言,该单元亦帮助我精进了我对于代码架构的了解和探知,使我得以从更加具体、更加性能化的角度看待自己的代码架构,同时在该单元中,我们也复习到了相应算法的实现和使用场景,总地来说还是比较充实且受益匪浅的一个月
相关推荐
C++图书管理系统课程设计:内存管理、文件持久化与面向对象实现
C++图书管理系统是高校《C++程序设计》和《数据结构》课程设计的经典项目,其本质是面向对象建模、手动内存管理(new/delete)与文件I/O(fstream二进制读写)三位一体的工程实践。区别于Java/Python的自动内存回收,C++要求开发者显式控制资源生命周期;而标准库文件操作需兼顾编码兼容性(UTF-8)、错误检查(failbit)与数据结构对齐。本文围绕Book类封装、Library系统中枢、VS2022/VSCode双环境配置及三大典型崩溃场景(内存泄漏、文件读取失败、中文输入截断),提
北邮计算机学院C++编程课件全览
C++是一种静态类型、编译式、通用的编程语言。它支持过程化编程、面向对象编程以及泛型编程。作为一种高效的编程语言,C++被广泛应用于软件开发领域,特别是在系统/应用软件开发、游戏开发、实时物理模拟以及操作系统开发等场景中。
Awesome Short Drama Skills-AI短剧和漫剧 技能包
Awesome Short Drama Skills 一个实用的短剧技能包,人工核对收录了80多套开箱即用的Agent Skill。内容贴着实际制作链路整理,从网文IP评估、分集大纲与付费卡点设计,到分镜脚本拆解及去AI味审稿,再到适配Seedance、MiniMax、可灵等主流模型的提示词生成都有涵盖。 大部分采用标准SKILL.md格式,千问、豆包、龙虾OpenClaw、Claude Code等智能体都能直接挂载调用。项目还针对剧本与选题做过多轮盲测对比,给出了不同阶段的避坑建议与搭配组合,很适合用来搭建自动化流水线。 项目收录给 AI 智能体(agent)用的短剧 skill,覆盖小说改编、集纲、钩子和付费卡点、剧本审稿、分镜、角色资产,以及给 Seedance、MiniMax、可灵等视频模型的提示词。大多是标准 SKILL.md 格式,千问办公、豆包电脑版、龙虾(OpenClaw)、WorkBuddy、Kimi Code、Qwen Code、CodeBuddy、Trae、Qoder、Claude Code、Codex 等支持技能的智能体都能装,装法见常见问题。每个项目都经过人工核对,按类型、创作阶段和适配的视频模型整理
【无人机协同】基于matlab动态环境下多无人机系统的协同路径规划与防撞(Matlab代码实现)
内容概要:本文针对动态环境下多无人机系统的协同路径规划与防撞问题,提出了一种基于Matlab的仿真解决方案。通过构建多无人机在复杂动态环境中的运动学与动力学模型,结合改进的智能优化算法(如粒子群优化、遗传算法、布谷鲶鱼优化等),实现了无人机集群在执行任务过程中的高效路径规划、实时避障与安全协同飞行。文中系统阐述了环境建模、威胁区域处理、编队控制策略、路径优化算法设计及防撞机制,并利用Matlab进行算法实现与仿真实验,验证了系统在面对静态障碍物、动态干扰及多目标协同任务时的有效性与鲁棒性。研究还引入分层协同求解框架和仿生搜索机制,提升了路径规划的全局寻优能力与计算效率,为城市空中交通、应急救援、集群侦察等实际应用场景提供了理论支持与技术参考。; 适合人群:具备Matlab编程基础,从事无人机控制、智能优化算法、路径规划、多智能体协同等领域的科研人员、工程技术人员及研究生。; 使用场景及目标:①研究多无人机在动态复杂环境下的协同路径规划方法;②实现无人机集群飞行中的实时避障与安全性保障;③对比分析不同仿生优化算法(如CCO、GGO、THRO等)在路径规划中的性能差异与适用性;④为城市空中交通系统(UAM)和自动化巡检任务提供算法原型与仿真验证工具; 阅读建议:建议读者结合文中提供的Matlab代码进行仿真实践,重点关注路径规划算法的实现逻辑、参数设置与环境建模方式,可通过调整障碍物分布、任务规模或引入新型优化策略进一步拓展研究深度。
Spotifast 使用 Rust 重写的原生跨平台 Spotify 桌面客户端(基于egui与fastframe框架构建底层集成 librespot支持 macOS ,Windows ,linux
Spotifast 彻底摒弃了臃肿的内置浏览器内核,带来了极度丝滑的本地桌面级播放体验。 核心特性: 极速冷启与超低占用:软件冷启动时间不到 1 秒,后台运行时通常仅占用 100–250 MB 内存,资源消耗仅为官方客户端的几分之一,堪称低配设备与极简主义者的福音。 完整的曲库交互:支持浏览并搜索全部官方曲库、精选歌单、已点赞音乐、专辑、艺人与播客,并支持直接编辑个人歌单和队列管理。 多设备串流控制:无缝支持 Spotify Connect,不仅能在本机播放,还能跨设备控制同一网络下的其他端,甚至涵盖 Google Cast 音箱与组合。 本地音乐支持:在设置中指定本地文件夹即可直接调用播放本地音频(44.1 kHz 规格),弥补流媒体平台版权缺失的曲目。 复古极客彩蛋:内置经典 Winamp 迷你播放器皮肤、EQ 均衡器与动态跳字屏,甚至还支持独立的 MilkDrop 音乐可视化光效渲染窗口,情怀直接拉满。 原生系统集成:完美支持系统媒体快捷键、全局热键绑定,以及随操作系统自动切换的自适应浅色/深色主题


