标签: robustness

等于(item,null)或item == null

使用静态Object.Equals检查null的代码是否比使用==运算符或常规Object.Equals的代码更健壮?是不是后两种易受这样一种方式,检查空预期不工作正在被超越(如返回false时,比较值零)?

换句话说,是这样的:

if (Equals(item, null)) { /* Do Something */ }
Run Code Online (Sandbox Code Playgroud)

比这更强大:

if (item == null) { /* Do Something */ }
Run Code Online (Sandbox Code Playgroud)

我个人觉得后面的语法更容易阅读.编写处理作者控件之外的对象的代码(例如库)时应该避免吗?是否应始终避免(检查为空时)?这只是头发分裂吗?

c# null equals robustness

39
推荐指数
3
解决办法
4万
查看次数

C中的字符串处理实践

我正在开始一个普通C(c99)的新项目,该项目主要用于文本.由于外部项目的限制,这段代码必须非常简单和紧凑,由一个没有外部依赖的源代码文件或除libc和类似的无处不在的系统库之外的库组成.

根据这种理解,哪些最佳实践,陷阱,技巧或其他技术可以帮助使项目的字符串处理更加健壮和安全?

c security string robustness

22
推荐指数
3
解决办法
4927
查看次数

失败快速与稳健

我们的产品是分布式系统.我工作的模块相当新,非常严格,经过严格测试.它们是根据最近的最佳实践开发的.其他模块可以视为传统软件.

虽然我对我负责的模块中发生的所有事情保持警惕,但我仍然面临着处理从其他模块发送给我的不良数据的压力.从本质上讲,我是一个"快速失败"原则的开发人员,因此,当问题出现时,我通常能够消除模块中出错的可能性.这不仅仅是责备,只是在错误的地方浪费精力去追逐虫子.

但我不断反对的论点是:"我们不能让这些东西在生产中失败,客户希望这个能够发挥作用,为什么你不解决这个问题".这将是一个强大的论据:你接受的是自由的,你发送的是保守的.

我还应该注意到,这些主要是间歇性的问题.我们在集成测试中看到它们,但它们很难重现.涉及时间和并发.

我很难在这两个原则之间取得平衡.部分原因是我担心,如果我开始允许和传播特殊数据,我会引起麻烦,我对系统的信心也不会那么高.但即使其他模块向我发送错误的数据,我也不能反对保持系统正常工作.其他模块没有得到修复的原因是它们太复杂和脆弱,而我的仍然显得清晰和安全.但是,如果我不抵抗压力,我的模块将慢慢地背负着我一直拒绝的同样问题.

我应该说系统没有在生产中"崩溃",但是我的模块可能只是向操作员显示错误并要求他们联系支持人员.崩溃将是一个大问题,但如果我清楚地报告错误,那么这不是正确的做法吗?我怀疑我的同行只是不希望客户看到任何问题,期间.但是我的模块拒绝了我们产品中其他模块的数据,而不是客户输入.所以在我看来,我们只是没有解决问题.

那么,我是否需要更务实或坚持自己的立场?

performance reliability robustness

17
推荐指数
1
解决办法
604
查看次数

用Python编写的服务器的强大无限循环

我在处理事件期间编写了一个处理事件和未捕获异常的服务器,不得终止服务器.

服务器是一个单线程的非线程python.

我想终止这些错误类型:

  • 一个KeyboardInterrupt
  • 的MemoryError
  • ...

内置异常列表很长:https://docs.python.org/2/library/exceptions.html

我不想重新发明这个异常处理,因为我猜它以前做了好几次.

如何进行?

  1. 有一个白名单:一个正常的例外列表,处理下一个事件是正确的选择
  2. 有一个黑名单:一个例外列表,表明终止服务器是正确的选择.

提示:这个问题不是关于在后台运行unix守护进程.它不是关于双叉而不是关于重定向stdin/stdout :-)

python exception-handling robustness infinite-loop server

15
推荐指数
1
解决办法
436
查看次数

具有PLM包的异方差性强大的标准误差

我在尝试使用Stata后学习R,我必须说我喜欢它.但现在我遇到了一些麻烦.我即将对Panel Data进行一些多次回归,因此我正在使用该plm软件包.

现在我想plm在R中获得与我使用lm函数和Stata时相同的结果,当我执行异方差性稳健和实体固定回归时.

比方说,我有一个变量面板数据集Y,ENTITY,TIME,V1.

我用这段代码在R中得到了相同的标准错误

lm.model<-lm(Y ~ V1 + factor(ENTITY), data=data)
coeftest(lm.model, vcov.=vcovHC(lm.model, type="HC1))
Run Code Online (Sandbox Code Playgroud)

就像我在Stata中执行此回归一样

xi: reg Y V1 i.ENTITY, robust
Run Code Online (Sandbox Code Playgroud)

但是,当我使用plm包执行此回归时,我得到其他标准错误

plm.model<-plm(Y ~ V1 , index=C("ENTITY","YEAR"), model="within", effect="individual", data=data)
coeftest(plm.model, vcov.=vcovHC(plm.model, type="HC1))
Run Code Online (Sandbox Code Playgroud)
  • 我错过了设置一些选项吗?
  • plm模型是否使用其他类型的估计,如果是,如何?
  • 我可以在某种程度上使用plm与Stata 相同的标准错误, robust

r robustness standard-error stata plm

13
推荐指数
2
解决办法
7514
查看次数

如何正常重新连接到套接字

我有一个以下方法连接到程序启动时的终点

ChannelSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var remoteIpAddress = IPAddress.Parse(ChannelIp);
ChannelEndPoint = new IPEndPoint(remoteIpAddress, ChannelPort);
ChannelSocket.Connect(ChannelEndPoint);
Run Code Online (Sandbox Code Playgroud)

我还有一个定时器,设置为每60秒触发一次CheckConnectivity,它会尝试将任意字节数组发送到终点,以确保连接仍然存在,如果发送失败,它将尝试重新连接.

public bool CheckConnectivity(bool isReconnect)
{
    if (ChannelSocket != null)
    {
        var blockingState = ChannelSocket.Blocking;
        try
        {
            var tmp = new byte[] { 0 };
            ChannelSocket.Blocking = false;
            ChannelSocket.Send(tmp);
        }
        catch (SocketException e)
        {
            try
            {
                ReconnectChannel();
            }
            catch (Exception ex)
            {
                return false;
            }
        }
    }
    else
    {
        ConnectivityLog.Warn(string.Format("{0}:{1} is null!", ChannelIp, ChannelPort));
        return false;
    }

    return true;
} 

private …
Run Code Online (Sandbox Code Playgroud)

.net c# sockets robustness tcp-ip

13
推荐指数
2
解决办法
2万
查看次数

编写健壮的shell脚本有哪些规则?

我最近用我编写的shell脚本擦除了我的主目录的一部分.幸运的是,我确实击中了Ctrl- C足够快以避免最坏的情况.

我的错误在于过分依赖相对路径.从现在开始,我总是在更改目录时使用绝对路径...但是,它引出了一个有趣的问题:编写健壮的shell脚本有哪些规则?

我已经知道,当从目录移动到另一个目录时,应始终使用绝对路径.但是,必须有很多其他的(例如,当命令失败时该怎么做,什么是停止脚本并告知用户有关它的好方法).

那么,有没有人有一个专门针对shell脚本的规则和提示的列表?

shell robustness

12
推荐指数
1
解决办法
1518
查看次数

.NET下的原子文件复制

我正在构建一个使用System.IO.File.Copy(...)函数复制文件的服务器应用程序.我的文件可能相当大,因此,如果机器崩溃,它很有可能在复制期间发生.

重新启动服务后,我应该能够获取复制任务并继续.如何检测服务器崩溃是否成功完成或中断了副本?

我目前的计划是将文件复制到临时名称,复制完成后将其重命名为最终名称.这样,文件命名能够在崩溃时携带状态信息.

你有什么好的/更好的建议吗?

编辑:目标操作系统是Win2003,因此事务NTFS不可用

.net robustness file-transfer atomicity

11
推荐指数
1
解决办法
2811
查看次数

稳健性的最佳实践

我只是碰上了这个问题有关初始化局部变量.许多答案都争论简单/可读性稳健性.作为(远程部署)嵌入式系统的开发者,我总是喜欢稳健性,并倾向于遵循几个看似相互冲突的规则:

  • 以允许设备继续运行的方式尽可能地处理每个错误.

  • 在编程或致命错误发生后,尽快将代码设计为失败.

我们都经过培训,可以验证输入,防止设备因用户(或其他外部)输入而损坏; 总是假设数据可能无效并相应地进行测试.

您还遵循哪些其他具体做法来确保稳健性? 示例很有帮助,但我也对普遍适用的技术感兴趣.

robustness

10
推荐指数
4
解决办法
1219
查看次数

如何在禁用C++异常(VS2010)的情况下确保内存不足的可靠性?

我正在研究一个性能关键的动态链接库(DLL),它也应该具有相对较小的二进制大小.由于它没有显式抛出任何异常,我想完全禁用异常支持.但是,有一个例外(双关语无意):当内存不足(OOM)时,我必须向应用程序报告错误代码,以便它有机会正常处理事情.代码库太大,无法单独检查每个分配并传播错误,并包含我不应该触及的外部代码.所以我想在DLL的导出函数中捕获OOM异常.

快速测试表明,在Visual C++ 2010中禁用C++异常时(即没有/ EHa,/ EHsc或/ EHs标志),在分配太多内存时,它仍会跳转到catch(std :: bad_alloc&)块.

所以它似乎按预期工作.但是,我收到以下1级警告:"C4530:使用了C++异常处理程序,但未启用展开语义.指定/ EHsc".MSDN说"在帧中自动存储的对象,在执行throw的函数和捕获throw的函数之间,不会被破坏".

究竟我会在这里失去什么?只要通过库创建的任何内容都可以删除,并且应用程序可以重新开始(如果它选择的话),可以将事物保留在未定义状态.是否存在无法恢复的内存泄漏风险?

DLL是否使用单独的内存池?如果是这样,我可以清除它而不需要应用程序卸载DLL吗?我可以轻松地让我的库忽略任何进一步(导出)函数调用,直到应用程序执行重新初始化.

谢谢你的建议.

c++ dll exception out-of-memory robustness

10
推荐指数
1
解决办法
860
查看次数