软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

1
哈希函数分类
在互联网上,我遇到了这个问题: 根据找到键值的各种方法对散列函数进行分类。 像这样的答案 直接法 减法 模除法 数字提取方法 中方法 折叠方式 伪随机法 我觉得很奇怪。我想我对哈希非常了解,但这对我来说简直是胡言乱语,有人可以解释吗?

3
如何在文档中引用代码的特定区域?
我要离开一个项目,在我去之前,我的老板要我记录代码(我没有很好地记录文件)。这没什么大不了的,该项目并不复杂。但是我在我的文档中找到了一些要说的地方,“在XYZ行上通知某某某事”。 在这种情况下,引用特定的行号是没有意义的,因为添加或删除一行代码会立即使文档过期。是否有一些最佳实践来引用特定的代码行而不通过行号引用它? 我已经考虑过在代码中添加如下注释: /* linetag 38FECD4F */ 其中“ 38FECD4F”是该特定行的一些唯一标记。然后,我可以放入文档中,“在标记为'38FECD4F'的行上,注意这样的事情会发生。” 还有其他想法吗?我觉得通常最好记录整个代码单元,而不是记录它们的特定部分,但是在这个特定项目的情况下,会有大量的过程代码,这些代码从未被分解成较小的单元。

2
哪些工具或技术可用于描述不熟悉的代码库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 手动检查不熟悉的代码(以进行检查或修改)时,我似乎有三个选择。 一个自上而下的阅读的代码,通过选择文件名如何根本都好像下一个源文件。 我通常最终会阅读几乎所有内容。一些文件两次。 一个广度优先读取,在那里我找到并用最少的理解阅读所有的调用方法。然后阅读该函数调用的所有函数,依此类推。 如果我深入几次,我的思想栈就会溢出。 甲深度优先读取,其中I通过所有的代码在调试器步骤,不确定是否这将需要8分钟8小时。 一旦我阅读了足够多的代码以对它的工作有一个相当扎实的理解,我通常会反映出我已经阅读了80%或更多的代码库,而基本代码则是20%或更少。我浪费了很多时间。 哪些工具可用于快速掌握陌生的代码?是否有任何工具可以对关键代码路径有一个“大印象”,并允许我深入了解任何一部分的细节?

4
内存管理,用于在C ++中的线程之间快速传递消息
假设有两个线程,它们通过彼此异步发送数据消息进行通信。每个线程都有某种消息队列。 我的问题很低:可以期望什么是管理内存的最有效方法?我可以想到几种解决方案: 发件人通过创建对象new。接听电话delete。 内存池(用于将内存传输回发送方) 垃圾收集(例如Boehm GC) (如果对象足够小)按值复制以避免完全分配堆 1)是最明显的解决方案,因此我将其用于原型。很有可能它已经足够好了。但是与我的特定问题无关,我想知道如果要针对性能进行优化,哪种技术最有前途。 我希望从理论上讲池化是最好的,尤其是因为您可以使用有关线程之间信息流的更多知识。但是,我担心这也是最难解决的问题。很多调整... :-( 此后,垃圾收集应该很容易添加(在解决方案1之后),我希望它表现的很好。因此,我想如果1)效率太低,这是最实用的解决方案。 如果对象又小又简单,则按值复制可能是最快的。但是,我担心这会在受支持的消息的实施方面造成不必要的限制,因此我想避免这种情况。

3
DDD中的Presentation VS Application层
我在域驱动设计中的表示层和应用程序层之间划清界限时遇到麻烦。 控制器,视图,布局,Javascript和CSS文件应该放在哪里? 是在应用程序层还是表示层中? 如果它们都放在同一层,那么包含另一层的是什么?是空的吗?

1
寻找将深度架构重构与基于功能的开发相结合的更好方法
问题陈述: 鉴于: TFS作为源代码控制 繁重的桌面客户端应用程序,带有大量不良代码或几乎没有架构设计的旧代码。 客户不断要求具有音质,快速 交付的新功能,并不断抱怨用户界面不友好。 问题: 应用程序无疑需要深度重构。此过程不可避免地使应用程序不稳定,需要专用的稳定阶段。 我们尝试过: 通过从主节点(MB)到功能分支(FB)的定期合并在主节点中进行重构。(我的错误) 结果:许多不稳定的分支。 我们的建议: 链接到文章(pdf) 通过从MB到RB的合并,创建附加的重构分支(RB)使其与MB定期同步。RB稳定后,我们用RB代替master并创建新分支以进行进一步的重构。这是计划。但是在这里,我期望在将任何FB合并到MB之后将MB合并到RB的真正地狱。 主要优点: 大部分时间稳定掌握。 有没有更好的替代方法?

2
语言解析以查找重要单词
我正在寻找有关如何处理词汇主题的一些投入和理论。 假设我有一个字符串集合,可能只是一个句子,也可能是多个句子。我想将这些字符串解析为最重要的单词,并用分数表示该单词重要的可能性。 让我们看一些我的意思的例子。 范例1: “我真的很想要Keurig,但我买不起!” 这是一个非常基本的示例,只有一个句子。作为一个人,我很容易看到“ Keurig”在这里是最重要的词。另外,“ afford”相对重要,尽管显然不是句子的重点。“我”一词出现了两次,但根本不重要,因为它并没有真正告诉我们任何信息。我可能希望看到像这样的单词/分数哈希: "Keurig" => 0.9 "afford" => 0.4 "want" => 0.2 "really" => 0.1 etc... 范例2: “这是我一生中最好的游泳习惯之一。希望我能保持自己的时光来参加比赛。要是我想起要带上我的非防水手表,那就可以了。” 这个例子有多个句子,因此在整个过程中会有更多重要的单词。如果不重复示例1的重点练习,我可能希望看到其中有两个或三个非常重要的词:“游泳”(或“游泳练习”),“竞争”,“观看”(或“防水”)手表”或“非防水手表”,具体取决于连字符的处理方式)。 举几个这样的例子,您将如何做类似的事情?编程中是否有任何现有的(开源)库或算法已经做到了这一点?

1
Scala的XML文字有什么问题?
在这篇文章中,马丁(该语言的主要名称)写道: [XML字面量]在当时看来是个好主意,但现在却像拇指酸痛一样突出了。我相信通过新的字符串插值方案,我们将能够将所有XML处理放入库中,这将是一个巨大的胜利。 我自己对语言设计感兴趣,我想知道:他为什么写将XML文字合并到语言中是一个错误?关于此功能的争议是什么?

5
与称为功能测试的功能测试相比,正确的功能测试有什么明显的优势?
我正在研究的项目中有很多遗留测试,没有正确模拟出来。因此,它具有的唯一依赖性是EasyMock,它不支持静态变量,带有参数的构造函数等。测试而是依靠数据库连接,从而“运行”测试。由于需要升级现有项目以支持它,因此添加powermock来处理这些情况由于成本过高而被拒绝(另一讨论)。 我的问题是,我可以用来推销正确的单元测试的真实世界有哪些实际好处?有吗 我是在说不好的单元测试(即使它们可以工作)是不好的吗?代码覆盖范围是否同样有效?


2
计算机视觉算法(这怎么可能?)
我最近偶然发现一家公司,该公司创建了一种看起来像计算机视觉技术的技术,该技术能够自动检测入店行窃并向其用户发出警报。 链接 观看该公司提供的一些视频和示例使我完全困惑,他们在现实中如何实现此功能。 我知道这里没有人能够确切地告诉我这是如何实现的,但是任何人都知道并且可以指出我在该领域的研究,或者可能提供有关如何实现或类似的细节。指导从哪里开始? 我的理解是,计算机视觉算法距离这种复杂的算法还差很多年。这种应用真的可行吗?任何人愿意冒险猜测他们是如何实现的?


3
DDD和值对象。可变值对象是否适合使用非Aggr。根实体?
这是一个小问题 有一个带有值对象的实体。没问题 我将值对象替换为新值对象,然后nhibernate插入新值并孤立旧值,然后将其删除。好,那是个问题。 被保险人是我在我域中的实体。他有一组地址(值对象)。地址之一是MailingAddress。当我们要更新邮寄地址时,假设邮编是错误的,按照埃文斯先生的学说,我们必须将旧对象替换为新对象,因为它是不可变的(值对象对吗?)。 但是我们不想删除您的行,因为该地址的PK是MailingHistory表中的FK。因此,按照埃文斯先生的学说,我们在这里几乎陷入了困境。除非我将地址设为实体,否则就不必“替换”它,只需像过去的美好时光那样更新其邮政编码成员即可。 在这种情况下,您会建议我什么?从我的角度来看,ValueObjects仅在您希望封装一组数据库表的列(nhibernate中的组件)时才有用。最好在数据库中具有持久性ID的所有对象都设置为实体(不一定是聚合根),这样您就可以在不重新创建整个对象图的情况下更新其成员,特别是如果这是一个深层嵌套的对象。 你同意吗?埃文斯先生是否允许使用可变的价值对象?还是可变值对象是实体的候选对象? 谢谢

1
詹金斯Paramerized触发器+复制工件
我正在设置Jenkins来处理我们的发行版本。一个发行版本由Windows安装程序组成,该安装程序包含一些必须在Linux上构建的二进制文件。 这是我到目前为止的内容: Windows部分和Linux部分设置为单独的Jenkins项目。 Windows项目已参数化,并使用Subversion标记进行构建和发布。 作为其构建的一部分,Windows项目将为Linux项目触发相同Subversion标记的构建(使用Parameterized Trigger插件),然后将工件从Linux项目复制(使用Copy Artifact插件)到Windows项目的工作区,以便它们可以包含在Windows安装程序中。 我受阻的地方:现在,设置“复制工件”以复制上一次成功的构建。配置“复制工件”以从参数化触发器触发的确切构建中进行复制似乎更可靠,但是我在弄清楚如何使该工作变得困难。我认为有一个用于“构建选择器”参数的选项可以帮助您解决此问题,但我无法弄清楚应如何设置(而在构建过程中花一个小时,盲目尝试不同的可能性会很痛苦。或两个来查找成功或失败)。 我应该如何设置?构建选择器如何工作?

4
我可以(合理地)拒绝签署无担保协议的无偿工作吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 我的一个朋友(叫他乔)正在从事一个有前途的项目,并要求我提供帮助。作为友谊,我同意(口头)不讨论细节,但是现在他有一个潜在的投资者,希望我签署保密协议(NDA)。到目前为止,由于我的所有工作都是无偿的,我告诉乔,如果不对这种风险进行某种补偿,我不愿意将自己置于有法律约束的法律义务中。(它不一定严格地是财务方面的。我会接受少量的所有权股份,甚至可能只是在代码和文档中保证信用。) 我的要求合理吗,还是我只是在引入不必要的复杂性?

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.