软件工程

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

3
如何在setup.py中处理私有依赖关系链接
在工作中,我们使用私有pypi服务器。将此pypi服务器指定为依赖项链接: ... from setuptools import setup config = ConfigParser.ConfigParser() rc = os.path.join(os.path.expanduser('~'), '.pypirc') config.read(rc) dependency_links = [ 'https://{}:{}@<private_url>'.format( config.get('dc', 'username'), config.get('dc', 'password'))] setup( dependency_links=dependency_links, ...) 在我们大多数情况下,这都可以正常工作。但是,前段时间我们不得不在客户端服务器上安装软件包。为此,我们必须先复制有效副本,.pypirc然后才能安装任何软件包。 上面的代码也感觉像是一个肮脏的hack。 在不使用硬编码凭据的情况下指定安全的依赖关系链接的正确方法是什么?
10 python 

2
具有存储库模式的TDD
在我的新项目中,我决定尝试使用TDD。一开始我就遇到了问题。我想在应用程序中做的第一件事就是赋予从数据源读取数据的能力。为此,我想使用存储库模式。现在: 如果测试是为了真正实现存储库接口,那么我将测试具有数据库访问权限的类,并且我知道应该避免这种情况。 如果测试不是针对存储库模式的真正实现,那么我将进行良好的测试……只是模拟。在这些单元测试中,将不会测试任何生产代码。 我从两天开始考虑这个问题,但仍然无法提出任何合理的解决方案。我该做什么?

2
JVM如何处理main方法抛出的异常?
我了解异常,将其抛出,处理它们,并将其传播到调用堆栈中较低的方法(即throws)。 我不明白的是: public static void main(String[] args) throws Exception { ... } 现在,我假设在main抛出的情况下,ExceptionJVM将对其进行处理(对吗?)。如果是这样,那么我的问题是: JVM如何处理引发的异常main?它有什么作用?
10 java  exceptions  jvm 

1
游戏行业是否对游戏/渲染的视觉部分使用自动化测试?怎么样?
游戏的某些部分易于以自动化方式进行测试(逻辑,数学,输入处理);但是还有很多是纯视觉的,并且不容易测试。 如果游戏行业将所有这些都留给人工测试,我会感到惊讶。里面有足够的钱,我想应该已经投入了至少对游戏的某些视觉方面进行回归测试的能力。 这是真的?如果是这样,可以测试游戏渲染的可能方式有哪些?捕获输出并比较图像(这可以可靠吗?)?从低级别拦截图形卡中的数据?正在捕获通往图形卡的顶点信息(等)?似乎有很多可能性;但我找不到关于此的任何信息:( 注意:这个问题被标记为对此的重复,但是我并不是要问具体的技术/框架/工具如何做到这一点,而是要更广泛地了解这种做法的想法以及实际的游戏行业(如果他们做的)。

3
干净的代码和混合对象以及功能嫉妒
因此,我最近对代码进行了一些重大的重构。我试图做的主要事情之一就是将类分为数据对象和辅助对象。除其他外,这是由“ 清洁代码”的这一部分启发的: 杂种 这种混乱有时会导致不幸的混合数据结构,即一半对象和一半数据结构。它们具有执行重要功能的函数,也具有公共变量或公共访问器和更改器,它们出于所有意图和目的,将私有变量公开,从而诱使其他外部函数以程序程序将要使用的方式使用这些变量。数据结构。 这样的混合体很难添加新功能,但是也很难添加新的数据结构。他们是两全其美的。避免创建它们。它们表示设计混乱,其作者不确定(或者更糟,是无知)他们是否需要保护功能或类型。 最近,我正在查看我的一个工作对象(恰好实现了Visitor模式)的代码,并看到了: @Override public void visit(MarketTrade trade) { this.data.handleTrade(trade); updateRun(trade); } private void updateRun(MarketTrade newTrade) { if(this.data.getLastAggressor() != newTrade.getAggressor()) { this.data.setRunLength(0); this.data.setLastAggressor(newTrade.getAggressor()); } this.data.setRunLength(this.data.getRunLength() + newTrade.getLots()); } 我立即对自己说:“功能令人羡慕!这种逻辑应该在Data类中-特别是在handleTrade方法中。handleTrade并且updateRun应该始终一起发生”。但是后来我想到“数据类仅仅是一个public数据结构,如果我开始这样做,那么它将成为一个混合对象!” 有什么更好的,为什么?您如何决定该做什么?

6
如何验证给定的域归用户所有?
我正在写一个将主要由公司使用的软件。 然后,我想到了给公司一种注册其电子邮件域的方法的方法,这样,使用该给定域的电子邮件进行注册的每个用户都将自动进入公司组。 我知道Slack会执行类似的操作并且可以工作,但是存在一些问题……例如,我刚刚注册了“ live.it”(Microsoft的live.com意大利语版本)。 我不能仅仅假设,如果用户已经验证了具有特定域的电子邮件,那么将具有相同domain_mail的每个用户放在同一组中是安全的。 例如,如果我向me@gmail.com注册,则不想让用户注册“ gmail.com”有其自己的域。 我想避免使用“在域的根中放入html文件”或“设置TXT记录”之类的方法,因此我想知道应该怎么做。

1
机器代码JIT和执行禁用位
如果CPU / OS具有“执行禁用”位,运行时生成的机器代码(例如JIT的输出)如何由CPU实际执行? 据我所知,许多现代处理器和操作系统包括用于支持NX位,(包括Intel和ARM),这防止了机器代码被存储在任何地址其它不是从正在执行的编译的二进制的代码部分。显然,这是一个不错的安全优势,因为它可以防止外壳代码注入攻击。 但是,如何动态生成机器代码的JIT引擎(如LLVM)如何解决这一问题?
10 machine-code  jit  llvm 

2
是什么造成快速分类的坏情况?
我正在学习quicksort,并想说明quicksort很难解决的各种数组。我想到的快速排序没有初始随机改组,没有2分区,并且不计算中位数。 到目前为止,我想到了三个示例: [1,2,3,4,5,6,7,8,9,10] - when the array is sorted [10,9,8,7,6,5,4,3,2,1] - when the array is reversed [1,1,1,1,1,1,1,1,1,1] - when the array is the same values [1,1,1,2,2,2,3,3,3,3] - when there are few and unique keys 例如,我对此不太确定: [1,3,5,7,9,10,8,6,4,2] 那么,为什么快速排序的阵列与(几乎)理想的阵列相比有什么困难呢?

4
有条件的副作用有没有可能?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在参加中间数据结构课程,作为进入美国每个人都听说过的大学的CS MS程序的先决条件。在课堂上写的一行代码引起了我的注意: if (a > 33 | b++ < 54) {...} 这不会在我的工作场所通过代码审查。如果您在面试中编写了这样的代码,这将是对您的重大打击。(除了附带条件的条件外,它还很聪明,但以清晰度为代价。) 实际上,我从未见过有副作用的条件,而且Googling也不会出现太多问题。下课后还有另一个学生问这个问题,所以我不是唯一认为这很奇怪的人。但是这位教授非常坚决地认为这是可以接受的代码,并且他会在工作中编写类似的代码。(他的FT工作是在您都听说过的一家公司担任首席SWE。) 我无法想象这样的代码行是可以接受的,更不用说是令人满意的了。我错了吗?这个可以吗?那么更一般的情况呢:有副作用的条件治疗呢?那些还好吗?

1
为什么GCC从Bison切换到C ++和C的递归下降解析器?
是否有需要的语言更改或某种实际的原因,使得Bison不再合适或不理想? 我在Wikipedia上看到它们切换了,参考了GCC 3.4和GCC 4.1发行说明。 这些发行说明指出: 手写递归下降C ++解析器已替换了以前的GCC版本中的YACC派生的C ++解析器。新的解析器包含改进的基础结构,这些基础结构可用于更好地解析C ++源代码,扩展的处理以及适当语义分析和解析之间的清晰分隔(如果可能)。新的解析器修复了旧解析器中发现的许多错误。 和: 旧的基于Bison的C和Objective-C解析器已被新的更快的手写递归下降解析器取代 我想知道的是他们遇到了什么实际问题,以及为什么使用Bison不可能/不切实际解决问题
10 c++  c  parsing  compiler 

7
为什么Internet协议的创建者决定使用IP地址来标识特定的计算机?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 5年前关闭。 为什么Internet协议的创建者决定使用IP地址来标识特定的计算机? 为什么不只是在制造时为每个计算机分配唯一的ID,然后使用该ID来标识计算机?

5
为什么“字符集”在实际使用中真的意味着“编码”?
长期以来困扰我的是,太多的软件使用术语“字符集”和“编码”作为同义词。 当人们引用unicode的“编码”时,它们总是表示一个规则集,用于将unicode字符表示为字节序列(例如ASCII或UTF-8)。这似乎是合理而直观的。想法是您使用指定的规则集将这些字符“编码”为字节。 由于这些规则集有时仅提供对所有unicode字符的某些子集进行“编码”的能力,因此您可能会想到,“字符集”(“字符集”的缩写)仅表示一组unicode字符,而无需考虑如何这些字符被编码。因此,编码将暗含一个字符集(像ASCII这样的编码,仅具有编码128个字符的规则,将与那些128个字符的字符集相关联),但是字符集不必暗含一种编码(例如,UTF-8,UTF -16和UTF-32都是不同的编码,但是可以编码相同的字符集。 但是-这是我的问题的症结-“字符集”一词在现实世界中的使用与该词的构造所暗示的不匹配。它几乎总是用来表示“编码”。 例如: charsetHTML中的属性用于指定编码 CharsetJava中的s是编码 charset和character setsMySQL再次是编码 这种对语言的好奇(滥用)年龄有多大?“直觉”的反直觉定义是如何形成的?它可能是从一个时间起源当有真正的是,在实践中,人物的使用编码与套之间有一个一对一映射他们的支持?还是有一些特别有影响力的标准或规范决定了这个词的定义?

3
为什么打包结构不属于C语言?
每个C编译器都提供“打包” C结构的选项(例如__attribute__ ((__packed__))或#pragma pack())。现在,我们都知道,如果我们想以可靠的方式发送或存储数据,则需要打包。自C语言问世以来,这也一直是必需的。 所以我想知道为什么打包结构不属于C语言规范的一部分?即使几十年来已经知道使用它们的必要性,它们甚至不在C99或C11中?我缺少什么?为什么它是特定于编译器的?
10 c 

6
如何确定应如何获得自己的控制器?
我在用PHP构建的Web应用程序中使用MVC模式。 我一直在努力确定是否需要一套新的专用控制器来执行一组操作,或者是否应该将它们放置在已经存在的控制器内。 创建控制器时,有什么好的经验法则可以遵循吗? 例如,我可以拥有: AuthenticationController 动作: index() 显示登录表单。 submit() 处理表单提交。 logout(),不言自明。 要么 LoginController 动作: index() 显示登录表单。 submit() 处理表单提交。 LogoutController 采取行动: index() 处理注销。 要么 AccountController 动作: loginGet() 显示登录表单。 loginPost() 处理登录表单提交。 logoutGet() 处理注销。 registerGet() 显示注册表。 registerPost() 处理表单提交。 以及帐户涉及的任何其他操作。
10 mvc 

2
我应该使用域对象中的存储库还是将域对象推回到服务层?
我来自交易脚本世界,现在开始研究DDD。我不确定将DDD设计与数据库持久性集成在一起的正确方法。这就是我所拥有的: 一个名为OrganisationService的服务类,其接口包含用于检索和保存Organization域对象实例的方法。组织是一个聚合根,并具有与之相关的其他数据:成员和许可证。在OrganisationService中使用EF6数据库优先DBContext来检索OrganisationDB实体以及相关的MemberDB和LicenseDB实体。当由OrganisationService检索并加载到Organization域对象中时,所有这些都转换为与其等效的域对象类。该对象看起来像这样: public class Organisation { public IList<Member> Members { get; set; } public IList<License> Licenses { get; set; } } 我没有在OrganisationService中使用存储库模式...我将EF本身用作存储库,因为现在EF6似乎已使存储库成为多余。 在设计的这一点上,Organization域对象是贫乏的:它看起来像EF POCO Organization类。OrganisationService类看起来很像存储库! 现在,我需要开始添加逻辑。该逻辑包括管理组织的许可证和成员。现在,在交易脚本时代,我将向OrganisationService添加方法来处理这些操作,并调用存储库以与DB进行交互,但是对于DDD,我相信此逻辑应封装在Organization域对象本身内... 这是我不确定应该做什么的地方:作为逻辑的一部分,我需要将这些数据持久化回数据库。这是否意味着我应该在Organization域对象中使用DbContext来做到这一点?在域对象内使用存储库/ EF是否不好?如果是这样,那么这种持久性在哪里? public class Organisation { public IList<Member> Members { get; set; } public IList<License> Licenses { get; set; } public void AddLicensesToOrganisation(IList<License> licensesToAdd) …

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.