Questions tagged «estimation»

估计是寻找估计或近似值的过程,即使输入数据可能不完整,不确定或不稳定,该估计值也可用于某些目的。

4
SIMD编程代码库的维护成本
题: 软件行业的共识是,干净,简单的代码对于代码库和拥有它的组织的长期生存至关重要。这些属性导致较低的维护成本,并增加了继续使用代码库的可能性。 但是,SIMD代码与通用应用程序代码不同,我想知道是否有专门针对SIMD代码的简洁代码的相似共识。 我的问题的背景。 我为各种图像处理和分析任务编写了大量的SIMD(单指令,多个数据)代码。最近,我还不得不将少量这些功能从一种体系结构(SSE2)移植到另一种体系结构(ARM NEON)。 该代码是为收缩包装的软件编写的,因此,如果没有不受限制的重新分配权限(例如MATLAB),就不能依赖专有语言。 典型代码结构的示例: 使用OpenCV的矩阵类型(Mat)进行所有内存,缓冲区和生命周期管理。 检查输入参数的大小(尺寸)后,将获得指向每行像素起始地址的指针。 像素计数和来自每个输入矩阵的每一行像素的起始地址都传递给一些低级C ++函数。 这些低级C ++函数使用SIMD内部函数(用于Intel Architecture和ARM NEON),从原始指针地址加载并保存到原始指针地址。 这些低级C ++函数的特征: 唯一一维的(在内存中连续) 不处理内存分配。(每个分配,包括临时性,都由外部代码使用OpenCV工具处理。) 符号的名称长度(内部名称,变量名称等)的范围大约为10-20个字符,这是非常大的。(读起来就像是技术泡沫)。 不鼓励重复使用SIMD变量,因为编译器在正确地解析不是以“单分配”编码方式编写的代码方面存在很多缺陷。(我已经提交了几个编译器错误报告。) SIMD编程的哪些方面会使讨论与一般情况有所不同?或者,为什么SIMD与众不同? 初期开发费用 众所周知,与随便编写的 C ++代码相比,具有良好性能的C ++ SIMD代码的初始开发成本约为10倍至100倍(具有较大的余量)。 正如在性能与可读/清洁代码之间进行选择的答案中所指出的那样?,大多数代码(包括随便编写的代码和SIMD代码)起初既不干净也不快速。 不鼓励对代码性能(在标量代码和SIMD代码中)进行进化改进(因为这被视为一种软件返工),并且没有跟踪成本和收益。 就倾向而言 (例如帕累托原则,又称80-20规则) 即使图像处理仅占软件系统的20%(在代码大小和功能上),图像处理也相对较慢(当以所花费的CPU时间的百分比表示),花费的时间超过80%。 这是由于数据大小的影响:典型的图像大小以兆字节为单位,而非图像数据的典型大小以千字节为单位。 在图像处理代码中,SIMD程序员受过训练,可以通过识别C ++代码中的循环结构来自动识别包含热点的20%代码。因此,从SIMD程序员的角度来看,“重要的代码” 100%是性能瓶颈。 通常在图像处理系统中,存在多个热点,并占用相当比例的时间。例如,可能有5个热点分别占总时间(20%,18%,16%,14%,12%)。为了获得高性能,需要在SIMD中重写所有热点。 这被概括为气球弹出规则:气球不能两次弹出。 假设有一些气球,说5个。抽取它们的唯一方法是将它们逐个弹出。 弹出第一个气球后,剩下的4个气球现在占总执行时间的更高百分比。 为了获得更大的收益,然后必须弹出另一个气球。(这违背了80-20的优化规则:采摘了悬挂率最低的20%的水果后,可以获得良好的经济效果。) 在可读性和维护方面 SIMD代码显然难以阅读。 即使遵循每一项软件工程最佳实践,也是如此,例如命名,封装,const正确性(并使副作用显而易见),函数分解等。 即使对于有经验的SIMD程序员也是如此。 与等效的C ++原型代码相比,最佳SIMD代码非常扭曲(请参阅备注)。 扭曲SIMD代码的方法有很多,但是10种这样的尝试中只有1种会获得可接受的快速结果。 …

2
在迭代过程中更改估计值可以吗?
我们已经开始由4个开发人员组成的团队使用Agile / Scrum。我们进行了故事估算,并在产品积压订单中订购了故事Primed故事。 我们从对复杂度从1到5的基于点的估计开始,而不是通常的1,2,3,5,8,13 ....等 在处理了几个故事之后,我们觉得一些估计为4点的故事应该只有2个,而其他估计为2点的故事要复杂得多,应该估计为5个。我想知道: 在迭代过程中更改我们的故事估算值可以吗? 是否可以使用当前估计点从1到5,而不是通常的1,2,3,5,8,13 ....等 尽管我个人认为这两种情况都不应该,但是由于我自己的理解还不是很清楚,我需要支持自己(尽管任何好的参考资料都会很好!)

5
对故事的Scrum重新估计
每天,站起来后,我和我的团队都会更新每个故事的估算值。我觉得我们的操作方式有问题,因此需要您的帮助。 这是我们如何做到: 故事A估算:24小时(每天8小时-我们使用“理想天数”作为衡量标准) 第N天:开发人员在早上开始处理故事A(一天结束前要完成8个小时的工作) 第N + 1天:故事A重新估算= 16小时(从第N天开始,从故事A中取出一个工作日) 第N + 2天:故事A重新估算= 8小时(从第N + 1天开始,从故事A中取出一个工作日) 第N + 3天:故事A现在应该完成。但事实并非如此。开发人员认为还需要3个小时才能完成。我们在白板上更新故事并进行相应的燃尽。 第N + 4天:故事A花了整整一天而不是3个小时!现在完成了。5小时的差额在我们的计划中完全无法解决。 我们应该如何每天重新评估我们的故事?
14 scrum  estimation 

8
您是否应该承诺提供不确定是否可实现的功能?
在HN的一篇文章中,我遇到了以下建议: 即使不确定,也请始终对客户/用户说“是”。90%的时间,您会找到一种方法。10%的时间,您会回去道歉。以小价钱支付个人的主要成长 但是我一直认为,在对客户/用户做出任何形式的承诺之前,应该先进行可行性分析,以使它们在任何时候都不会被误导。那么,在什么情况下上述建议应适用?

3
是否有软件工程原理将生产系统上的重用和回归测试成本联系起来?
我曾为一家负责退休金和投资银行的大型金融交易系统工作。经过15年的功能更改,手动回归测试成本已攀升至每个版本20万美元。(1000万本金,每天交易1000万美元)。该系统还与公司周围的其他19个系统对接,可移动大量数据。该系统是用Java实现的。 但是,我们观察到的是,我们做的“重用”越多,回归测试的成本就越高。(原因是您需要“测试您触摸过的代码”-并且重用/共享的代码在触摸时会影响多个地方。因此尽管“干-不要重复自己”-即不要复制和粘贴代码-我们注意到复制和粘贴代码的经济动机。这是为了降低回归测试的成本,因为我们不想修改可以共享的代码,因为这会带来很大的回归测试影响。 我的问题是,是否存在描述重复使用和回归测试成本之间关系的软件工程原理? 我问这个问题的原因是,将系统分解成要测试的较小部分可以说具有成本优势。 假设: “回归测试”指的是“验收测试”,即另一个小组花时间代表企业针对系统编写新的测试和重用旧的测试,包括环境和数据设置。 我知道对大型回归测试成本的下意识反应是“更多自动化测试”。这是一个好原则。在这种环境下,存在两个挑战。 (a)自动化测试在系统边界上的用处不大,除非该系统也具有很高的自动化测试覆盖率。(势力范围挑战)。 (b)从文化上讲,当您的系统已经很大且很复杂时,很难在程序员的时间上获得动力,或者在高度自动化的测试覆盖率上进行资本投资。 (c)维护自动化测试的成本隐藏在项目中,因此很容易在项目级别将其丢弃。 (d)这只是在银行工作的文化现实。 (e)我正在以不同的方式(分解)解决此问题。

7
分配给项目的人员数量与缺陷数量之间确实存在关系吗?
这是一本关于SLIM和软件评估的培训手册的引文: 还要注意,工作量和缺陷之间存在关联。这意味着,给定规模的项目分配给的人越多,缺陷就会越多。 工作量是项目的人事时间(人年,人月)。缺陷数是在生命周期中任何时候检测到的缺陷数。大小定义为组成项目的用例,功能点或SLOC。 假定过程良好且有能力的工程师,这似乎违反直觉。例如,拥有更多的人意味着更多地关注所有工件(需求规格,设计,代码,测试)。除了拥有更多的眼睛之外,我的直觉还表明,在使用适当质量技术的项目中,努力与缺陷之间几乎没有关系。 除了关于Putnam模型的文件(SLIM使用该文件)之外,我找不到任何文档,这些文档表明缺陷与工作量或缺陷与项目人数之间的任何已知关系。这是已知的关系吗?“更多的人=更多的缺陷”这一说法是否成立?

4
在单个敏捷工作项中处理“相关”工作
我是一个由4个开发人员组成的项目团队,其中包括我自己。我们一直在讨论如何处理单个工作项中出现的额外工作。 这些额外的工作通常是与任务稍有相关的事情,但并非总是必须达到项目目标(可能是一种观点)。示例包括但不限于: 重构工作项更改的代码 与项目更改的代码相邻的重构代码 重新设计票证周围较大的代码区域。例如,如果某个项目要更改单个功能,那么您意识到现在可以重做整个类以更好地适应此更改。 改进刚修改过的表单上的用户界面 当这笔额外的工作很少时,我们不在乎。问题是,当这项额外的工作导致项目的实质扩展超出了原始特征点估计时。有时,一个5分的物品实际上需要13个时间。在一种情况下,我们得到了13分,回想起来可能是80分或更高。 在我们的讨论中,有两种解决方案。 我们可以在同一个工作项中接受额外的工作,并将其记为错误估计。对此的论点包括: 我们计划在sprint末尾进行“填充”以解决此类问题。 始终使代码保持比发现的状态更好的形状。不要签入半途而废的工作。 如果我们将重构留给以后使用,则很难安排时间,并且可能永远无法完成。 您现在处于最佳的心理“环境”中来处理此工作,因为您已经在代码中深陷其中。最好是现在就解决它,并且比以后再丢失该上下文时更有效。 我们为当前工作项目划了一条线,并说额外的工作进入单独的工单。参数包括: 拥有单独的票证可以进行新的估算,因此我们不必对自己的真实情况撒谎,也不必承认我们所有的估算都是可怕的。 冲刺“填充”用于应对意想不到的技术挑战,这些挑战是完成票证要求的直接障碍。它不适用于仅“精打细算”的附带物品。 如果要安排重构,只需将其放在待办事项列表的顶部即可。 我们没有办法在估算中正确考虑这些内容,因为出现时似乎有些武断。代码检查者可能会说“那些UI控件(您实际上未在此工作项中对其进行修改)有些令人困惑,您也可以解决吗?” 这就像一个小时,但他们可能会说:“好吧,如果此控件现在与其他控件继承自相同的基类,为什么不将所有这些(几百行)代码都移到基类中并重新连接所有这些内容,级联的变化等?” 那需要一个星期。 它通过在票证中添加无关的工作来“污染犯罪现场”,从而使我们的原始特征点估计毫无意义。 在某些情况下,额外的工作会推迟检入,从而导致开发人员之间的阻塞。 我们中有些人现在说,我们应该决定一些截止日期,例如,如果其他物料少于2 FP,则将其放入同一票证中;如果更多,则将其设为新票证。 既然我们只需要几个月就可以使用敏捷,那么这里周围所有经验丰富的敏捷退伍军人对此有何看法?

5
在故事中应该考虑个人能力吗?
我对故事估计的理解是,应该像想象中的普通开发商那样估计故事的大小,这有点像法律上的“合理旁观者”概念。也就是说,如果您必须这样做,则不应该估计故事的大小。 举个例子:在我之前的工作中,我是一个团队的成员,而我是最自信的Ruby开发人员。我的队友通常会估计与Ruby有关的故事要比我估计的要大得多,并带有诸如“好吧,我不知道X在Ruby中如何工作,所以这需要我很多年。” 我反对这一观点的原因是,冲刺计划是团队能力发挥作用的地方。那是正确的说法,“由于大多数任务都是基于Ruby的,而且我们只有一名强大的Ruby开发人员,因此我们的Sprint容量将比平时低一些”。在估计期间将此因素考虑在内会使该方面加倍。 我会很乐意回答任何权威性的参考文献,但是简单的意见也将是很好的。
11 agile  estimation 

2
软件开发中的日常工作量及其对估算的影响
我坚信,软件开发中的日常工作量(即使应该忽略不计)相对较小,而且应该相对较小,这是软件估算的基本问题。 让我描述一下我如何得出这个结论,并告诉我该论证是否存在严重缺陷: 可以高精度估计的只是例行工作,这意味着以前已经做过。涉及研究和创造力的所有其他类型的工作都无法真正估计,至少不能以+/- 20%的准确度估算。 软件开发就是要避免重复的任务。它的基本原则之一是干燥(不要重复自己)。每当程序员发现自己在做重复的工作时,就该找到避免这种重复的抽象了。这些抽象可能很简单,例如将重复的代码提取到函数中或放入循环中。它们也可能更复杂,例如创建特定领域的语言。无论如何,实施它们都将涉及研究(以前有人做过吗?)或创造力。 从这两点我得出以上结论。 实际上,我已经想了好一阵子了,为什么在其他所有有关软件评估的讨论,博客文章或文章中都没有提到这种关系。太理论了吗?我的假设错了吗?还是太琐碎了-但是,为什么我所知道的大多数开发人员都相信他们可以以+/- 20%或更高的精度进行估算?


3
如何为加入团队的程序员处理估算?
迭代已经开始,新的程序员加入了这个团队,另外一个开发人员估计任务X需要30个小时。 在这种情况下,最佳做法是什么? 新的开发人员使用给定的估算值运行(想法是在计算速度时会纠正任何差异吗?) 新开发人员重新评估任务?(如果是这样,如果它明显更高并且不再适合迭代,该怎么办?) 举起双手回到瀑布吗? 还有其他东西吗?
11 agile  estimation 

3
我如何估算一个开源项目的价值?
我正在尝试为公司节省成本的目标制定指标。为此,我想估计通过使用开源Web应用程序而不是从头开始构建或购买COTS解决方案所实现的节省。该过程的第一步是估算我们自己开发应用程序将花费多少。不幸的是,我不知道如何通过一个完整的估算过程来做到这一点。 由于我拥有源代码,因此我认为应该进行一些启发,以粗略估算出编写它所需的开发人员时间。不幸的是,我在该主题上的网络搜索大部分是关于代码行如何不是生产力或质量的良好指标的文章和意见。 到目前为止,我最好的解决方案是选择开发人员一天可以写的行,然后从那里算出开发人员的小时数。如果我采用这种方法,我希望有一些(最好是基于研究的)证据来支持我对开发人员生产力的主张。 我要做的一件事就是生成最终指标,我真正需要的只是降低开发人员的工作时间或项目成本。估算值越高,我的指标就越好,但是我宁愿估算技术无可比拟,而不是拥有很高的数值。 有没有更好的方法来估算开源项目的价值?

3
会议时间和节省开发时间之间是否存在相关因素?
我正在研究一个项目,我们定期(通常每周一次)召开非正式会议,讨论该项目的状态及其GUI。 我是那里唯一的开发人员,其他4-5个人具有非IT背景。 这次会议花了比平常更长的时间,但是有一次,我的一位同事询问了计划中的某些领域以及如何填补这些领域。我回答并在讨论中发现,我完全错觉了这个过程。 但是由于我们已经讨论过并且事先发现了错误,所以我可以很快地对其进行更改。 在考虑这一点时,我问自己,在节省开发时间方面,在会议时间之间是否存在因素? 例如,1分钟的会议时间可能节省X分钟的开发时间。 如果是这样,这将有助于定义我们的会议应该举行的频率和时间。 (只是为了澄清:我不想召开更好的会议,即使能够大致确定会议的时间也是可有可无的。如果会议时间和开发时间之间存在联系,我最感兴趣的就是我。我的理由是:好奇心! )

10
用户故事水平太高且太概念化,管理层希望开发人员填补空白
我受雇于一家非常有才华的公司,真正的目的是从事XP。沟通很好,管理人员也可以进行富有建设性的讨论,但是由于时间紧迫,某些事情被认为是RUP,无法讨论。 目前,我对实施故事时需要进行的大量更改感到有些困惑。我相信其中许多发现(当然,这需要花费时间和精力)是故事编写者(客户,最终用户和产品所有者)的责任,而不是开发人员的责任。简而言之,用户故事太概念化,只是传达了基本意图,但缺乏足够的细节(特别是前提条件和后置条件,与其他故事的相关性,依赖关系等)。由于XP开发人员同时是设计师和分析师,因此开发人员可以自行决定填补空白。问题在于许多空白是在发现错误的假设进入评估时间和代码之后才发现的,因为注意到比最初预期的情况更加复杂。即使到那时,找到合适的东西来填补也要花费时间,在不同程度上,这被认为是与初始估计的偏差。 我正在寻找一种建设性的方式来将这些含义传达给管理层,而这种方式不会使我成为试图不必要地使事情变得复杂的人。我是新手,但我尚未建立起很高的信誉。 我们欢迎您的见识。 密切相关并且以某种方式给出了答案:开发人员可以期望多少有关用户故事的细节?

6
估算源代码值的方法有哪些?
在过去的几个月中,我一直在从事一些空闲时间的项目。最近,有朋友联系我来建立一家初创公司,该源代码对我们而言非常有价值。 作为联合创始人,此代码可以算作公司资本中的一部分,并可以用来交换股票。但是,您如何估算其价值?您只是将行业标准的工资乘以我花在上面的时间,还是还有其他方法?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.