软件工程

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

10
用户故事,功能和史诗之间的关系?
作为尚不熟悉敏捷的人,我不确定我是否完全了解用户故事,功能和史诗之间的关系或差异。 根据这个问题,特征是故事的集合。答案之一表明某个功能实际上是史诗。那么功能和史诗是否被认为是同一件事,基本上就是相关用户故事的集合? 我们的项目经理坚持要有一个层次结构: 史诗->功能->用户故事 基本上所有用户故事都必须属于此结构。因此,所有用户故事都必须属于保护伞功能,而所有功能都必须属于史诗级功能。 对我来说,这听起来很尴尬。有人可以说明用户故事,功能和史诗之间的关系吗?还是有一篇文章清楚地概述了这些差异?
111 agile  terminology 

7
您是否必须在每个源文件中都包含许可证声明?
我一直在寻找可以用于我的开源项目的各种许可证,但是我所见过的所有具有各种许可证的项目似乎都有一个巨大,令人讨厌的(我认为)请注意,每个源文件中都指出该文件已在某个许可证下列出。我认为我没有找到不是公共领域的,没有这样的通知的单个源项目。 这似乎只是浪费时间和文件空间。我计划在项目中放置@license和@author标记,但是我不明白为什么如果我不想将代码公开,则需要在每个文件中列出如此大的通知。 我有什么理由想要在我的项目中包括这样的通知,或者仅仅在README和@license标签中包含一个通知就足够了?这是否会影响大多数许可证的“明确规定”的规则,还是只是过分杀伤,以至于人们不会争论?
111 licensing 

13
我们为什么不存储语法树而不是源代码?
我们有很多编程语言。在将每种语言转换为代码之前,都要对每种语言进行解析和语法检查,以便构建抽象语法树(AST)。 我们有这个抽象的语法树,为什么不存储这个语法树而不是源代码(或在源代码旁边)呢? 通过使用AST而不是源代码。团队中的每个程序员都可以将此树序列化为他们想要的任何语言(具有适当的上下文无关语法),并在完成后解析回AST。因此,这将消除有关编码样式问题(在何处放置{和},在何处放置空格,缩进等)的争论。 这种方法的优缺点是什么?

3
结构化日志记录与基本日志记录的优点
我们正在构建一个新的应用程序,我想包括结构化日志记录。我理想的设置应该是SerilogC#代码和BunyanJS。fluentd我最初想到的是,这些东西会进入然后可能会涉及到许多事情elasticsearch + kibana。我们已经有一个MySQL数据库,因此在短期内,我对获得Serilog + Bunyan设置和开发人员使用它更感兴趣,我们可以登录MySQL,同时花更多的时间来流利地进行其余工作。 但是,我们经验丰富的编码人员之一更喜欢做类似的事情:log.debug("Disk quota {0} exceeded by user {1}, quota, user);使用log4net然后对MySQL运行select语句,例如:select text from logs where text like "Disk quota"; 话虽这么说,哪种方法更好,和/或在选择日志系统类型时我们需要考虑什么?
110 c#  javascript  mysql  logging 

5
人们为什么要在GitHub上分叉存储库?[关闭]
我注意到很多GitHub帐户仅具有从其他帐户派生的存储库。此外,执行此操作的人员通常不会对派生的存储库做出任何贡献。 我听说有人在收集邮票和贝壳,但是为什么有人要收集仓库呢?就我个人而言,如果我想对其进行一些更改,则只会派出一个存储库。

10
为什么在Java 8+中使用Optional而不是传统的空指针检查?
我们最近已经迁移到Java8。现在,我看到应用程序充斥着Optional对象。 Java 8之前(样式1) Employee employee = employeeServive.getEmployee(); if(employee!=null){ System.out.println(employee.getId()); } Java 8之后(样式2) Optional<Employee> employeeOptional = Optional.ofNullable(employeeService.getEmployee()); if(employeeOptional.isPresent()){ Employee employee = employeeOptional.get(); System.out.println(employee.getId()); } 我看不到Optional<Employee> employeeOptional = employeeService.getEmployee();服务本身返回可选值时的附加值: 来自Java 6背景,我认为样式1更清晰,代码行更少。我在这里没有任何真正的优势吗? 通过对所有答案的理解和博客的进一步研究得到巩固
110 java  java8 

14
没有SCM的情况下如何保持代码质量?
我在政府机构工作。这里使用的技术和开发软件的方法已经过时了。 它们具有大量的存储空间,但没有合适的空间来保留和维护用于自动化此处大部分工作的应用程序。 该机构不允许我使用SCM软件(例如GIT或SVN)。 保持代码质量并稍后能够在应用程序中添加新功能的最佳方法是什么? 如何记起对代码所做的更改而又不破坏代码? 编辑:我忘了提及,它们为每台计算机都有网络驱动器,并且这些网络驱动器会以某种方式定期进行备份或保存备份。但是,如果我不创建自己的计划以保存工作并能够在不破坏现有代码的情况下添加新功能,那么与SCM解决方案相比就没有太大的优势。 编辑:由于许多人建议使用便携式Git,所以我必须添加更多信息。我尝试安装Visual SVN服务器,但失败了,因为我没有安装管理员权限。我也尝试下载常规的Git Shell,但是防火墙或网络设置不允许我访问Git下载页面。我什至尝试过,将便携式Git发送到我的Gmail电子邮件中。Google检测到了软件包中的exe文件,也不允许我在工作计算机上下载可移植的Git版本。我还要提到的另一件事是,应用于机构内部计算机的网络策略不允许使用USB存储设备。您可以使用USB端口为智能手机充电或为小扬声器等小工具供电。也有人说过,有些计算机甚至不允许上网。
110 git  code-quality  svn  scm 

7
到底什么是集成测试?
我和我的朋友一直在努力准确地对什么是集成测试进行分类。 现在,在回家的路上,我才意识到,每当我尝试给出一个真实的集成测试示例时,它实际上就是一个验收测试,即。业务人员会大声说出要指定系统应该提供的内容。 我检查了Ruby on Rails文档中对这些测试类型的分类,现在完全把我扔了。 您能否以一个真实的例子为我提供关于集成测试的简短学术描述?
110 testing  agile  tdd 

13
我们是否应该避免C ++具有但Java没有的语言功能?
假设我只能在项目环境中使用C ++。防止使用C ++拥有但Java没有的某些语言功能是否很好(例如:多重继承,运算符重载)? 我认为原因是: 由于Java比C ++更新,因此如果Java没有提供C ++具有的功能,则意味着该功能不好,因此我们应避免使用它。 具有C ++特定功能(例如:朋友功能,多重继承)的C ++代码只能由C ++程序员维护或检查,但是如果我们只编写Java之类的C ++(没有C ++语言特定的功能),则两者都可以维护或检查代码。 C ++和Java程序员。 有一天可能会要求您将代码转换为Java 没有C ++特定功能的代码通常更易于维护 每个C ++语言特定的功能(例如:多重继承)都应具有在Java中实现的替代方法。如果不是这样,则意味着设计模式或代码体系结构存在问题。 真的吗?
110 java  c++  code-quality 

15
不喜欢管理的开发人员的职业道路是什么?
如果您是开发人员(高级或首席开发人员),并且宁愿坚持使用代码/设计而不是从事管理职业,那么您公司的可用职业道路是什么,或者您听说过什么?你能走多远? 是否可以继续成为极客,直到您咬住灰尘或太天真? 例如,像Bob叔叔这样的人是否仍像他们所说的那样被视为开发人员?
110 management  coding 


12
是否比实例变量更喜欢局部变量?
我正在使用的代码库经常使用实例变量在各种简单方法之间共享数据。最初的开发人员坚持认为这要遵循Bob / Robert Martin叔叔在Clean Code书中所述的最佳实践:“功能的第一个规则是它们应该很小。” 和“函数的理想参数个数为零(尼拉度)。(...)参数很难。它们需要很大的概念力。” 一个例子: public class SomeBusinessProcess { @Inject private Router router; @Inject private ServiceClient serviceClient; @Inject private CryptoService cryptoService; private byte[] encodedData; private EncryptionInfo encryptionInfo; private EncryptedObject payloadOfResponse; private URI destinationURI; public EncryptedResponse process(EncryptedRequest encryptedRequest) { checkNotNull(encryptedRequest); getEncodedData(encryptedRequest); getEncryptionInfo(); getDestinationURI(); passRequestToServiceClient(); return cryptoService.encryptResponse(payloadOfResponse); } private void …
109 java  refactoring 

4
“长期”禁令有意义吗?
在当今的跨平台C ++(或C)世界中,我们拥有: Data model | short | int | long | long long | pointers/size_t | Sample operating systems ... LLP64/IL32P64 16 32 32 64 64 Microsoft Windows (x86-64 and IA-64) LP64/I32LP64 16 32 64 64 64 Most Unix and Unix-like systems, e.g. Solaris, Linux, BSD, and OS X; z/OS …

7
您被雇用为一个安全性高的网站修复一个小错误。查看代码,其中充满了安全漏洞。你是做什么?[关闭]
我被某人雇用在网站上做一些小工作。这是一家大型公司的网站。它包含非常敏感的数据,因此安全性非常重要。在分析代码后,我注意到它存在安全漏洞-读取大量PHP文件,将用户获取/发布输入直接扔到mysql请求和系统命令中。 问题是,为他创建站点的人是一位程序员,有家人和孩子依靠这项工作。我不能只说:“您的站点是一个脚本儿童游乐园。让我为您重做一次,一切都会好起来的。” 在这个情况下,你会怎么做? 更新: 我在这里遵循了一些好的建议,并礼貌地向开发人员报告说,我在网站上发现了一些可能的安全漏洞。我指出了这一点,并说那里的SQL注入攻击可能存在一个漏洞,并询问他是否知道。他回答:“当然,但是我认为,要利用它,攻击者应该掌握有关数据库结构的信息;我必须更好地理解”。 更新2: 我说并非总是如此,建议他遵循此Stack Overflow问题链接以正确处理它:如何防止PHP中的SQL注入?他说他会研究的,并感谢我以前告诉过他。我想我的工作已经完成,谢谢大家。

3
在GitHub上分叉一个仓库,但允许派生出新问题
我以前在GitHub上分叉了其他人的存储库,并且我注意到问题仍在原始存储库中,并且我无法在分叉的存储库中提交问题。 我现在有以下任务。我在一家小型企业工作,其中一位负责人正在他的个人帐户上进行开发。他友好地离开了该项目,我们希望将该项目从他的个人帐户迁移到GitHub上的新“角色”帐户。 为了保留代码历史记录,我自然会分叉该存储库,但随后我将得到一个存储库,在该存储库中我们无法提交新问题,这是非常不可取的。 我如何才能将此原始存储库的副本复制到我们的新帐户中,理想情况下仍保留代码历史记录,但是能够在此新帐户中提交新问题?

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.