OO_Unit3_Blog—21374235

樊金鹏-21374235 2024-05-16 14:33:15

OO_Unit3_Blog


本单元测试过程 :

本单元除了需要理解层次化设计,去设计好自己的社区,还需要自己去编写三次Junit的测试,因为之前没接触过Junit,所以要从一开始去了解Junit的原理,从哪里去构造数据,通过三次设计虽然遇到了很多困难,也是稍微掌握了一部分Junit的评测。

黑箱和白箱测试 :

黑箱测试:

  • 定义:黑箱测试是一种软件测试方法,测试者不需要了解程序的内部结构或代码。测试基于功能需求进行,重点是软件系统的输入和输出。
  • 方法:测试者通过系统的功能需求来设计测试用例,检查软件是否按预定功能正常工作。例如,如果一个应用允许用户登录,测试者会尝试使用有效和无效的凭证来看系统是否能正确处理。
  • 优点:可以由非开发人员进行,侧重于用户体验和功能完整性。
  • 缺点:可能会遗漏一些内部错误,因为它不考虑程序的内部逻辑。

白箱测试:

  • 定义:白箱测试也被称为透明盒测试或结构测试,测试者需要了解程序的内部结构和代码。

  • 方法:测试者基于代码的内部逻辑设计测试用例,检查程序的内部操作是否按照规定执行。这包括测试程序的所有分支、循环和内部组件。

  • 优点:可以发现代码内部的逻辑错误,提高代码覆盖率。

  • 缺点:测试过程复杂,需要深入的编程知识,且通常只能由开发者执行。

    单元测试:

  • 单元测试是软件测试的一种类型,专注于验证单个程序、类、方法或函数是否能按预期工作。它是在软件开发过程中非常重要的一环,因为它有助于及早发现错误和问题,从而降低修复成本

    功能测试:

  • 功能测试是一种软件测试方法,旨在验证软件系统的功能是否符合规格说明书或用户需求。测试人员通过输入预定义的输入,检查系统的输出是否符合预期,并确保系统在各种情况下都能正确运行。

    集成测试:

  • 集成测试是软件测试的一种类型,其目标是验证不同模块或组件在整体系统中的集成是否正常工作。测试人员通过将已经单独测试过的模块组合在一起,检查它们的交互是否如预期,并确保系统各部分之间的通信和数据传递没有问题。

    压力测试:

  • 压力测试是一种评估软件在高负载或极限条件下性能的测试方法。它用于确定系统的稳定性和可靠性,通过增加资源消耗如CPU、内存、网络流量等,测试系统在压力条件下的响应时间和承载能力。

    回归测试:

  • 回归测试是在软件发生更改(如修复缺陷或添加新功能)后进行的测试,以确保这些更改没有意外影响到软件的其他部分。这种测试确保新的代码更改没有破坏原有的功能,并且整个应用仍按照预期工作。

    数据构造策略:

  • 随机生成 。

  • 控制图的稠密程度,通过控制人数

  • 考虑边界条件,通过助教团队专门设置的检测点。

    架构设计

    基本设计 :基本在JML的划定架构,只有一部分为了实现方法而特定规划的架构。

    主要架构:

  • __并查集__:

    public class Community { //完全在操作persons的id的数
      private boolean ifrebuild;
      private HashMap<Integer,ArrayList<Integer>> connect = new HashMap<>();//用于存放边
      private ArrayList<Integer> persons = new ArrayList<>(); // 用于存放所有的id
      private HashMap<Integer,Integer> parents; //用于存放所有人的父节点的id
    
      private int blocksum; // 联通图数量
    
      public Community() {
          parents = new HashMap<>();
          blocksum = 0;
      }
    
      public int getBlocksum() {
          return blocksum;
      }
    
      public void addPerson(Integer id) {
          persons.add(id);
          parents.put(id,id);//父节点是自己
          blocksum++; //每加一个节点多一个连通图
          ArrayList<Integer> linked = new ArrayList<>();
          connect.put(id,linked);
          ifrebuild = false;
      }
    
      public void linkincrease(Integer id1,Integer id2) {
          connect.get(id1).add(id2);
      }
    
      public void linkdelete(Integer id1,Integer id2) {
          connect.get(id1).remove(id2);
          connect.get(id2).remove(id1);
      }
    
      // 查找根节点
      public int findroot(int id) {
          if (parents.get(id) != id) {
              parents.put(id, findroot(parents.get(id)));
          }
          return parents.get(id);
      }
    
      // 合并两个集合
      public void union(int id1, int id2) {
          if (!ifrebuild) {
              linkincrease(id1,id2);
          }
          int rootX = findroot(id1);
          int rootY = findroot(id2);
          if (rootY == rootX) {
              return;
          } else {
              parents.put(rootY,rootX);
              blocksum--;
          }
      }
    

    并查集是一种数据结构,用于处理一些不交集的合并及查询问题。它支持两种操作:查找(Find)和合并(Union)。通过查找操作,我们可以确定某个元素属于哪一个子集;通过合并操作,可以将两个子集合并为一个集合。
    这种数据结构常常用于处理一些网络连接、图的连通分量等问题,因为它可以快速判断两个元素是否属于同一个集合,并且能够快速地合并集合。并查集通过一些优化算法(如按秩合并和路径压缩)可以提高效率,从而在实际应用中表现出较好的性能。

  • 动态维护:
    在本次作业中,使用了大量的动态维护,在刚开始第一次作业的时候,因为使用了大量的脏位导致了大量的超时,而在第二次作业中全部修改为动态维护,其实后来才发现需要维护脏位的地方全都是动态维护需要的地方,还不如一开始就使用动态维护(。

  • 双向bfs:
    在讨论区学会的一种双向Bfs方法,完美的解决了第二次作业求最短路径的问题。

  • queryCoupleSum:
    为什么这里单独把他拿出来讲,因为我觉得我的实现方式真的很麻烦,需要考虑的情况太多了,以下是cp的维护方式:
    ``` public void remoteCouple(int id1, int id2, Integer oldbest1, Integer oldbest2) {

      MyPerson p1 = (MyPerson) getPerson(id1);
      MyPerson p2 = (MyPerson) getPerson(id2);
      int newbest1 = p1.getbestAcquaintance();
      int newbest2 = p2.getbestAcquaintance();
      MyPerson old1 = (MyPerson) getPerson(oldbest1);
      MyPerson old2 = (MyPerson) getPerson(oldbest2);
      MyPerson new1 = (MyPerson) getPerson(newbest1);
      MyPerson new2 = (MyPerson) getPerson(newbest2);
    
      if (old1 == new1 && old2 == new2) {
          return;
      } else {
          if (Objects.equals(new1,p2) && Objects.equals(new2,p1)
                  && (!((Objects.equals(old1,p2)) && (Objects.equals(old2,p1))))) {
          }
          if ((!Objects.equals(new1,p2) || !Objects.equals(new2,p1))
                  && (Objects.equals(old1,p2)) && (Objects.equals(old2,p1))) {
          }
    
          if (!Objects.equals(new1,old1)) {
              if ((!Objects.equals(old1,null)) && old1.getbestAcquaintance() == p1.getId()
                      && old1.getId() != p1.getId() && old1.getId() != p2.getId()) { 
              }
              if (new1.equals(p2)) {
              } else { 
                  if (new1 != null && new1.getbestAcquaintance() == p1.getId()
                      && new1.getId() != p1.getId()) { 
                  }
              }
          }
    

    性能问题及修复情况 :

    性能问题 :

    总的来说,这三次作业都有大大小小的瑕疵,前两次可以接受是因为没有使用正确的维护方式而导致的超时问题,第三次难以接受,是因为自己在将脏位维护改为动态维护的时候,有一个地方改了但没有实现,结果好像是因为是前两次作业的考察点,第三次作业反而没有考察出来。

    修复情况 :

    全部修复。

    Juint测试 :

    数据生成采用随机方式 ,据测试次数改变图的稠密程度,使用影子容器保留之前之后的数据,及算理论值,比较理论值和调用方法的返回值,同时检查后置,整个过程比较简单,就是覆盖方面需要多考虑一些。

    本单元学习体会 :

    通过学习一门规范化语言体会到了这种语言的重要性, JML确实是一种较为规范的语言,但好像使用率不高?网上搜搜都是只有关于北航的OO作业的帖子,JML语言只能限制代码的功能,但无法直接给出代码的实现,所以具体的性能取决于实现代码的具体方式,但无论如何,最后的功能一定在JML限制的范围内。学习JML语言的最大的体会便在此处了。

...全文
48 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕面向新能源容量提升的含智能软开关(SOP)的配电网重构问题,提出了一种基于二阶锥规划(SOCP)的双层优化模型。该模型上层以提升新能源消纳能力为目标进行网络重构,下层利用SOP灵活调节功率分布,解决重构过程中可能出现的潮流越限问题。通过将非凸的最优潮流问题转化为二阶锥松弛形式,有效提高了求解效率与计算可行性,并在标准算例系统中验证了该方法在降低网损、均衡负荷分布及提升新能源利用率方面的优越性。研究不仅提供了理论建模思路,还配套实现了Matlab代码,便于算法复现与拓展应用。; 适合人群:电力系统、新能源并网、智能配电网及相关领域的科研人员与工程技术人员,具备一定的优化理论基础与Matlab编程能力者优先。; 使用场景及目标:①应用于高渗透率分布式新能源接入背景下的配电网运行优化;②为智能软开关与网络重构的协同控制提供可复现的数学建模与求解方案;③支撑新型电力系统中提升电网灵活性、可靠性和新能源承载力的关键技术研究。; 阅读建议:建议结合提供的Matlab代码深入理解二阶锥松弛技术在电力系统优化中的具体实现,重点关注模型构建、非线性约束的线性化处理以及双层优化架构的分解求解逻辑,可通过调整参数或测试不同场景进一步验证算法鲁棒性与适应性。
内容概要:本文档围绕“并_离网风光互补制氢合成氨系统容量-调度优化分析”展开,通过Python代码复现相关研究模型,构建了一个集风能、太阳能发电、电解水制氢及合成氨于一体的综合能源系统优化框架。研究涵盖系统的容量配置与多时间尺度(日前、日内、实时)协调调度,重点解决可再生能源出力波动性与化工负荷之间的供需匹配问题,旨在实现系统运行的经济性与可靠性双重优化目标;文中强调使用Python实现优化建模,并提供了与Matlab版本的对照,便于跨平台验证与学习。; 适合人群:具备一定Python编程基础,熟悉优化建模、能源系统仿真及可再生能源耦合化工过程的科研人员、研究生以及从事新能源系统规划与运行调度的技术人员。; 使用场景及目标:①用于风光制氢合成氨系统的容量规划与多时段运行调度仿真;②支持多时间尺度协调优化策略的设计与验证;③深入理解绿电制绿氢、绿氨的能量转换与管理机制,推动可再生能源在化工领域的工程化应用。; 阅读建议:建议结合网盘提供的完整资源(包括代码、数据、论文原文)进行实践操作,重点关注目标函数构建、约束条件设定、优化求解器调用等关键环节,同时对比Python与Matlab实现方式的异同,以加深对优化模型内在逻辑与工程实现的理解。

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧