- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这样的困境。也许有人会考虑基于这个意见,但我相信这与许多项目相关,也可能有人会给出不基于意见的答案。
想象一下,我得到了一个大型 C++ 项目,它可以正常工作很多年(有些人可能会说,如果有 UB,这并不意味着什么,但拜托,这意味着一些东西)。
现在,想象两种情况:
让我们来看第一个场景。
现在如果有 UB(以及它的许多实例)并且项目一直运行良好,我想最好不要碰项目。
但是如果我想给项目添加功能,该怎么办呢?
在这种情况下:
那么,如果代码中有 UB,并且一直运行良好,如果要为其添加新功能怎么办?如果不增加风险,该项目将停止正常工作?
仅通过代码检查修复大型 C++ 项目中的所有 UB 是否现实?如果不是,我们直奔主题,添加新功能可能会破坏工作项目,因为到目前为止它一直运行良好(请参阅上面的两个要点)。
或者也许有人告诉管理层,因为这种情况,不向项目添加任何东西是最安全的。
我希望我把我的问题说清楚了。
我很确定这是常见的情况,人们在这种情况下如何处理?
最佳答案
我知道这种情况。旧的代码库,需要新功能,并且现在需要它们(补充说它在 8051 上运行,如果还不够的话,它只有大约 31 个字节没有 64K)。 问题是由于项目的时间限制,重构、构建完整的单元测试等等都不是一个选项 - 所以要么以任何可行的方式完成,要么不完成
当然,这一切都是从评估现有代码开始的,获取文档并理解它,程序中的功能是什么,程序中的接口(interface)是什么。如果不存在,则分析代码,直到您合理地弄清楚它的模块、它们的作用以及它们如何相互交互,并对其进行一些文档记录。
根据你的问题,你似乎担心编译器是否会产生“正确”的结果,现在“正确”意味着它重现了相同的代码,这些代码在很久以前就可以工作,并且可能经过测试(至少是集成测试),并且在部署的地方可能仍然可以正常工作。
环顾代码库,看看您是否仍然拥有以某种方式验证的成功编译的目标文件。如有必要,请进行一些研究(在您工作的公司中,原始开发人员的计算机可能仍位于某个地方,并带有经过正确验证的编译的工件)。得到那些。
然后创建您的构建脚本,确保它不会触及任何现有的目标文件,除非被要求这样做。这样你就不会编译它们,只链接它们,从而避免来自源代码中潜在 UB 的潜在错误编译。向此构建脚本添加一些警告系统,以检测源与原始文件相比是否发生了更改,因此您最终不会得到错误的链接。
通过这些准备工作,您可以设置一个工作环境,在该环境中您可以逐步完成更改。
如果你需要接触一个源文件,显然你需要对其进行全面评估,如果可用的话使用一些静态分析工具(并且显然在编译时打开所有警告,这样你就可以看到编译器本身可能捕获的任何内容)。
取消项目
您也必须考虑这一点。我假设严格的时间限制不允许“正确”的解决方案。当然,您必须评估风险,如果风险太高,软件的正确操作就太关键了,作为了解风险的开发人员,您有责任向需要完成工作的任何人正确解释它们。出于安全考虑或公司声誉,无论如何,根本不做这个项目可能更好,但那些有权做出决定的人必须理解为什么。
关于c++ - 项目中可能存在未定义行为以及是否添加功能的困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174054/
这很可能是我的语法错误,因为我对在 C++ 中使用多个文件和结构(特别是将结构传递给函数)还很陌生。这是三个文件: 主要.cpp: #include #include #include #inc
我有 TypeScript NestJS 项目。 我需要验证传入的 DTO 到我的 API。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并根据该类型我们需要定义: 房屋:楼层包
是否可以从可用于泛型参数的可能类型集中排除特定类型?如果是如何。 例如 Foo() : where T != bool 将意味着除了类型 bool 之外的任何类型。 编辑 为什么? 以下代码是我尝试强
我的 WebGL 体积光线转换应用程序即将完成。但是我发现了一个问题。我必须通过 2D 纹理模拟 3D 纹理。这不是问题。我正在用小切片创建一个巨大的纹理。巨大纹理的尺寸约为 4096x4096 像素
我正在处理的网页上显示了一个返回顶部按钮。当您向下滚动时,有时单击它时,它会跳到顶部,然后跳回您在页面上的位置,然后像预期的那样平滑滚动到顶部。请记住,它并不总是这样做。这只是一个滞后或故障问题还是我
我对此还很陌生,所以请耐心等待。 我有一个类,它具有三个属性:几个整数和一个用户定义对象的集合。 public class Response { public int num1 { get;
我正在制作一款平台游戏,让玩家每 30 毫秒跳跃一次,并向上添加少量的力。我想我应该使用多线程,因为我之前已经做过一些,而且看起来很简单。无论如何,我尝试了这个: public void jump()
是否可以从可能的类型集中排除特定类型,这些类型可以在泛型参数中使用?如果是这样的话。 例如 Foo() : where T != bool 表示除 bool 类型之外的任何类型。 编辑 为什么? 以下
我正在尝试在单个查询中实现内部和外部联接,我不确定我的做法是正确还是错误,因为我不太擅长查询。 就这样吧。 我有以下表格。 hrs_residentials hrs_residential_utili
关于 my website ,有一段代码可以向页面添加几个元素。这段代码不是我可以编辑的东西,而且我对它放置这些元素的位置不满意,因为它弄乱了我的一些布局。所以我想出了一个小的 jQuery 来将它们
一位客户希望我创建一个数据集,如下所示。我不知道这是否可能或合乎逻辑。 我有表parent: id name ------- ------- 1 parent1 2
这可能吗?google 好像没有这方面的资料.. 这样,如果用户在另一个网站上播放视频或歌曲,我的音量就会自动减小 最佳答案 不,这是不可能的。 如果可能的话,它必须是特定于浏览器的,但我不认为这种情
所以我正在尝试制作响应式页面。问题是为什么它归结为移动数据需要位于列表中。 我会用一些示例代码来解释 所以这可能是桌面上的输出 option1
当您将鼠标悬停在a 元素 上时,是否可以删除url? 这就是我的意思: 最佳答案 一种选择是使用一些 JavaScript。 删除 href=来自 的属性标签,取而代之的是 onclick=...
我已经考虑了几个小时,但我无法取得太大进展。它是这样的: You have an array of size n and q queries. Each query is of the form (l
我一直在尝试编写一个脚本来强化 android。我没有成功! 我正在通过模拟器运行一个 AVD,并且已经用我加载的 android shell 和 bash shell 试过了。正如您将在下面看到的那
Private Sub Workbook_Open() Dim WBname As String WBname = ThisWorkbook.name If Not InStr(WBname, "te
Spark 2.0.0-预览版 我们有一个应用程序使用了相当大的广播变量。我们在大型 EC2 实例上运行它,因此部署处于客户端模式。广播变量是一个巨大的 Map[String, Array[Strin
我正在尝试从此link中提取摘要。但是,我无法仅提取摘要的内容。到目前为止,这是我完成的工作: url <- "http://www.scielo.br/scielo.php?script=sci_a
我的主页中有一个iframe。 iframe页面中有一个modalpopup。因此,当显示modalpopup时,modalpopup的父级是iframe主体和主页父级主体。因此,覆盖层仅覆盖ifra
我是一名优秀的程序员,十分优秀!