软件工程

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

2
将编程业务逻辑与非IT人员配对
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 您在编码过程中是否有非IT人员与程序员合作的经验? 这就像结对编程一样,但是一个人是一个非IT人员,对业务有很多了解,也许是一个具有数学背景的流程工程师,他知道事物是如何计算的并且可以理解非惯用的程序代码。 我发现非IT工程师很容易理解某些过程性领域特定语言,例如PL / SQL。这些人最终成为代码的共同作者,并保证公式,因子等的正确性。 我发现这种成对编程非常有效率,这种工程类型的用户认为他们也是代码的“所有者”和“作者”,并有助于最大程度地减少沟通过程中的误解。他们甚至帮助设计测试用例。 这种做法常见吗? 它有名字吗? 您有类似的经历吗?

9
我应该为失败的面试编码练习给出答案吗?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我们有一个高级面试候选人未能通过FizzBu​​zz问题1 2的细微差别。 我的意思是说,确实完全没有通过这个问题-甚至还没有结束。 我甚至执教他通过对考虑使用一个循环,并且3和5人真的值得考虑作为特殊情况。 他吹了它。 出于质量检查的目的,我向三个队友提出了相同的确切问题。给了他们5分钟;然后回来收集他们的伪代码。 他们所有人都钉上了钉子,之前从未见过这个问题。两个人问the俩是什么... 在另一种逻辑练习中,应聘者对他选择使用的语言(C#)中的某些可用功能有所了解。因此,这似乎并不是他从未编写过任何代码。但是他的逻辑仍然很烂。 我的问题是我是否应该给他解答逻辑问题的答案。 他知道自己炸死了他们,并在随后的采访中承认了这一点。 另一方面,他从未要求答案或我期望看到什么。 我知道可以使用编码练习来设置失败的候选人(再次,请参见上方的第二个链接)。而且我真的尽力帮助他回答问题的核心。但这是一名高级候选人,坦率地说,即使考虑了面试抖动,Fizz-Buzz也很容易做到。 我觉得我应该给他看一种解决问题的方法,以便他至少可以从经验中学习。但是,他没有再问。 处理这种情况的正确方法是什么? 1 好的,这不是指向实际FizzBu​​zz问题的链接,但这是围绕FizzBu​​zz进行的很好的P.SE讨论,并涉及该问题的各个方面。 2 为了澄清起见,这是我问的Fizz-Buzz的细微差别,这是来自Euler项目的第一个问题。替代印刷Fizz | 对数字求和的嗡嗡声和您有相同的基本问题。 If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of …
14 interview 

5
确保类的唯一实例的方法?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么您的答案正确的解释。答案不够详细的答案可能会被编辑或删除。 我正在寻找不同的方法来确保给定类的每个实例都是唯一可识别的实例。 例如,我有一个Name带field 的课name。一旦我有一个初始化为John Smith 的Name对象,name我就不想再实例化一个Name名称为John Smith的对象,或者如果实例化发生了,我希望将对原始对象的引用传递回去比一个新的对象。 我知道这样做的一种方法是让一个静态工厂保存Map所有当前的Name对象,并且该工厂在将引用返回给a之前检查是否存在以John Smith为名称的对象。Name宾语。 我可以想到的另一种方法是在Name类中具有一个静态Map,并且当传入的for name值已经在另一个对象中使用时,在调用构造函数时引发异常,但是我知道抛出异常在构造函数中通常是个坏主意。 还有其他方法可以做到这一点吗?

1
如何在继承层次结构中验证Liskov替换原理?
灵感来自这个答案: 里氏替换原则要求 是 前提条件不能在子类型中得到加强。 子条件不能弱化后置条件。 超类型的不变量必须保留在子类型中。 历史记录约束(“历史记录规则”)。只能通过对象的方法(封装)将其视为可修改的对象。由于子类型可能会引入父类型中不存在的方法,因此这些方法的引入可能会导致子类型中状态不允许在父类型中发生变化。历史记录约束禁止这样做。 我希望有人能发布违反这4点的类层次结构,以及如何相应地解决它们。 我正在寻找出于教育目的的详细说明,以了解如何识别层次结构中的四个点以及解决该问题的最佳方法。 注意: 我希望发布代码示例供人们使用,但是问题本身是关于如何识别错误的层次结构的:)

4
测试具有随机行为的程序的最佳实践是什么?
在进行研发工作时,我经常发现自己编写的程序在行为上有很大的随机性。例如,当我从事基因编程工作时,我经常编写生成并执行任意随机源代码的程序。 测试此类代码的问题在于,错误通常是间歇性的,并且很难重现。这不仅仅是将随机种子设置为相同的值并重新开始执行。 例如,代码可能从内核环形缓冲区读取一条消息,然后对消息内容进行条件跳转。自然,当以后尝试重现该问题时,环形缓冲区的状态将已更改。 即使此行为是一种功能,它也可能以意想不到的方式触发其他代码,从而经常揭示出单元测试(或人工测试人员)找不到的错误。 是否有建立此类测试系统的最佳实践?如果是这样,一些参考资料将非常有帮助。如果没有,欢迎任何其他建议!

2
为什么UUID / GUID的格式是原来的格式?
全局唯一标识符(GUID)是具有特定格式的分组字符串,我认为这是出于安全原因。 GUID最通常以文本形式写成十六进制数字序列,分为五个组,例如: 3F2504E0-4F89-11D3-9A0C-0305E82C3301 为什么GUID / UUID字符串不只是使用X长度的十六进制编码的随机字节? 此文本符号包含以下字段,并用连字符分隔: | Hex digits | Description |------------------------- | 8 | Data1 | 4 | Data2 | 4 | Data3 | 4 | Initial two bytes from Data4 | 12 | Remaining six bytes from Data4 UUID标准也有多个版本。 第4版UUID通常在内部存储为128位原始数组,并且通常以以下格式显示: uuid:xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
14 uuid 

6
服务器端会话是否违反REST?
根据Roy Fielding(HTTP规范的主要作者之一)在讨论REST时的开创性论文《建筑风格》中提到,他提到: 从客户端到服务器的每个请求都必须包含理解该请求所需的所有信息,并且不能利用服务器上存储的任何上下文。 通过“存储的上下文”他指的是应用程序的状态如什么下一页的页码是对资源的状态,例如任何数据存储,图像等-这可以说是整点休息。 可以公平地说,大多数纯休息尝试(据此定义为符合上述论点的实现)都必须失败,因为它们依赖于在服务器上存储会话数据(持久性还是其他方式)? 会话的概念很常见-特别是对于Web开发人员-但是根据上面的定义它是否是RESTful的?
14 rest 

6
有关如何传播面向对象实践的技巧
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我为一家拥有250名开发人员的中型公司工作。不幸的是,许多应用程序都陷入了过程性思维之中,一些团队不断交付大型事务脚本应用程序,而实际上该应用程序包含丰富的逻辑。他们还无法管理设计依赖性,最终得到的服务依赖于另一批大量的服务(“泥浆大球”的一个清晰示例)。 我的问题是:您能否建议如何传播这种知识? 我知道问题的表面在于这些应用程序的体系结构和设计不佳。另一个问题是,有些开发人员反对编写任何类型的测试。 我正在做一些改变这种情况的事情(但是我要么失败,要么改变太小了) 关于设计原理(SOLID,简洁代码等)的运行演示。 关于TDD和BDD的研讨会。 指导团队(这包括使用声纳,findbug,jdepend和其他工具)。 IDE和重构讲座。 我将来打算做的几件事(但我担心它们可能不好) 组成一个由OO传播家组成的团队,他们在不同的团队中传播OO的思维方式(这些人每隔几个月就要更换团队)。 运行设计审查会议,以批评设计并提出改进建议(即使由于时间限制而未完成改进,我认为这可能会很有用) 。 我在我的教练团队中发现的一件事是,一旦我离开他们,他们就会恢复到原来的做法。我知道我不会花很多时间陪伴他们,通常只有一个月。因此,无论我在做什么,它都不会粘住。 对不起,这个问题让我无奈,但写这个的替代方法是打我的头,直到我晕倒。

5
“ Java程序的结构和解释”这本书对Java程序员来说是一本好书吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 这可能是主观的,可能已经结束,但是我仍然想知道它对阅读计算机程序的结构和解释是否真的有帮助。 计算机程序的结构和解释 该书不使用Java。并不是说我想学习Java。我只是好奇地想知道,成为一个更好的程序员是否会很有用,并且我可以从本书中学到什么,或者他们对本书的其他选择是否更适合Java程序员?
14 learning  books 

6
如今,游戏开发使用了哪些技术?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 每当我在在线论坛上问有关游戏开发的问题时,我总是会得到一些建议,例如学习画线算法,位级图像处理和视频解压缩等。 但是,以《战神3》之类的游戏为例,我很难相信可以使用如此低级的技术来开发这些游戏。 此类游戏的绝对威力无视任何可理解的(对我而言)编程方法。 除了游戏硬件,现在确实是个怪物。因此,有理由认为开发人员将在更高的抽象水平上工作。 游戏行业中最新的开发方法是什么?一个由30-35个开发人员组成的团队(其中大多数是管理和市场营销人员)如何能够制作出令人难以置信的游戏? 如果问题看起来太笼统,您能否解释《战神3》的体系结构?或者您将如何制作克隆?我认为应该客观地负责。

4
如何估计密码的熵?
阅读了有关密码强度的各种资源后,我试图创建一种算法,以粗略估计密码的熵。 我正在尝试创建一种尽可能全面的算法。此时,我只有伪代码,但是算法涵盖以下内容: 密码长度 重复字符 模式(逻辑) 不同的字符空间(LC,UC,数字,特殊,扩展) 字典攻击 它没有涵盖以下内容,应该很好地涵盖(尽管不是很完美): 排序(密码可以通过此算法的输出严格排序) 模式(空间) 谁能提供一些关于此算法可能弱点的见解?具体地说,有人能想到向算法输入密码会过高估计其强度的情况吗?低估问题不大。 算法: // the password to test password = ? length = length(password) // unique character counts from password (duplicates discarded) uqlca = number of unique lowercase alphabetic characters in password uquca = number of uppercase alphabetic characters uqd = …

2
我应该如何选择持续集成工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 我在Wikipedia上找到了这个很酷的用于集成服务器的比较表,但是我不确定如何对工具进行排名以及我的需求和兴趣。图表本身似乎有很多标记为未知的框,因此,如果您愿意在Wikipedia上进行更新,那也可能很棒。 是否有一些性能最好的产品,所以我可以迅速缩小到四个或五个选项? 哪些产品似乎拥有最大的用户群体,以及最新的增强功能以​​及与新工具的集成? 开源产品是最好的吗?或者是否有高质量的工具对家里的单个用户来说可以是很多东西? 使用多个系统(主台式机,仅限本地局域网的家庭服务器,个人和工作笔记本,分布在所有主机上的多个虚拟机)是否会造成问题,以及如何对其进行管理?

9
与歌迷打交道[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 7年前关闭。 我们可能都遇到过这样的人,那个开发人员只知道他的语言是一种真正的语言,并且不会为之闭嘴。你怎么像这样的人?我不想得罪任何人(尤其是因为我工作场所的狂热者是高级开发人员)。但是,当我不得不编写一个永远不会扔到存储库中的一次性脚本并且没有其他人需要知道的脚本时,我希望能够使用自己选择的脚本语言。 我必须处理的想法: 笑吧-“哈哈,是的,也许X语言要容易一些,我想我是受虐狂!” 顺其自然-我真的更喜欢避免这种情况,因为我承受不起与选择新语言有关的生产力下降。 隐藏我的语言-每当我编写脚本或自动执行某些操作时,请成为壁橱程序员并隐藏我的监视器。 您对此情况有何建议?

5
冻结的项目-我应该留给我后面的人什么?
因此,我一直在从事的项目将无限期冻结。如果再次冻结项目时,可能不会将其分配给我或当前团队中的任何人。实际上,我们是在项目冻结之前继承了该项目,但是先前的团队没有任何东西可以帮助我们甚至了解项目的基本需求,因此我们浪费了很多时间来很好地了解项目。我的问题是,您认为我们应该怎么做才能帮助后世的人们最好地了解项目的需求,我们做了什么,为什么要这样做等?我对​​我们为什么应该离开的其他想法持开放态度。一些对其他人也可以在该项目上工作的曲目。 我们已经采取的一些步骤: 技术文档(不完整,但至少有一些); 源控制系统的历史; 估算项目的哪些部分需要改进以及我们为什么要这样做; 一堆单元测试。 我们已完成的所有票证的问题跟踪器(编辑) 您如何看待我们已经准备好的东西,我们还能做什么?

4
具有SQL和数据操作功能的TDD
当我是一名专业程序员时,我从未接受过软件工程方面的正式培训。由于我经常在这里访问,所以我注意到了尽可能编写单元测试的趋势,并且随着我的软件变得越来越复杂,我认为自动化测试是帮助调试的一个好主意。 但是,我的大部分工作涉及编写复杂的SQL,然后以某种方式处理输出。例如,您将如何编写测试以确保SQL返回正确的数据?然后,假设如果数据不受您的控制(例如,第三方系统的数据),那么您如何能有效地测试您的处理例程,而不必手写大量的伪数据? 我能想到的最佳解决方案是对涵盖大多数情况的数据进行查看。然后,我可以将这些视图与SQL连接起来,以查看它是否返回正确的记录,并手动处理视图以查看我的函数等是否正在执行应有的功能。尽管如此,它似乎过于油腻和胡扯。特别是找到要测试的数据...

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.