首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

优秀的Java程序测试是什么样的?

作为测试驱动设计和开发的忠实粉丝,我相信创造良好的测试是我们作为Java开发人员可以做的最重要的事情之一。我们写测试出于许多原因: 塑造系统的设计。...让我们的应用程序如期望地那样运作并且始终如一地精确很重要。测试应该竭力确保做到这一点。 文档。测试是系统的文档,因为它会说明它应该做什么以及应该怎么做。 那么“好的测试”到底是什么样子的呢? ?...既然你已经为这个功能写了一个测试,那我们就知道它“should或will”工作(如果不能工作的话,那我们知道我们需要修复它)。 ? 将测试名称当作一个要求。 下面是一些例子 ? 不要害怕表达出来。...当读取测试时,用户应该快速而轻松地能说“将这些值设置成这样,如果我执行这个操作/这些操作,那么这是预期的结果”。在上面的例子中,便是bookstore.findByTitle()方法。...显然,这个数字不是随便得来的,并且还要确保该变量的命名可以显示它的值是如何得来的。 所有这些都应该是在一个适度的常识范围内。没有严格规定。

50510

优秀的Java程序测试是什么样的?

作为测试驱动设计和开发的忠实粉丝,我相信创造良好的测试是我们作为Java开发人员可以做的最重要的事情之一。我们写测试出于许多原因: 塑造系统的设计。...让我们的应用程序如期望地那样运作并且始终如一地精确很重要。测试应该竭力确保做到这一点。 文档。测试是系统的文档,因为它会说明它应该做什么以及应该怎么做。 那么“好的测试”到底是什么样子的呢? ?...既然你已经为这个功能写了一个测试,那我们就知道它“should或will”工作(如果不能工作的话,那我们知道我们需要修复它)。 ? 将测试名称当作一个要求。 下面是一些例子 ? 不要害怕表达出来。...当读取测试时,用户应该快速而轻松地能说“将这些值设置成这样,如果我执行这个操作/这些操作,那么这是预期的结果”。在上面的例子中,便是bookstore.findByTitle()方法。...显然,这个数字不是随便得来的,并且还要确保该变量的命名可以显示它的值是如何得来的。 所有这些都应该是在一个适度的常识范围内。没有严格规定。

50520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ChatGPT突然疯了,意外输出震惊网友!OpenAI官方回应:token预测是根源​

    网友表示,「我收到了ChatGPT有史以来最诡异的回复」。 随后,OpenAI官方确认了ChatGPT最新的bug,并已将其修复。 ChatGPT疯了!!! ChatGPT究竟有多疯?...有一位网友称,我之前在和ChatGPT聊天,问它会推荐Bill Evans三重奏中的哪张黑胶唱片,结果它就失控了。就像参数设置过高,超出了API的温度范围。我以前从未遇到过这样的情况。...(原本它只需要回复如果含有酒精就不允许)。 没想到...... 网友称,我只不过是想让它它帮忙做一些数学题,然后...... 同样,还有这满屏的重复。...更严格地说,推理内核在某些GPU配置中使用时会产生不正确的结果。 在确定此事件的原因后,我们推出了修复程序,并确认事件已得到解决。...就拿为什么LLM有时拼不正确词,或者做不了其他与拼写相关的任务? 从根本上说,这是因为我们看到这些字符被分割成了一个个token,其中有些token实际上相当长。

    19310

    不如起来给你的睡眠分个类吧!

    将时序性放在一边,之前观察数据后,我提取了每个人的数据,并且根据长时间的清醒期(标签0),把索引分开。下图展示了提出睡眠时相序列图的典型例子。...提取出来的睡眠时相序列图的一个例子 描述性的特征工程:混沌理论 接下来是有趣的(也是最长的)部分!如何最好地描述用于睡眠阶段分类的脑电图信号?...分形维数对应于复杂程度的统计指标,该指标描述了模式中的细节如何随测量尺度的变化而变化。 ? 来源:PyEEG 这些都是奇怪的特征。...它有两个特别的弱点:该模型没有考虑样本之间的时间关系,而且在预测睡眠阶段1时存在困难。第一阶段只是一个过渡阶段,从清醒状态到真正的睡眠阶段。我的目标是通过在之前的模型上构建一个过滤器来改进它。...在这样的医疗背景下,涉及到个人不可挽回地引发了协变量转移的问题。这个问题一直存在,但我的研究结果显示出了很大的泛化潜力。 我感谢我的爱人对马修·沃克的书提出的建议!类似的项目还有很多!

    57420

    解决 iOS 15 上 APP 莫名其妙地退出登录 解决 iOS 15 上 APP 莫名其妙地退出登录

    非常令人惊讶的是,这并不是我们在测试 iOS 15 beta 版的时候发现的问题。 如果你是来找修复方法的,那就直接向下滚动到结论,但如果你想了解更多关于我们如何调试这个特定问题,那就开始吧。...缩小问题范围 我担心从 Xcode 重新安装应用程序可能会影响问题的复现,所以在这样做之前,是时候查看代码并试图缩小问题的范围。根据我们的实现,我想出了三个潜在的原因。...是什么发生了改变以及为什么它如此难以复现? 是什么发生了改变以及为什么它如此难以复现? 我粗略地看了一下发布说明,在谷歌上快速搜索了一下,我找不到任何东西,所以我不得不继续挖掘以更好地了解这个问题。...这就是为什么读取会失败,以及最终为什么一些用户会发现自己被登出了。...我仍然不知道这种预测是如何形成的,但我只想把它归结为 "Siri智能",然后就到此为止了。

    1.6K20

    干货 | 我从资深软件工程师学到的避坑大法

    每次代码审查时我都问自己:「他们为什么这样做?「。每当我找不到合适的答案时,我就会去和他们谈谈。 在第一个月后,我开始在同事的代码中找到错误(就像他们对我代码做的一样)。...你甚至可以更进一步:下载其他 AWS 服务的备用容器镜像并使用 docker-compose 来配置本地完整的环境。它会加速反馈循环。 设计 为什么我要将设计放到写代码和测试的后面呢?...与其修复哪里错了,即使只是「修改一行」,所做的第一件事应该是回滚版本。回到之前的工作状态,这是让客户恢复工作最快的方法。 过了这个时候,才应该看看哪里出了问题并修复那些 bug。...在某次出错的问题上,我们以为机器上没有正确安装 nginx,但结果是配置被设置为了 false。 当然,我不需要总是这样做。有时候错误信息已经足以减少需要搜索代码的区域。...当你修复 bug 时,你不仅仅关注如何修复 bug,而是你为什么不早点发现它呢?是否有布置警报?如何能够更好地监控来避免类似的问题? 我还不知道如何监控 UI。

    57620

    fast.ai 机器学习笔记(一)

    但我们现在不会这样做。 fix_missing 对于数值数据类型,首先我们检查是否有空列。如果有,它将创建一个新列,名称末尾附加_na,如果缺失则设置为 1;否则设置为 0(布尔值)。...问题:您能解释验证集和测试集之间的区别吗[20:58]?今天我们要学习的一件事是如何设置超参数。超参数是会改变模型行为的调整参数。...这将数据框转换为浮点数组,然后我们在其上进行拟合。在随机森林代码内部,他们无论如何都会这样做。鉴于我们想要运行几个不同的随机森林,使用几种不同的超参数,自己做一次可以节省 1 分 37 秒。...如果你将 set_rf_samples 设置得相对较小,而数据集很大,OOB 将需要很长时间来计算。希望在某个时候,我们能够修复库,使其不再发生这种情况。没有理由需要那样,但目前,库就是这样工作的。...如果你拿一个非常不同的东西,比如 2010 年的推土机,然后试图说“哦,如果它是 1960 年生产的”,这可能会导致预测不准确,因为它远远超出了训练集的范围。绝对。这是一个很好的观点。

    39010

    Grafana监控大屏配置参数介绍(一)

    Grafana 系列文章,版本:OOS v9.3.1 Grafana 的介绍和安装 在上篇文章中,我们已经安装了Grafana,并且看到了它的初步面貌。...在这篇文章,我们以一个简单的大屏为例,来了解Grafana的大屏配置参数。 创建第一个大屏 在这里,以时间序列图标为例,创建第一个大屏。...仪表板>新建仪表板>Add a new panel 选择后,进入图表配置界面,目前什么数据都没有,图表默认选择了Time series,即时间序列图表 为了能够有测试数据,我们选择Grafan数据源...,并使用Random Walk ,这样它会展示一张通过随机数字生成的图表,供我们测试。...,变量名称为platform,该变量将在面板中引用 进入面板编辑页面,我们看到左上角已经出现了刚配置的数据,变量引用使用${变量名称},这里我在标题中进行了引用,同时Repeat options

    3.9K30

    Go并不需要Java风格的GC

    像Go、Julia和Rust这样的现代语言不需要像Java c#所使用的那样复杂的垃圾收集器。但这是为什么呢? 我们首先要了解垃圾收集器是如何工作的,以及各种语言分配内存的方式有什么不同。...这是Oracle为Java值类型所做的努力,这样做的原因正是我在这里所谈论的。 值类型是不够的 那么Valhalla项目能解决Java的问题吗?不是的。它仅仅是将Java带到了与c#同等的高度上。...但它会导致一些在Go语言中没有的问题: 或早或晚,内存都需要进行压缩(compact),这涉及到移动数据和修复指针。Arena分配器不需要这样做。...逃逸分析包括查看在函数内部创建的指针,并确定该指针是否逃逸出了函数范围。...它试图给人这样一种印象:Java的权衡是同样有效的。但权衡必须根据我们所生活的世界进行调整。 简而言之,我认为Go语言已经做出了许多聪明的举动和战略选择。

    92530

    全面分析 MySQL并发控制

    锁 我们常规认识的锁是这样的:对于临界资源A,有进程B和进程C需要对其进行访问,为了防止冲突,当某个进程比如说A先到达,它会取得互斥锁,那么在A使用这个资源的时候,B是无法使用这个资源的,它必须等待,直到...隔离级别 数据库为了压制丢失更新,提出了4类隔离级别[在application配置文件中声明]。 数据库现在的技术完全有办法避免丢失更新,但是这样做的代价是要付出锁的代价。...简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。...在这个级别,可能导致大量的超时现象和锁竞争。 ---- 要是再深挖下去,那得是专门的研究员们做的事情了吧,比方说MySQL是如何保证可重复读的实现,比方说幻读是怎么被咔嚓掉的之类的。...死锁的基本概念我也不啰嗦了,为了解决死锁的问题,数据库系统实现了各种死锁检测和超时机制。InnoDB检测死锁的本事就不错,它会抓出死锁的循环依赖,并且抛出一个错误。

    81621

    解决 iOS 15 上 APP 莫名其妙地退出登录

    非常令人惊讶的是,这并不是我们在测试 iOS 15 beta 版的时候发现的问题。 如果你是来找修复方法的,那就直接向下滚动到结论,但如果你想了解更多关于我们如何调试这个特定问题,那就开始吧。...缩小问题范围 我担心从 Xcode 重新安装应用程序可能会影响问题的复现,所以在这样做之前,是时候查看代码并试图缩小问题的范围。根据我们的实现,我想出了三个潜在的原因。...是什么发生了改变以及为什么它如此难以复现? 是什么发生了改变以及为什么它如此难以复现?...这就是为什么读取会失败,以及最终为什么一些用户会发现自己被登出了。...我仍然不知道这种预测是如何形成的,但我只想把它归结为 "Siri智能",然后就到此为止了。

    93810

    不要“做着玩”-《软件方法》自测题解析015

    如果受到“和涉众沟通”的影响,会导致迁就涉众的水平,模型质量大大下降——当然,这也正是某些人想要的遮羞布:不是我不想或者没有能力画得深刻一点,我是怕涉众看不懂! 以医院看病类比。...给患者做CT、磁共振的目的是医疗团队内部使用,不是为了和患者沟通。不能因为患者稍微看得懂CT或者喜欢看CT就给他多做CT,患者看不懂或不喜欢CT就不做。 关于如何和涉众沟通,详见第7章。...为什么还要岗位甲,领导干嘛不直接用系统做任务?你说呢? 竞品系统二的用例图如图4,只有1个用例。 图4 竞品系统二的用例图 假设这两个都可以满足愿景,您可以对比一下,哪个流程中的信息系统更复杂?...如果随便做做,不参与竞争,不会感觉到建模的必要,怎么做都可以找出各种理由自圆其说这样做是合理的。...要么做UMLChina出的题目,因为那些题目有清楚的约束条件,指引你去得到最佳答案; 要么做真实的项目,因为真实项目也有清晰的约束条件——就是惟一的真实情况,它会指引或强迫你尽力去得到最佳答案。

    24620

    DDD实战之五:战略设计之上下文映射和系统分层架构

    关于如何识别“服务端的跨限界上下文”业务逻辑,我认为需要逐个分析前面罗列的所有业务用例,从如下两个角度筛选: 初步分析业务用例内部的逻辑,看是否需要多个上下文来承担职责。...因为从业务角度来说,其实是后 4 者依赖于店铺的存在而存在,而不是反过来。为此,我们做这样的调整: 1. 采用消息发布者/订阅者模式,让后 4 者依赖店铺上下文发布的“店铺已创建”消息; 2....为此,该业务用例(服务)就涉及到“接龙”和“商品”两个上下文,服务序列图设计如下: 该序列图展示出接龙和商品的上下文关系如图: 浏览我的接龙 按照产品 UI 设计文档,接龙只能在店铺下存在。...客户在该界面上点击相应的商品加入购物车、或从购物车移除,然后点击“我要接龙”按钮进入该用例。 该用例允许用户设置提货方式、提货时间、联系人等信息后,点击“确认付款”按钮完成支付。...; 记录客户参与了该接龙,以便于客户“浏览我的接龙”时,可包含该接龙; 根据上面的逻辑,我们画出服务序列图设计如下: 该服务序列图展示的相关限界上下文关系如下图: 这里可以看到上下文之间的调用关系比较多

    1.5K30

    快手质臻影音:视频智能修复及增强技术

    对我来说最让我荣幸和开心的是加入快手音视频算法团队,并和团队一起完成很多有意义的工作。这次主要就来分享下我们团队在视频增强修复方面做了哪些工作。...我们做超分辨率设计的核心是超分辩率能够做到抗锯齿,以及能够对块效应做到一定程度修复,避免传统超分辨率将分辨率变高的同时将块效应也变大的问题。 上图是以SR-HQ算法为例。...为应对以上模糊情况,我们首先考虑如何构建数据集。...以低分辨率视频生成高分辨率HDR视频典型应用为例,分享为什么做融合增强的原因。传统做法第一步是先超分辨率SR生成4K,再用SDR转HDR算法变成HDR,正常情况下是两个算子串起来做。...比如在做算法分析时发现视频的分辨率又小、块效应又重,可能会认为既要做DeArt又要做超分辨率,这时算子在交叠的时候该如何解决?

    1.4K30

    何伟潮的《软件方法》读书笔记(用其他工具把书里的图画了一遍)(1-4)系统用例规约

    以一家商业银行为研究对象,观察在它边界之外和它打交道的人群或机构,可以看到储户来存钱,企业来贷款,人民银行要它作监督等等,这些就是该商业银行的执行者,如下图所示: ?...要得到合适的用例,需要有一颗善于体察他人的心。 ? 2.1.3.2、价值不等于可以这样做 有些人会较真,还是以ATM为例子,有些人会因为“难道ATM放在那里我就不能登录一下就离开吗?...如果把前置条件设置为类似于“存在大于最低限额的现金”这样的背景条件作为前提条件是可以的。就算很长时间没人来ATM取现金,这个条件是否成立就摆在那里。...在银行角度,虽然储户是上帝,为了储户更加方便,不用密码更方便的。但从银行角度要考虑安全问题,不可能不设置密码,但为什么只设置6位而不是8位或者更多呢?...系统如何构造,不属于需求描述的范围,除非是涉众强加的设计约束。

    72810

    开发人员最难掌握的Web3.0概念

    以下是这种情况下通常会发生的情况: 第一步 您发现该漏洞的 通过暂停智能联系人,您可以做两件事:首先,明确表示用户不应使用它们,其次,防止攻击者利用不知道该漏洞的用户。...当您部署具有更新逻辑(修复您的漏洞)的新智能合约时,您需要恢复该数据;否则,一切都会被抹去。...这就是为什么任何将智能合约部署到区块链上的人都必须在部署之前制定迁移计划的原因——这样,如果他们发现了一个漏洞,他们就有了一个备份计划。...您的最终用户始终与您的代理合同进行交互,该合同存储您的所有应用程序数据。但是,该方法的实际逻辑存储在逻辑合约中。 当用户与代理合约交互时,它会将这些交易转发到逻辑合约并从函数调用中检索返回数据。...逻辑合约执行函数并将数据写回代理合约。到现在为止还挺好。 这就是它变得棘手的地方: 当逻辑合约尝试写入代理合约时,它会在代理状态的范围内这样做。

    94620

    ZenUML与服务驱动设计(文末有福利)

    在《解构领域驱动设计》书中的领域建模阶段,我提出了以业务服务为核心进行设计与建模的方法——服务驱动设计。...然则,绘制序列图总是不太方便,于是,我提出了编写序列图脚本的方法。...我在为GitChat编写领域驱动设计课程时,就想到了这一工具,它提供的脚本语法非常接近Java语法,于是,我就采用拿来主义,将其搬到我的文章里,在融入业务服务、菱形对称架构、角色构造型后,组成了服务驱动设计...果然在Settings -> Plugins中找到了ZenUML的插件: 它的使用方式非常简单,在安装了该插件后,你可以在代码库的任意位置(建议在项目根目录下定义一个文件夹),新建一个扩展名为.zen...ZenUML简直就是为服务驱动设计量身定做的。至于该怎么实践服务驱动设计,在《解构领域驱动设计》书中你可以找到答案。该如何使用ZenUML?

    70710

    提高数据可视化效果的五个原则

    总之,这五个原则会提醒我关注受众的需求,以及如何用可视化的数据讲故事。 原则1:展示数据 读者只有看到你的数据,才能理解你的重点、观点或故事。...有时数据里有峰值或谷值、离散值或波动值需要解释。在图表中添加细节说明,有助于大 家推导出你的论点或关键点。如果使用的是非标准图表,则还要解释如何阅读它。...格式塔的连接原理可以帮助我们追踪图中的变化 我们可以将一张图表分解成多张图表。这被称为网格图或面板图,也叫格栅图,或小型序列图。这些较小的图表使用相同的比例、坐标轴和范围,但将数据分布在多张图表上。...有了颜色和标签 (左上角的图表),我可以把这张图表放到我的报告或讲义中,稍做加工,再添加一个有吸引 力的标题,读者就可以知道哪些标签对应于哪些折线。...将所有数据先全部设置为灰色,这会迫使你思考你的目的,以及你到底想要将读者的注意力引向何处 现在我可以有目的地调整这张图表。

    56420

    React 设计模式 0x2:整洁和可维护的代码

    学习如何轻松构建可伸缩的 React 应用程序:整洁和可维护的代码 # 为什么要编写整洁的代码 编写干净的代码对于编程非常必要,有以下几点好处: 业务连续性 业务连续性在每个组织中都非常重要,因为当开发人员离开公司或企业时...这使其易于阅读,因为对象是可扩展的(可以在其中添加更多参数) 代码应该松散耦合 松散耦合会使应用程序的所有部分独立但协同工作 这样做的好处是任何人都可以加入(甚至是新人),向现有应用程序添加新的代码或功能...它让审阅人和其他人了解您在代码中做了什么 编写单元测试 大多数开发人员讨厌编写单元测试,有时它可能很烦人,但编写代码测试非常重要 测试代码将让您了解预期出现的错误和情况以及如何避免它们 # 如何编写可维护的代码...一些有助于实现可维护代码库的实践: 设计模式 编写可测试的代码 检查错误 输出错误日志以便于跟踪和修复漏洞 # 设计模式 设计模式是解决软件设计问题的解决方案,设计模式给出了构建应用程序的一种定义的方式...错误是不可避免的,这就是为什么作为开发人员,需要检查错误。 使用 try 和 catch 包装代码可以帮助检查这些错误并向用户显示友好的消息,并且最好将这些错误记录到文件中或保存到数据库中。

    38810

    DBA遇到问题时的30 个反应,你是哪一种?

    因此,如何处理修复 bug 的过程也值得我们细细琢磨。 我想分享一些程序员修复他们的源代码时所经历的想法。这是事情变得紧张时所触发的轻松幽默。...任何语言的程序员都可以通过互联网借鉴现有项目,加入维基讨论,或者创建自己的代码仓库。它是各种项目所需插件和模板的超棒资源。 3.“为什么这个脚本需要这么多库?”...“我用 30 分钟写函数,花 2 小时让它工作。” 这难道不像我们自己的编程故事吗?你正兴致勃勃地在构建着什么,但是突然之间,函数输出了一个致命的错误。...你能遇到的最坏情况是,你对你正在浏览的源代码完全不知道该怎么做。可能是你自己的项目,也可能是别人的项目,但问题的根源是相同的。...但是,如果这还是意味着另一个小时的浪费呢?对于这样的情况我并不陌生,令人非常令人沮丧。 20.“哦,天哪,我以前为什么不写点注释呢?”

    83820
    领券