软件工程

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

8
在开发人员之间分配工作的最佳方法是什么
我和我的团队正在重建我们大约十年前开发的网站,我们希望在敏捷中做到这一点。 因此,在花了很多时间阅读(可能还不够)之后,我遇到了一个问题,即如何在开发人员之间划分工作。 我将更具体地讲,该站点被划分为彼此之间没有太多集成的单独模块。 在开发人员之间划分工作的最佳/最公认的方法是什么? 给每个人一个不同的模块进行工作。 将所有开发人员分配到同一模块,并按模块的不同部分(UnitTesting,DAL和映射,逻辑,UI)划分工作 将所有开发人员分配到同一模块,并按不同的逻辑划分工作(例如,每个开发人员负责一个特定的逻辑(可能是BL中的一个方法),以及UnitTesting,DAL,Mapping和UI ... 也许是完全不同的东西?

10
抽象类上的接口
我和我的同事对基类和接口之间的关系有不同的看法。我相信一个类不应实现接口,除非在需要实现接口时可以使用该类。换句话说,我喜欢看这样的代码: interface IFooWorker { void Work(); } abstract class BaseWorker { ... base class behaviors ... public abstract void Work() { } protected string CleanData(string data) { ... } } class DbWorker : BaseWorker, IFooWorker { public void Work() { Repository.AddCleanData(base.CleanData(UI.GetDirtyData())); } } DbWorker是获得IFooWorker接口的对象,因为它是该接口的可实例化实现。它完全履行了合同。我的同事更喜欢几乎相同的东西: interface IFooWorker { void Work(); } …

3
“ S”在OOPS中代表什么?
我已经在Google中搜索了“ OOPS ” 的完整形式,但是不幸的是,答案有很多。有人说它是“ 系统 ”,有人说它是“ 结构 ”,甚至有人称它为 “ 概要 ”。 有人能启发我,找到带有正确且正确的参考文献的完整OOPS形式吗? 非常感谢大家,帮助了我。


4
微服务应该互相交谈吗?
我正在设计使用微服务的应用程序,但不确定使用哪种最佳机制从多个服务收集数据。 我相信有两种选择: 集成了“服务间”通信机制,该机制允许服务直接对话。在将合并的响应返回给API网关之前,API网关将调用单个服务,然后再调用其他服务来收集数据。然后,API将响应返回给调用方。(当对serviceB的调用需要serviceA的响应时,这必须是同步调用。IE单独的人和地址服务。) 让API网关直接调用每个服务,并在返回响应之前合并API中的数据。 我倾向于第二种选择,因为使服务彼此交谈会引入耦合,在这种情况下,我最好还是构建一个整体应用程序。但是,使用此选项时,我可以想到一些严重的缺点: 让API执行对多个服务的多次调用会增加API服务器的负载,尤其是在其中某些调用处于阻塞状态时。 这种方法意味着API必须“知道”应用程序正在尝试做什么(IE Logic必须被编程到API中才能依次处理调用服务,然后合并数据),而不仅仅是充当微服务的愚蠢“终点”。 我想知道解决此问题的标准方法是什么,是否还有我遗漏的第三种选择?

5
为什么用Lisp学习Lisp口译员如此重要?
我已经看到了许多针对新程序员的CS课程和学习建议,呼吁有抱负的程序员学习专门用Lisp编写的Lisp解释器。所有这些站点都表示类似以下内容:“具有智力上的启示”,“这是每个认真的程序员应有的启发经验”或“它向您展示了硬件/软件的关系”以及其他含糊的陈述,尤其是本文摘自这个著名的方法。 我的问题的普遍看法是,lisp如何实现上述目标,为什么选择lisp?为什么不使用其他语言? 我之所以这样问是因为我刚刚完成了使用scheme编写的方案解释器(摘自SICP http://mitpress.mit.edu/sicp/),现在我正在使用scheme编写python解释器,而我正努力地拥有这个传奇的顿悟那应该专门来自前者。我正在寻找两种语言之间的具体技术细节,我可以在他们的方案解释器中利用它们来了解程序的工作方式。 进一步来说: 为什么对以其所解释的语言编写的解释器进行研究如此强调-是将原始语言和所构建的语言保持直觉仅仅是一项伟大的心理锻炼,还是存在只能根据其本质找到解决方案的特定问题?原始语言? Lisp口译员如何为未来的软件设计展示良好的体系结构概念? 如果我使用其他语言(如C ++或Java)进行此练习,会错过什么? 什么是最常用的,从这个练习外卖或“心理工具”?** **我选择我做,因为我的答案已经注意到,我已经从这个练习更多的技巧获得了在我的脑海设计解析工具,比其他任何一个工具,我想找到解析,可能对计划更好的工作,不同的方法解释器比python解释器。

4
为什么某些排序方法按1、10、2、3…排序?
我注意到,有很多数字排序方法似乎按1、10、2、3 ...排序,而不是预期的1、2、3、10...。需要第一种方法,并且作为用户,只要在实践中看到它,我都会感到沮丧。第一种样式是否有合理的用例?如果是这样,它们是什么?如果没有,那么第一类样式是如何形成的?每种排序方法的正式名称是什么?
30 sorting 

5
什么时候以及为什么要使用嵌套类?
使用面向对象编程,我们可以在一个类(嵌套类)中创建一个类,但是在我4年的编码经验中,我从未创建过嵌套类。 嵌套类有什么用处? 我知道如果嵌套一个类,则可以将其标记为私有,并且我们可以从包含的类中访问该类的所有私有成员。我们可以将变量作为私有变量包含在包含类本身中。 那么为什么要创建一个嵌套类呢? 在哪些情况下应使用嵌套类,或者在使用方面比其他技术更强大?

7
如何处理未处理的异常?(终止应用程序与保持活动状态)
当桌面应用程序中发生未处理的异常时,最佳实践是什么? 我当时想向用户显示一条消息,以便他可以与支持人员联系。我建议用户重新启动应用程序,但不要强行执行。与此处讨论的内容类似:ux.stackexchange.com-处理意外的应用程序错误的最佳方法是什么? 该项目是.NET WPF应用程序,因此所描述的提案可能看起来像这样(请注意,这是一个简化的示例。可能有必要隐藏异常详细信息,直到用户单击“显示详细信息”并为轻松报告错误): public partial class App : Application { public App() { DispatcherUnhandledException += OnDispatcherUnhandledException; } private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { LogError(e.Exception); MessageBoxResult result = MessageBox.Show( $"Please help us fix it and contact support@example.com. Exception details: {e.Exception}" + "We recommend to restart the application. " + …


5
存储数字范围的最有效方法是什么?
这个问题是关于存储一个范围需要多少位的。换一种说法,对于给定的位数,可以存储的最大范围是多少?如何存储? 假设我们要存储一个介于0-255之间的子范围。 例如45-74。 我们可以将上面的示例存储为两个无符号字节,但是让我感到震惊的是,那里必须有一些信息冗余。我们知道第二个值大于第一个值,因此在第一个值大的情况下,第二个值需要较少的位,在第二个值大的情况下,第一个需要较少的位。 我怀疑任何压缩技术都会产生少量结果,因此最好提出一个问题:“一个字节可以存储的最大范围是多少?”。此值应大于通过分别存储两个数字可获得的值。 有没有执行这种操作的标准算法?

6
Scrum是否为需求不变的项目增加了额外的开销?
我正在阅读Gunther Verheyen撰写的Scrum-A Pocket Guide,它说: Standish Group的2011年混乱报告标志着一个转折点。在比较传统项目和使用敏捷方法的项目时,进行了广泛的研究。该报告表明,即使以前认为软件必须按时,按预算并在所有承诺范围内交付的旧期望,采用敏捷方法进行软件开发也会带来更高的收益。该报告显示,敏捷项目的成功率是传统项目的三倍,失败的敏捷项目则少三倍。 因此,我与一位同事争论,他说对于某些项目(例如要求不变的医学/军事),敏捷(尤其是Scrum)在所有会议中都是开销,等等,这更合乎逻辑。例如使用瀑布。 我的观点是,应该在此类项目中采用Scrum,因为这将使过程更加透明并提高团队的生产力。我还认为,如果不需要Scrum事件,将不会花费很多时间,因为我们不需要在Sprint Planning中花整个8个小时来进行1个月的冲刺。我们可以抽出5分钟的时间来确保我们都在同一页面上并开始工作。 那么,Scrum会为需求不变的项目增加额外的开销吗?

3
为什么Kotlin中没有static关键字?
Kotlin主要是Java的直接替代品,但它摆脱了著名的Java结构:static关键字。相反,该类级别的功能主要由伴随对象提供。 伴随对象提供更好替代方法的静态方法和字段有什么问题?我对基本原理感到困惑,并且在文档中找不到任何解释。

3
在TDD中重新设计后该方法变为私有后,方法的测试会如何?
假设我开始开发角色扮演游戏,角色扮演者会攻击其他角色以及类似的东西。 应用TDD,我做了一些测试用例来测试Character.receiveAttack(Int)方法内部的逻辑。像这样: @Test fun healthIsReducedWhenCharacterIsAttacked() { val c = Character(100) //arg is the health c.receiveAttack(50) //arg is the suffered attack damage assertThat(c.health, is(50)); } 说我有10种方法测试receiveAttack方法。现在,我添加一个方法Character.attack(Character)(调用receiveAttackmethod),并在经过一些TDD循环测试之后,我做出一个决定:Character.receiveAttack(Int)应该是private。 前10个测试用例会发生什么?我应该删除它们吗?我应该保留方法public(我不这样认为)吗? 这个问题不是关于如何测试私有方法的,而是关于在应用TDD时重新设计后如何处理它们的问题。


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.