软件工程

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


5
发烧期间如何进行有效的代码审查?
发布的最后期限是明天,您的同事最终完成了对于此发布至关重要的任务,项目经理站在您的肩膀上,并敦促您最终进行构建,并且您在审核过程中注意到同事的代码中存在缺陷。不是关键的东西,但是如果不是明天发布的东西,您将不会放手。更糟的是,您需要自己完成工作,并需要尽快完成。所以你会怎么做?尽管面临压力,您还是提出反对意见? 我发现的一种方法是将该提交临时合并到另一个分支上,并留待以后检查。如果问题只是表面上的问题,并且是唯一仍在等待代码审查的问题,则它可以工作。但是,有没有更有效的方法来处理此问题?例如,您是否建议让一个人只进行代码审查和测试?

9
估算门票时应该包括测试者的时间吗?
在创建工单时间估算时,应在工单估算中包括测试人员(QA)花费的时间吗?以前,我们一直在估计没有测试人员的时间,但是我们正在谈论总是将其包括在内。对于我们当前的sprint(发布前的最后一个)而言,这很有意义,因为我们需要知道一星期后的总时间。 我一直都知道估算只是为了开发人员时间,因为这往往是团队中的限制资源。一位同事说,无论在测试人员时间之前在哪里工作,也都包括在内。 需要明确的是,这是针对开发人员编写覆盖面广的单元测试,集成测试和UI测试的过程。
17 agile  scrum  estimation  qa 

3
并行调用多个异步服务
我很少有彼此不依赖的异步REST服务。那就是在“等待” Service1的响应时,我可以调用Service2,Service3等。 例如,参考下面的代码: var service1Response = await HttpService1Async(); var service2Response = await HttpService2Async(); // Use service1Response and service2Response 现在,它们service2Response不再依赖service1Response并且可以独立获取。因此,不需要我等待第一服务的响应来呼叫第二服务。 我不认为我可以Parallel.ForEach在这里使用,因为它不是CPU限制的操作。 为了并行调用这两个操作,可以调用use Task.WhenAll吗?我看到的一个问题Task.WhenAll是它不会返回结果。要获取结果,我可以在致电task.Result后调用Task.WhenAll,因为所有任务都已经完成并且我需要获取我们所有的响应? 样例代码: var task1 = HttpService1Async(); var task2 = HttpService2Async(); await Task.WhenAll(task1, task2) var result1 = task1.Result; var result2 = task2.Result; // Use result1 and result2 就性能而言,此代码是否比第一个更好?我可以使用其他方法吗?

6
我是否为了较长的“列”代码而牺牲了较短的变量名?
我是CS课的业余程序员,试图学习适当的编程技能。这就是我的代码的样子,它的边缘扩展到103列。 int extractMessage(char keyWord[25], char cipherText[17424], int rowSize, char message[388]) { int keyColumn = 0; int cipherColumn = 0; int offset = 1; int nextWord = 1; int lengthOfWord = 0; int lengthOfCipher = 0; lengthOfWord = length(keyWord); lengthOfCipher = length(cipherText); while (keyWord[keyColumn] != cipherText[cipherColumn]) { cipherColumn++; if (keyWord[keyColumn + …
17 c  coding-style 

1
发生器功能在功能编程中有效吗?
问题是: 生成器是否破坏了功能编程范式?为什么或者为什么不? 如果可以,可以在函数式编程中使用生成器吗?如何使用? 考虑以下: function * downCounter(maxValue) { yield maxValue; yield * downCounter(maxValue > 0 ? maxValue - 1 : 0); } let counter = downCounter(26); counter.next().value; // 26 counter.next().value; // 25 // ...etc 该downCounter方法显示为无状态。同样,downCounter使用相同的输入进行调用将始终导致相同的输出。但是,同时,调用next()不会产生一致的结果。 我不确定生成器是否会破坏函数式编程范式,因为在此示例中counter是生成器对象,因此调用next()将产生与使用完全相同的另一个生成器对象产生的结果相同的结果maxValue。 同样,调用someCollection[3]数组将始终返回第四个元素。同样,next()在生成器对象上调用四次也会始终返回第四个元素。 为了获得更多的上下文,在编写kata编程时提出了这些问题。回答问题的人提出了一个问题,即生成器是否可以在函数式编程中使用以及它们是否保持状态。

3
在RESTful API中处理令牌更新/会话到期
我正在构建一个使用JWT令牌进行用户身份验证的RESTful API(由login端点发出,然后在所有标头中发送),并且需要在固定时间后刷新令牌(调用renew端点,该端点将返回更新的令牌) )。 用户的API会话有可能在令牌到期之前变得无效,因此我的所有端点都首先检查以下各项:1)令牌仍然有效,以及2)用户会话仍然有效。由于客户端将令牌存储在本地,因此无法直接使令牌无效。 因此,我所有的端点必须向我的客户发出两种可能情况的信号:1)是时候续订令牌了; 2)会话已变为无效,并且不再允许它们访问系统。我可以想到两种替代方法,当两种情况之一发生时,我的端点可以向其客户端发出信号(假设客户端可以适应任一选项): 如果会话无效,则返回http 401代码(未经授权),或者在令牌到期且需要调用renew端点时返回412代码(前提条件失败),这将返回200(正常)代码。 返回401,表示会话无效或令牌已过期。在这种情况下,客户端将立即调用该renew端点,如果它返回200,则刷新令牌,但是如果renew还返回401,则意味着该客户端不在系统之外。 您会推荐上述两种选择中的哪一种?哪一个会更标准,更容易理解和/或更RESTful?还是您会建议完全不同的方法?您发现这两种选择有明显的问题或安全隐患吗?如果您的答案包括支持您的观点的外部参考,则可以加分。 更新 伙计们,请关注一个真正的问题- 表示续订/会话无效的两个http代码替代方案中哪一个最好?不要介意我的系统使用JWT 和服务器端会话的事实,这是我的API针对非常特定的业务规则的特性,而不是我正在寻求帮助的部分;)

2
将大型Angular 2应用与其中的多个小型应用组合
经过3个月的辩论和研究,关于在React(与Redux)和Angular 2之间进行选择的研究,我公司的前端团队最终决定采用Angular 2(因为它更适合我们的问题)。 我们正在从事企业应用程序业务,该业务目前由许多不同的前端技术组成(同时拥有整个后端RESTful),我们希望将其全部替换,并拥有一种技术来简化将来的培训和质量控制。 鉴于我们产品的性质,产品范围很广,并且其中包含模块,这些模块本身是不同的域,可以作为独立的应用程序制作,但产品本身位于单个URL中。 例; 我们将我的产品称为SuperApp。 作为UI,SuperApp具有标准的登录系统,并可以导航到子模块/子产品,因此工作流如下所示。 超级应用 验证用户 忘记密码向导 无需身份验证即可访问公共页面 认证用户 导航系统 家 子产品1 子产品2 子产品3 轮廓 ... ... 团体 ... ... 请注意,在以上表示中,Sub-product1和Sub-product2是两个完全不同的领域,具有完全不同的业务领域。 我现在可以想到的是,我可以将SuperApp创建为单个Angular 2项目,仅包含与其自身相关的组件和视图,并且SuperApp还负责加载多个子应用程序;Sub-product1,Sub-product2(同样是不同的Angular 2项目,它们都有自己的package.json,webpack配置等)通过哑组件,并充当提供顶级路由的Shell和占位符来容纳这些子应用。 有一次,Sub-product1在壳体内加载时,它会自己的路由附加到当前路由SuperApp在已经登陆。 我想要分离的原因是因为这些不同的应用程序(当前使用ExtJS构建)具有专门的团队(我们是一家拥有500多个开发人员的公司),因此,如果他们拥有自己的Angular项目,则可以管理其工具并依赖于他们的喜好,而无需依赖父级父级应用。 但是我无法在官方的Angular文档中或网上找到任何地方是否可以嵌套Angular应用程序(以这种方式共享框架代码,而完全隔离子应用程序的依赖项并仅在应用程序加载时需要),或者是否有其他替代方法可以解决此问题。 任何指导,甚至任何相关文章的链接,将不胜感激。

2
如何构建基于Websockets的实时大量Web应用程序?
在开发实时单页应用程序的过程中,我逐渐采用了websocket,以向用户提供最新数据。在这个阶段,我很伤心地看到,我被摧毁了太多我的应用程序的结构,和我没能找到一个解决这种现象。 在详细介绍之前,请先介绍一下上下文: 该webapp是实时SPA; 后端在Ruby on Rails中。实时事件由Ruby推送到Redis密钥,然后微节点服务器将其拉回并推送到Socket.Io; 前端位于AngularJS中,并直接连接到Node中的socket.io服务器。 在服务器端,在实时之前,我对资源进行了明确的基于控制器/模型的分离,每个过程都附加有处理。当我开始通过Websocket向用户推送内容时,这种经典的MVC设计就被完全粉碎,或者至少被绕开了。现在,我有一个管道,所有应用程序都将向下流动或多或少的结构化数据。而且我感到压力很大。 在前端,主要关注的是业务逻辑的重复。当用户加载页面时,我必须通过经典的AJAX调用加载模型。但是我还必须处理实时数据泛滥,而且我发现自己复制了很多客户端业务逻辑,以保持客户端模型的一致性。 经过一些研究,我找不到任何好的文章,文章,书籍或任何能给人们提供建议的关于如何可以并且应该如何设计现代Web应用程序体系结构的建议,并且要牢记一些特定的主题: 如何构造从服务器发送给用户的数据? 我应该只发送诸如“此资源已更新,您应该通过AJAX调用重新加载它”之类的事件,还是推送更新的数据并替换通过初始AJAX调用加载的先前数据? 如何为发送的数据定义一个一致且可扩展的框架?这是模型更新消息还是“ blahblahblah出现错误”消息 如何不从后端的任何地方发送有关所有内容的数据? 如何减少服务器和客户端上的业务逻辑重复?

4
如何存储只读数据以与应用程序一起部署?
我正在开发一个桌面应用程序,此应用程序需要运行一些信息,但不会更改任何这些信息(必须在应用程序的每次执行中加载数据,但永远不要更改数据)。数据必须与应用程序运行时存储在同一台计算机上(客户端存储吗?)。 如果用户不能轻易更改此信息(假设他们没有太多的IT知识),那也更好。 我应该如何存储这种信息?本地数据库?与应用程序一起发送的XML? 我正在使用WPF。
17 c#  design  data  wpf 

1
RESTful HTTP和websocket在同一应用程序中?
如果某个应用程序已经打开WebSocket了实时供稿,是否应该将其AJAX用于与服务器的其他通信? 因为连接已经打开,我们应该将其用于Request/Response不是实时的请求吗? 我更喜欢RESTful HTTP请求,因为我发现它们更易于调试。您可以使用带有url或curl的浏览器来测试API返回的内容。您无需编写代码即可打开WebSocket。 在同一应用程序中拥有RESTful HTTP API和会很奇怪WebSocket吗?
17 rest  ajax  websockets 

1
什么是灌注泵?有时称为预读
过去,我已经学会了这种表达方式和模式。当然,这个名字来自于那些老式泵,在泵水之前必须先注满水,但是谁在乎呢?我们在这里谈论代码。 我们将欢迎您提供一些非常好的示例,并对模式的完成情况进行解释。今天如何看待这种模式? 灌注有时会导致有缺陷的循环工作,但要付出DRY的代价。因此,这可能是短暂停止更好设计的途中。这被认为是反模式吗?有其他选择吗?

1
Math.min为什么要使用一个元素数组
根据MDN, Math.min仅接受数字,并且如果参数之一不是数字,则将返回NaN。的确,如果我们传递一个包含多个数字的数组,则会得到NaN如下所示:Math.min([1,2])但是,如果我们使用一个仅包含一个数字的数组,Math.min则会返回该数组中的数字,如本例所示:Math.min([5])。有谁知道为什么我们会看到这种未记录的行为?
17 javascript  math 

2
最小惊讶原理(POLA)和界面
25年前,当我学习C ++时,我被教导说接口应该是宽容的,并且尽可能不在乎方法的调用顺序,因为消费者可能无法访问源代码或文档来代替这个。 但是,每当我指导初级程序员和高级开发人员听到我的消息时,他们都会惊讶地做出反应,这让我怀疑这是否真的是一件事情,或者它是否已经过时了。 像泥一样清澈? 考虑具有以下方法的接口(用于创建数据文件): OpenFile SetHeaderString WriteDataLine SetTrailerString CloseFile 现在,您当然可以按顺序浏览这些文件,但是说您不关心文件名(认为a.out)或包括什么标题和尾部字符串,您可以致电AddDataLine。 一个不太极端的示例可能是省略标题和结尾。 还有一种可能是在打开文件之前设置标题和结尾字符串。 这是公认的接口设计原则,还是只是在命名之前采用POLA方式? 注意:不要被这个界面的细节所困扰,这仅仅是一个例子。

7
我什么时候应该使用Perl的DBIx :: Class?
DBIx :: Class是您可以通过DBI连接到的任何数据库的流行Perl接口。关于它的技术细节有很好的文档,但是关于它的正确使用(包括您可能不希望使用它的情况)的信息很少。 在许多情况下,人们反射性地实现它是因为他们认为应该将它用于涉及数据库的所有内容。但是,我经常看到它被滥用到令人痛苦的地步。我在代码和体系结构审查期间的问题始终是“ Foo给您带来什么好处?” 通常,在这种情况下,我看到的开发人员无法对此做出一致的回答。但是然后,他们也常常不了解简单的SQL。 在过去的几个月中,我一直在问人们“为什么使用DBIx :: Class?” 并且仅收到一个很好的答案(该人还能够回答后续问题“您何时不使用它”)。首席开发人员Peter Rabbitson在《FLOSS周刊》的访谈中得到了一个答案,但在访谈的中间有些隐瞒。 因此,如何确定使用DBIx :: Class是否适合项目?
17 perl 

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.