问题标签 [robustness]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tcp - 当 tcp/ip 已经有它时,还需要应用程序协议中的校验和吗?
我正在设计一个应用程序协议,我想知道我是否还需要在协议中包含校验和,因为 tcp/ip 已经有校验和。你怎么看?
code-generation - 健壮的代码框架?
我讨厌编写使我的软件更可靠的代码。这是框架应该做的事情!那么,是否有人知道可以巩固代码的代码“增强”实用程序?
如果我必须自己创建类似的东西,它将按如下方式工作:当您使用 Debug 标志编译代码时,它会自动为每个方法添加“固化”代码:
使用 try-catch 扭曲代码并将 Debug.Assert(true) 放入 catch 中(以便在其起源处捕获异常)。
记录每个方法的条目,打印参数的“ToString()”值,这样我就可以追踪发生了什么。
检查每个参数是否为空。
使用“IsValid”框架检查对象本身和每个参数,其中 IsValid() 是对象声明其期望为真的方式(例如,如果我是 TableOfContentsEntry,我希望始终在 IsValid 的书中() 并指向 IsValid() 的页面。
那么,为什么不呢?
performance - 快速失败与稳健性
我们的产品是一个分布式系统。我工作的模块是相当新的、相当严格的、经过良好测试的。它们的开发考虑了最近的最佳实践。其他模块可以被视为遗留软件。
虽然我对我负责的模块中发生的一切保持警惕,但我一直承受着处理从其他模块发送给我的不良数据的压力。本质上,我是一个“快速失败”的原则开发人员,因此,当出现问题时,我通常能够消除模块中出错的可能性。与其说是责备,不如说是为了避免在错误的地方追逐错误而浪费精力。
但我一直反对的论点是:“我们不能让这些东西在生产中失败,客户希望它能够工作,你为什么不解决这个问题”。这将是稳健性的一个论据:在你接受的东西上要自由,在你发送的东西上要保守。
我还应该注意,这些大多是间歇性问题。我们在集成测试中看到它们,但它们很难重现。涉及时间和并发性。
我很难在这两个原则之间取得平衡。部分原因是我担心如果我开始允许和传播异常数据,我会招来麻烦,而且我对我的系统不会有太大的信心。但是,即使其他模块向我发送了错误的数据,我也不能反对保持系统正常工作。其他模块没有得到修复的原因是它们太复杂和脆弱,而我的仍然看起来清晰和安全。但是,如果我不抗拒压力,我的模块将慢慢地背负我一直拒绝的相同问题。
我应该说系统在生产中没有“崩溃”,但我的模块可能只是向操作员显示错误并要求他们联系支持。崩溃将是一个大问题,但如果我清楚地报告错误,那么这不是正确的做法吗?我怀疑我的同行只是不希望客户看到任何问题。但是我的模块拒绝来自我们产品中其他模块的数据,而不是客户输入。所以在我看来,我们只是没有解决问题。
那么,我需要更加务实还是坚守自己的立场?
.net - .NET 下的原子文件拷贝
我正在构建一个使用 System.IO.File.Copy(...) 函数复制文件的服务器应用程序。我的文件可能相当大,因此,如果机器崩溃,它很有可能在复制过程中发生。
重新启动服务后,我应该能够拿起复制任务并继续。如何检测副本是否已成功完成或因服务器崩溃而中断?
我目前的计划是将文件复制到一个临时名称,并在复制完成后将其重命名为最终名称。这样,文件命名就能够在崩溃时携带状态信息。
你有什么好的/更好的建议吗?
编辑:目标操作系统是 Win2003,因此事务性 NTFS 不可用
java - 如何衡量稳健性?
我正在写一篇关于测量产品质量的论文。在这种情况下,产品是一个网站。我已经确定了几种质量属性和测量技术。
一种质量属性是“稳健性”。我想以某种方式测量,但我找不到任何有用的信息如何以客观的方式做到这一点。
是否有任何静态或动态指标可以衡量稳健性?即,像单元测试覆盖率一样,有没有办法测量这样的稳健性?如果是这样,是否有任何(免费)工具可以做这样的事情?
有没有人对这种工具有任何经验?
最后但并非最不重要的一点是,如果您对此有任何想法,也许还有其他方法可以确定稳健性。
提前非常感谢。
emacs - 如何找出哪个版本的 emacs 引入了函数?
我想编写一个 .emacs,尽可能多地使用主线 emacs 功能,在以前的版本下运行时优雅地回退。我通过反复试验发现了一些不存在的功能,例如,在 emacs 22 中,但现在在 emacs 23 中,在极少数情况下我最终在 emacs 22 下运行我的点文件。但是,我会喜欢对此采取更主动的方法,并让我的 dotfiles 的子集仅在 version >= 时生效<some-threshold>
(例如)。我现在关注的功能是,scroll-bar-mode
但我想要一个通用的解决方案。
我还没有看到此信息的一致来源;我已经检查了 gnu.org 在线文档、函数代码本身,但到目前为止一无所获。我如何确定这一点,而不保留我想要支持的每个版本的 emacs?
.net - 如何判断捕获的 IOException 是否是由另一个进程正在使用的文件引起的,而不需要解析异常的 Message 属性
当我打开一个文件时,我想知道它是否正在被另一个进程使用,以便我可以进行特殊处理;任何其他 IOException 我都会冒泡。IOException 的 Message 属性包含“进程无法访问文件 'foo',因为它正被另一个进程使用。”,但这不适合编程检测。检测另一个进程正在使用的文件的最安全、最可靠的方法是什么?
c# - 用于兄弟键值对的健壮 LINQ to XML 查询
(第一次发帖,请温柔!)
我只是在学习 LINQ to XML 的所有荣耀和脆弱,试图破解它来做我想做的事:
给定这样的 XML 文件 -
我想以稳健的方式提取一组已知“想要的键”的值,即如果SECOND_WANTED_KEY
出现两次,我只想要SECOND_WANTED_VALUE
,而不是UNWANTED_VALUE
。此外,THIRD_WANTED_KEY
可能会出现也可能不会出现,因此查询也应该能够处理它。我可以假设它FIRST_WANTED_KEY
会出现在其他键之前,但不能假设其他键的顺序 - 如果一个键出现两次,它的值并不重要,我只想要第一个。由字符串组成的匿名数据类型很好。
我的尝试集中在以下方面:
我的问题是那应该是什么...
?例如,我尝试过(丑陋,我知道)
这应该希望允许密钥在任何地方,或者不存在,但这还没有成功,因为.NextNode
在 nullXElement
上似乎不起作用。
我也尝试添加一个
在 where 之后的子句,但这也没有奏效。
我愿意接受建议、(建设性的)批评、链接、参考或向谷歌提供的短语建议等。我已经做了相当多的谷歌搜索和检查,所以任何帮助都将不胜感激。
谢谢!
编辑: 让我为此添加一层复杂性-我应该首先将其包括在内。假设 XML 文档如下所示:
我想提取多组这些键值对。问题/警告:如果SECOND_WANTED_KEY
没有出现在第一个<list>
元素中但出现在第二个元素中,我不想意外拾取第二个列表元素的SECOND_WANTED_KEY
.
编辑#2:
作为另一个想法,我尝试创建一个HashSet
我正在寻找的密钥并执行此操作:
这让我得到了所有的键值对,但我不确定它是否能保证我会正确地将这些对“关联”到它们的父 `' 元素。这两种方法之间的任何想法或比较都会有所帮助。
状态更新 2010 年 4 月 9 日
截至目前,我仍然主要认为哈希集方法是最优选的。.NET 完成的大部分 XML 处理似乎都是按文档顺序完成的——到目前为止,我所有的测试用例都已经完成。
我会提供赏金和/或赞成的答案,但没有足够的代表点数。我今天会决定一个答案,所以让他们进来!谢谢。
winforms - 强大的 WinForm 应用程序的功能
[基于以下强烈评论(日期为 2010 年 4 月 7 日至 8 日),当我最初发布此问题时,我仔细查看了我写的内容并问自己“嗯?我在这里真正追求的是什么?” 我决定采取激烈的行动:丢弃原始文本,使问题更简单、更清晰,并专注于我真正想从中得到什么。所以这里是新的 2010 年 5 月 3 日版本的问题]
每个人都“知道”什么是干净、健壮、易于使用的 WinForm 应用程序。但是,究竟是什么?这是我的首发名单。你可能不同意所有这些(例如,有些人真的不喜欢一天的小费),这很好,但它给了你一个大致的想法。
- “关于”对话框
- 工具提示
- 启动画面
- 每日提示
- 查询更新
- 跨调用保留设置
- 长期操作的进度指示器
你还会包括什么?
c# - 空值和空白值
编写健壮代码以便检查变量是否为空和空白的最佳方法是什么。
例如