软件工程

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


9
为什么变量需要类型?
所以我们写: Customer c = new Customer(); 为什么设计不像我们这样写: c = new Customer(); c.CreditLimit = 1000; 编译器可以计算出指向客户的c点,并允许在c上调用客户的成员。 我知道我们可能要写: IPerson c = new Customer(); IPerson e = new Employee(); 以便能够写出: public string GetName(IPerson object) { return object.Name } string name = GetName(c); // or GetName(e); 但是,如果我们写道: c = new Customer(); e = new …

5
确定适当数量的文档
我目前工作的一般方法是- 尽可能避免记录 仅在有其他团队需要时记录 只是为了澄清,我不是指代码文档-我们这样做是指围绕设计过程的所有文档-如果是UML或DB Schema,类图和带有规范等的word文档。 我将列出老板未记录的原因: 这很耗时-专注于实施 如果设计更改-那么文档应该更改,麻烦倍增 最后,您只得到数百页,没有人想要阅读,也没有人真正编辑,所以到了时间,它就会过时了 这很痛苦-没有人真的想要这样做 现在我意识到我们的工作速度更快,但是我也记得花时间来到这里,直接跳到一些旧代码,什么都不懂。 实际上,我仍然没有得到大部分的旧代码,有时当我进入时,我会看到许多来自不同开发人员的补丁试图进行细微调整。 我确实认为,缺少文档会促进此类补丁,并且从广义上讲,缺乏对系统的理解。 我的问题是: 我们如何平衡文档,以便在团队之间增进持续的知识并且仍然快速有效?

4
调用外部命令行应用程序或内部化该应用程序的逻辑是更好的主意吗?
我有一个“管道”式的过程,该过程实质上只是将一堆现有工具链接在一起以使工作流自动化。对于其中一个步骤,有一个现有的命令行工具已经可以完成该步骤需要执行的操作。 外部CLI工具是基于Java的,我的管道也是基于管道的,因此可以将工具直接集成到管道步骤中,但是该工具非常复杂,目前与具有命令行输入密切相关(例如37个配置标志选项)。 问题是:简单地调用并调用外部过程是一个更好的主意,还是将外部代码集成到我的应用程序中会更好? 集成与调用外部过程的利弊是什么?

2
为什么开发人员提交统计信息有害?
我长期以来(并从其他人那里听到)相信,跟踪提交统计信息(例如每个开发人员每天进行多少次提交)对开发过程有害。原因似乎很明显-开发人员将以较小的增量进行提交,以最大程度地提高每天的提交数量,但是却更难将其一分为二(也许他们的所有中间补丁都不会使存储库格式正确),并且更难以处理提交历史记录(更改将突然出现在多个提交中,而不仅仅是一次提交,还原补丁更加困难等)。 有研究表明提交统计信息有害吗?关于该主题是否有任何优雅而有争议的文章?同等适用的是关于为什么测量错误的事物会导致人们优化错误的事物的任何事情,这个问题只是其中的特例。

2
如何防止程序员捕获用户输入的数据?
我正在开发一个非常注重安全性的Web应用程序。可以采取什么措施来防止那些在应用程序上工作的人员(程序员,DBA,质量保证人员)捕获用户输入的值,这些值应该得到很好的保护,例如密码,社会保险号等?
10 security 

3
源代码控制:角色和职责-最佳实践
我正在寻找有关角色和职责的“最佳实践”,特别是谁负责从开发分支到主干(或主干)的合并。基本上,我正在寻找弹药来帮助我的事业。 让我描述一下我所面对的。我是特定应用程序的首席开发人员(所有者)。我们公司最近从VSS(我是存储我的应用程序的VSS数据库的管理员)转移到TFS(在这里我仅对“运营”团队创建的开发分支拥有权限)。在以前的工作中,我是TFS管理员,所以我了解TFS和MSBuild的使用方法。 我对使用的分支和合并策略没有任何问题(主分支,根据需要创建了错误/项目开发分支,然后合并回main,然后提升为发布分支)。我遇到的问题是: 我无法创建自己的分支。我必须创建一个TFS任务,以使“操作”团队成员为我创建分支。 我无法从Main合并到开发分支。我必须创建一个TFS任务,以使一个“操作”团队成员执行合并,然后希望他不要“踩”我的任何团队变更,因为“运维人员”可能是开发人员,也可能不是开发人员几乎不了解他正在合并的代码。 我不能从开发合并到Main。同样,我必须创建一个TFS任务,以使“操作员”执行合并,希望他能正确执行。然后,我必须创建另一个TFS任务以合并回到我的分支,以便我可以解决由于非开发人员合并到Main而发生的任何问题。 我无法创建或编辑MSBuild脚本。再次,我必须与MSBuild的“ ops”团队合作,以便只能执行最基本的构建任务。(忘记任何复杂的事情,或者天堂般的自定义任务)。 我无法执行MSBuild脚本。同样,只有“ ops”团队可以做到这一点。 最重要的是,通常是一个“离岸”资源来执行所请求的任务,因此,即使我在清晨创建任务(分支/合并/构建),它也可能不会完成直到那天晚上。 现在,“操作”团队维护发布分支没有问题。他们所做的(基本上)是从Main那里获取最新版本并将其升级到release分支;因此只要“ Main”稳定且准备就绪,发布分支就可以了。 我的意见是,技术主管(例如I)应负责维护主干(“主”)以及与开发分支之间的任何合并。团队负责人还应具有生成MS Build脚本以构建和部署到Integration测试环境的能力。 任何人都可以将我定向到可以帮助我证明自己情况的最佳做法文档吗?我所有的搜索只发现了有关分支和合并技术的最佳实践,没有提到WHO应该执行上述分支/合并。

5
断言是异常还是错误?
我是一名专业的C程序员,也是一名业余爱好者Obj-C程序员(OS X)。最近,由于语法非常丰富,我很想扩展到C ++。 到目前为止,我对异常的处理还不多。Objective-C有它们,但是苹果公​​司的政策非常严格: 重要说明:您应保留使用编程异常或意外运行时错误(例如,超出范围的集合访问权限,尝试使不可变对象发生突变,发送无效消息以及失去与窗口服务器的连接)的例外情况。 C ++似乎更喜欢使用异常。例如,如果无法打开文件,RAII上的Wikipedia示例将引发异常。Objective-C会return nil因out参数发送错误而导致错误。值得注意的是,似乎std :: ofstream可以设置任何一种方式。 在程序员上我发现了几个答案,要么宣称使用异常代替错误代码,要么根本不使用异常。前者似乎更为普遍。 我还没有发现有人对C ++做过客观的研究。在我看来,由于指针很少使用,因此如果我选择避免异常,则必须使用内部错误标志。它会处理起来太麻烦,还是会比异常情况做得更好?两种情况的比较将是最佳答案。 编辑:虽然不完全相关,但我可能应该澄清一下nil。从技术上讲,它与相同NULL,但事实是,可以向发送消息nil。所以你可以做类似的事情 NSError *err = nil; id obj = [NSFileHandle fileHandleForReadingFromURL:myurl error:&err]; [obj retain]; 即使第一个电话返回nil。而且,就像您*obj在Obj-C中从未做过的那样,没有空指针取消引用的风险。
10 c++  exceptions 

4
精巧的编程,好的/坏的设计方法
我最近发现了识字编程的概念。我觉得这很有趣。但是我还没有遇到过声称这是构造程序的一种坏方法的说法。似乎没有覆盖很多地方。我什至在这里都找不到任何与此有关的问题。 我的问题不是关于它的缺陷或处理文档的方法。我认为文档对识字编程流程的影响是副作用。我知道设计本来是为了易于文档编制以及正向编程流程的概念。 将问题分为基于小句子的问题的想法似乎确实是一个绝妙的主意。因此,它将简化对程序流程的理解。 素养的设计方法的结果还在于,所需功能的数量将受限于程序员的想象力。代替为特定任务定义功能的方法,可以scrap在识字方法中将其创建为。这将产生代码的自动插入,而不是单独的函数编译,并且随后需要过程间编译优化步骤来获得等效速度。实际上,由于这个事实,唐纳德·E·克努斯(Donald E. Knuth)的第一次尝试执行时间较差。我知道编译器可以解决很多问题,但这不是我关心的问题。 因此,我想获得为什么应该认为这是一种不好/好的设计方法的反馈?

6
处理会议中棘手或意外的技术问题[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 根据我正在从事的项目,可能会要求我与内部利益相关者或客户公司的技术管理人员参加更多会议。 在这些会议的过程中,不可避免地会出现以下几个问题: 您没有答案。 您没有出于某种原因而考虑过。 您认为与本次会议无关或完全超出了本次会议的范围。 在每种情况下,您如何回答这些问题?关于保持权威同时保持诚实的任何提示或技巧?

4
如何说服团队成员使用Web框架?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 问题是这样,细节如下:作为程序员,我有什么可以说/提出来使他支持我的? 我希望听到双方在这一方面的有效论点,但主要是关于如何谈论他的建议。 我的情况是这样的:我正在攻读学位课程的团队项目,正在建立一个中等规模的网站作为大学的原型。在小组中,所有人都被认为是平等的,没有任命的领导者,因此对这个问题的答案不可能是“拉高”。 所有人都是平等的,但是成员之间的知识差距很大。有问题的团队成员和我都是有能力的开发人员,尽管他没有任何行业经验。其他三个成员的能力较弱,其中两个成员完全选择退出发展。由于缺乏知识,三者均拒绝对此情况发表评论。 作为一个整体,我们将决定在网站实施过程中使用哪些技术。具体来说,是否使用PHP框架(Code Igniter)。 我赞成,理由是: 不重新发明轮子 编写良好且经过测试的代码库可以从 开始(截止日期比我们想要的要近) 发展速度 合理且可维护的设计模式和良好实践 他主张采用以前的工作方式: 在需要时将定制的一次性功能写入“库”文件中 数据访问和呈现页面数据,在会话之间进行获取/设置以及获取/发布数据等功能 每页1个文件(不会在控件,表示和数据之间造成关注点的分离) 他反对使用框架的原因主要是基于他无法理解要点:他已经可以做所有这些事情。框架并没有改变它,只是让他变得更困难,因为他必须学习框架。他不想使用自己没有亲自写过的代码。 他还表示,“代码库的质量无关紧要,因为该项目只是一个原型,将永远不会得到维护”。对我来说,这不是编写无法维护的代码的借口。 我可以理解他为什么要提出这些论点,但是我对他的“对可维护性缺乏关注”和“对良好设计的无视”甚至是关注的分离感到质疑。但是,我怀疑他从未研究过设计模式,所以我不知道证明他的方法为何难以维持的有效性。 我想继续这个项目,但是我不想不考虑我多年来学到的一切而去做。就像我之前说过的,这里没有晋升的可能,其他团队成员也不愿意介入。我应该退后一步,按照自己的方式做事吗?他是否太固执,缺乏经验,以至于不了解?还是我在这里固执己见? TL; DR缺乏经验的团队成员固执己见,如何赢得他的支持?

3
GitHub:是否有用于管理问题列表和项目积压的外部工具
最近,我在GitHub上发布了我的一个项目1,当我探索该站点的功能时,我注意到它们有一个相当不错的问题跟踪部分。 我想使用该部分,因为a)他人可以根据需要报告错误,b)其他人可以看到我知道的错误。但是,正如其他人指出的那样,为了创建项目待办事项,不能优先考虑问题列表。到目前为止,我的待办事项一直是一个文本文件,但是我希望能够将其集成,这样就不会在不同的地方维护相同的信息。 拥有一个完整的清单,这也是我们在工作中经常实践的事情,它非常有用,因为我可以打开一个文件,从第1行开始,一次坐着解开2或3个项目,而不必回到完整的问题/故事桶。GitHub不提供此功能。 GitHub所提供的是一个非常不错且干净的API,因此问题可以轻松导出到其他任何东西。我搜索了是否还有其他网站(例如Trello)与GitHub问题集成在一起,但没有找到任何东西。 有人知道这样的产品,服务或离线工具吗?那些使用GitHub的人,您在管理积压方面有什么经验?我有点讨厌手动管理两个断开连接的列表的想法,就像有人似乎对Wiki项目页面所做的那样。 1-无耻的插头不允许这个网站吗?搜索但没有找到明确的答案。如果这是错误的做法,请停止操作,不要继续阅读 作为开发人员,我厌倦了每天浏览30组相同文件夹的麻烦,因此我编写了一个可自动折叠的小实用程序,该实用程序固定在桌面上,可以轻松访问经常使用的文件夹。

2
如何使用废弃的github项目中的代码
我最近遇到了我可以真正使用的github项目,但似乎被放弃了,有很多问题和重要的拉取请求,也许有100多个fork。通常,没有替代项目。 我可以按原样使用代码吗?我会选择叉子而不理会其他人吗?是否可以从拉取请求中手动拉入代码?怎么样?我或其他任何人是否有可能以某种方式组织和从原始编码员遗留的地方起飞?

12
是否可以通过编程学习数学,还是应该学习编程数学?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我在数学上不是最好的,也不是很恐怖,但是比一般人要低,我一直想提高自己的数学水平,但是学校和书本却没能做好,因为我觉得太无聊了。我唯一不会感到无聊的是编码和游戏,所以我认为如果编写一个解决数学问题的程序可以帮助我更好地理解数学,这些问题中的大多数是极限(微积分),函数,微分微积分和其他一些主题(我已经说的不太好)与前面提到的类似。 我的问题是:如果我进行一些特定的程序编码,我是否能够在数学上获得更好的知识,并且如果可能的话,物理学也可以这样做吗?还是我做错了,应该在编程之前学习数学以帮助改善编码? PS:C ++是首选语言。

9
省略编程语言中的继承
我正在开发自己的编程语言。它是一种通用语言(不建议将其用于桌面,请考虑在桌面上使用静态类型的Python,即int x = 1;)。 您认为不允许继承或Mixins可以吗?(假设用户至少具有界面) 例如: Google Go,一种系统语言,通过不允许继承而震惊了编程社区。
10 python  google 

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.