软件工程

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

12
.NET中有效的本地化策略[关闭]
我正在为.NET MVC应用程序开发UI,在不久的将来它将要求所有内容的国际本地化。我对.NET总体上非常熟悉,但是从来没有一个项目需要如此高度地关注国际可访问性。 该项目最初是用英语完成的。在这一点上,我应该采取什么措施来简化将来的本地化工作?

11
(数据库)集成测试不好吗?
有人坚持认为集成测试是种种种错误和错误的方法 -一切都必须经过单元测试,这意味着您必须模拟依赖项;由于种种原因,我并不总是喜欢这种选择。 我发现在某些情况下,单元测试根本无法证明任何事情。 让我们以以下(简单,幼稚的)存储库实现(在PHP中)为例: class ProductRepository { private $db; public function __construct(ConnectionInterface $db) { $this->db = $db; } public function findByKeyword($keyword) { // this might have a query builder, keyword processing, etc. - this is // a totally naive example just to illustrate the DB dependency, mkay? return $this->db->fetch("SELECT * …

8
为什么美国政府不允许动态语言用于安全项目?
我知道有些人目前正在为美国军方项目(安全级别低,非战斗人力资源类型数据)进行工作。 项目代码的初始状态已提交给军方进行审查,然后他们通过某种安全分析器工具运行了该程序。它返回了代码中已知安全问题的报告,并要求进行更改,这些更改需要在交付最终产品之前实施。 需要解决的项目之一是删除一部分用Ruby编写的项目,因为它是一种动态语言。 不允许在安全设置中使用动态语言的背景/原因是什么?这是政府采用新技术的速度缓慢吗?还是与静态语言(ala C ++或Java)相比,动态语言会带来额外的安全风险?

11
只调用一次的单行函数
考虑一个无参数(无需编辑)函数,该函数执行一行代码,并且在程序中仅被调用一次(尽管将来再次使用它并非不可能)。 它可以执行查询,检查某些值,执行涉及正则表达式的操作……任何晦涩或“ hacky”的操作。 其背后的理由是避免难以理解的评估: if (getCondition()) { // do stuff } getCondition()单行函数在哪里。 我的问题很简单:这是一种好习惯吗?对我来说似乎不错,但我不知道长期的事情...
120 functions 

21
有什么方法可以防止销售人员永久超额使用?[关闭]
我似乎反复陷入这样的情况,即发布日期的确定不是基于任何技术因素,而是因为Sales某个人当时已经承诺要与客户联系。根据与其他公司开发中的朋友的讨论,似乎发生了同样的事情。 “这里是承诺的功能集,这里是承诺的发布日期”,很难争辩,因为在这一点上有钱可赚,而这一切都胜过一切。 总的来说,有没有办法解决这个问题? 如果不是此版本,将来如何?我的问题是,我看到这样做的唯一方法是尽我所能,但是可以说按原样发布软件。 我不想发布臭虫缠身的软件,因为它是我的名字,但是一次连续80小时工作几个月,一次就证明了任意设置的发布日期。 编辑:记录下来,我现在不每周工作80个小时,这是我想到的,因为要满足发行日期之前预期的功能集需要什么。

7
我的办公室希望无限分支机构合并为政策;我们还有什么其他选择?
我的办公室正在尝试弄清楚我们如何处理分支拆分和合并,但是我们遇到了一个大问题。 我们的问题是长期的分支机构-在这种情况下,您需要几个人在与分支机构分离的分支机构中工作,我们会发展几个月,而当我们达到一个里程碑时,我们就会将两者同步。 现在,恕我直言,处理此问题的自然方法是将侧枝压缩为单个提交。master不断进步;应当-我们并没有追溯数月的并行开发master历史。而且,如果有人需要更好的分辨率来解决分支机构的历史,那么当然,它仍然存在-它不在master,而是在分支机构中。 问题出在这里:我只使用命令行工作,而我团队的其他成员则使用GUIS。而且我发现GU​​IS没有合理的选项来显示其他分支的历史记录。因此,如果您达成一个壁球承诺,说“此开发已从分支被压缩XYZ”,那么查看其中的内容将是巨大的痛苦XYZ。 在SourceTree上,据我所知,这非常令人头疼:如果您正在上master,并且想要查看的历史记录master+devFeature,则需要签master+devFeature出(触摸每个不同的文件),否则滚动浏览一个日志,该日志并行显示您存储库的所有分支,直到找到正确的位置。祝您好运。 我的队友很正确地不想拥有如此难以接近的发展历史。因此,他们希望合并这些大型的,长期的开发分支,并始终使用合并提交。他们不需要任何无法从master分支立即访问的历史记录。 我讨厌那个主意;这意味着平行发展历史的无尽,不可逾越的纠结。但是我没有看到我们有什么选择。而且我很困惑。这似乎阻碍了我对良好分支机构管理所了解的大多数知识,如果找不到解决方案,这将使我不断感到沮丧。 除了不断地将分支机构与合并提交合并到主分支之外,我们这里还有其他选择吗?还是有一个原因导致不断使用merge-commits并不像我担心的那样糟糕?

7
如何避免被更强大的贡献者遗忘?
如最近在这里报道: Xamarin分叉了Cocos2D-XNA(一个2D / 3D游戏开发框架),创建了可以包含在PCL项目中的跨平台库。 但是分叉的项目的创始人说: MIT许可证的目的是限制您的合理使用。不鼓励您购买软件,将其重新命名为自己的软件,然后如您所说的那样“朝新的方向发展”。 虽然不是非法的,但这是不道德的。 似乎新项目的GitHub 页面甚至没有表明它是典型的GitHub方式的分支,而是选择了一个易于删除的“历史记录”部分(请参阅底部)。 所以我的问题是: Xamarin的行为和行为方式是否符合道德? 如果您是单个开发人员或一小群没有资金的开发人员,是否可以避免这种情况? 我希望这可能是一个维基问题,也可能会有一些基于现代OSS伦理/哲学的客观答案。

11
是什么支持C ++可以比使用JIT的JVM或CLR更快的说法呢?[关闭]
我在许多问题中都注意到了SE上一个经常出现的主题,即一个持续的论点,即C ++比Java之类的高级语言更快和/或更有效。相反的论点是,由于JIT等原因,现代JVM或CLR可以同样高效,因为它可以处理越来越多的任务,而C ++ 仅在知道自己在做什么以及为什么以某种方式做事的情况下才更有效率。将会提高性能。这是显而易见的,并且很有意义。 我想知道一个基本的解释(如果有这样的事情...),以为什么和怎么样的任务一定是用C ++更快比JVM或CLR?仅仅是因为C ++被编译成机器代码,而JVM或CLR在运行时仍具有JIT编译的处理开销吗? 当我尝试研究该主题时,我发现的只是上面概述的相同论点,而没有任何确切的信息来了解如何准确地将C ++用于高性能计算。
119 java  c++  performance  jit 

9
我还年轻吗?[关闭]
我觉得自己已经精疲力尽,即使我刚大学毕业五年。 在我职业生涯的前三年,情况一直很不错。我在学校从来没有什么特别的,但是我对我的公司感到特别。回顾过去,我可以说我已经采取了所有正确的措施: 我每天都在积极尝试改善自己。 我强调要尽我所能。 我提出要成为一名优秀的团队成员(并阅读有关的书籍)。 我很开心。 在连续三年被评为顶级员工之后,我将政治资本转化为选择从事只有2个开发人员的有趣,迷人项目的工作:我和一位受人尊敬的高级技术主管。 我在该项目上使用HARD,并取得了巨大的成功。高品质,低错误,无延迟等 高级技术负责人获得了重大晋升并获得了巨额奖金。我什么都没有 我非常失望,以至于我不再关心。在过去的一年中,我只是有点浮动。在最初的4年中,每天工作10个小时后,我感到精力充沛。现在,我每天只需要工作6个小时。 有什么建议吗?我什至不知道我在问什么。我只是希望聪明的人看到这一点,并给我一些智慧。
119 productivity 

8
依赖注入的批评和弊端
依赖注入(DI)是一种众所周知的流行模式。大多数工程师都知道它的优点,例如: 使单元测试中的隔离变得可能/容易 明确定义一个类的依赖 促进良好的设计(例如,单一职责原则(SRP)) 启用快速(开关实现DbLogger的,而不是ConsoleLogger例如) 我认为业界普遍认为DI是一种很好的有用模式。目前没有太多批评。社区中提到的缺点通常很小。他们中的几个: 增加班数 创建不必要的接口 目前,我们与同事讨论建筑设计。他相当保守,但思想开放。他喜欢质疑一些我认为很好的事情,因为IT领域中的许多人只是复制最新趋势,重复优势,而且通常不会考虑太多-不要分析得太深。 我想问的是: 只有一个实现时,应该使用依赖注入吗? 我们应该禁止创建除语言/框架对象之外的新对象吗? 如果我们不打算对特定的类进行单元测试,那么注入单个实现是个坏主意(假设我们只有一个实现,因此我们不想创建“空”接口)吗?

14
是否有任何技术原因导致在编程中默认日期格式为YYYYMMDD而不是其他格式?
有什么工程上的原因为什么会这样?在RDBMS的情况下,我想知道它与性能有关,因为“ YEAR”比“ MONTH”更具体,例如:您只有2000年,而每年都有“ January”,这样可以更轻松,更快捷地按年份过滤/排序某些内容,这就是为什么年份第一的原因。 但是我不知道这真的有道理吗?有什么理由吗?

18
什么时候应该首次提交源代码控制?
我从不知道什么时候项目足够远,可以首先提交到源代码管理。我倾向于推迟提交,直到项目“框架完成”为止,然后我主要提交功能。(我还没有做过足够大的个人项目,以至于没有一个太大的核心框架。)我觉得这不是最佳实践,尽管我不确定会出什么问题。 例如,假设我有一个包含单个代码文件的项目。要使该项目具有极其基本的功能(1个或2个功能),将需要大约10行样板代码和100行。我应该首先签入: 空文件? 样板代码? 第一个功能? 在其他时候? 另外,在特定地点办理登机手续的原因是什么?

14
为什么大多数编程语言仅支持从函数返回单个值?[关闭]
为什么大多数(?)编程语言中的函数都设计为支持任意数量的输入参数,但仅支持一个返回值? 在大多数语言中,可以通过使用输出参数,返回指针或定义/返回结构/类来“解决”该限制。但是,编程语言没有设计为以更“自然”的方式支持多个返回值似乎很奇怪。 请问对此有解释吗?

16
我应该删除未引用的代码吗?
我正在研究中等大小(10万行)的代码库,它们都是相对较新的代码(不到一年),并且具有良好的单元测试覆盖率。 我不断遇到的方法要么不再在任何地方使用,要么仅在仅测试特定方法的单元测试中引用。 如果确定不再需要此代码,是否应该删除它? 删除它的原因: 更少的代码,更少的错误 更少的代码更易于他人消化 它仍在源代码控制下 保留它的原因: 可以作为参考 有时可能有用 它可能被编写为“完善”类的功能

11
执行错误处理的现代方法…
我已经思考了一段时间了,发现自己不断发现警告和矛盾,因此我希望有人可以得出以下结论: 优先于错误代码的异常 据我所知,在从事该行业工作四年,阅读书籍和博客等之后,当前处理错误的最佳实践是抛出异常,而不是返回错误代码(不一定返回错误代码,而是返回错误代码)。类型代表错误)。 但是-对我来说这似乎是矛盾的... 编码接口,而不是实现 我们对接口或抽象进行编码以减少耦合。我们不知道或不想知道接口的特定类型和实现。那么,我们怎么可能知道应该寻找哪些异常呢?该实现可以抛出10个不同的异常,也可以不抛出任何异常。当我们确实捕获到异常时,我们正在对实现进行假设? 除非-接口具有... 异常规格 某些语言允许开发人员声明某些方法会引发某些异常(例如,Java使用throws关键字。)从调用代码的角度来看,这似乎很好-我们明确知道可能需要捕获哪些异常。 但是-这似乎表明... 泄漏抽象 为什么接口应该指定可以引发哪些异常?如果实现不需要引发异常或引发其他异常怎么办?在接口级别,无法知道实现可能要抛出的异常。 所以... 总结一下 当异常(在我看来)与软件最佳实践相矛盾时,为什么还要优先考虑它们?而且,如果错误代码非常糟糕(并且我不需要在错误代码的恶习上卖掉),还有其他选择吗?满足(如上所述)最佳实践要求但不依赖于调用代码检查错误代码返回值的错误处理技术的当前(或即将成为最新技术)是什么?

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.