软件工程

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

18
编码时保持警觉和清醒[关闭]
您在工作时使用什么方法保持清醒和警觉? 我个人整天不停地喝咖啡。但是我也听说过所谓的运动,它也应该有所帮助。其他人是否有技巧和窍门在工作时保持清醒和警觉?红牛?也许不需要我睡觉的魔术药?

7
程序员应该自给自足吗?
在我目前的工作场所中,我们没有任何测试人员,管理层的理由是:“如果我们有测试人员,则根本不会测试自己的代码”。这种想法似乎对产品质量有害,因为当我测试自己的代码时,由于我了解系统内在而又不知道如何使用,我会错过很多事情这是“错误的”。黑盒测试并不能真正起作用,因为我下意识地避免了专用测试人员会陷入的陷阱。我花了很多时间来修复那些已渗入生产代码并由最终用户发现的错误。 有问题的系统很大,但完全由我开发。这也导致一些管理职责落在我的腿上,例如定义时间表和制定规格。 这些任务应该由我负责吗?我严格地把自己看作一个程序员,没有别的。如果这些是我的责任,在多大程度上?什么时候一个项目如此之大而需要测试人员?程序员是否应该完善规范,担心项目管理甚至提供客户支持? 注意 有些人可能会觉得我不赞成扩大职责–情况并非如此,我渴望获得一个涉及更多管理职责的职位,但目前不在我的职位描述中。在我正式受雇之前,或者在我的薪水中开始显示其他职责之前,我将一直认为自己“只是”一名程序员。不幸的是,作为一名初级开发人员,转为管理职务不会很快发生。 到目前为止,出色的答案,如果您有其他要添加的内容或需要分享的个人经验,请随时提出来!

22
为什么VB如此受欢迎?[关闭]
对我来说,Visual Basic看起来笨拙,丑陋,容易出错并且难以阅读。我让别人解释 原因。尽管就功能而言,VB.net显然是该语言的巨大飞跃,但我仍然不明白为什么有人会选择使用VB而不是C#进行编码。 但是,我仍然看到(似乎是)“ MS商店”中的绝大多数商业Web应用程序都是在VB中构建的。我可以对此进行纠正,但是VB似乎仍然比应有的受欢迎。 任何人都可以帮助回答以下任何(或全部)问题: 我在VB中缺少什么吗?它比C#更容易学习还是“更友好”?有我不知道的功能吗? 为什么今天这么频繁使用VB / VB.net,尤其是在Web项目中?

4
如何在给定的MVVM应用程序中选择不使用框架(Caliburn.Micro等)?
我曾经开始一个MVVM / WPF项目,该项目最终得以构建和部署,为此,我研究了很多Caliburn.Micro MVVM框架。事实是:我最终没有为此使用Caliburn.Micro,最终自己实现了一些MVVM概念(特别是ViewModelBaseand RoutedCommand类)。 现在,我按照相同的原则被分配到一个更大的项目:可以说,“单用户富客户端脱机桌面应用程序”,因此我决定使用Caliburn.Micro。这就是我的“问题”开始的地方。 我已经读过一篇著名的博客文章,其标题为“如果您正在使用MVVM,那么您需要一个框架”,即: “在没有框架的情况下尝试进行诸如MVVM之类的工作是一项巨大的工作。大量重复的代码,重新发明轮子,并训练人们以不同的方式思考。 至少在框架下,您可以避免重复的代码,并希望不必重新发明轮子,从而使您可以专注于对人员进行再培训。再培训部分通常是不可避免的,但是框架提供了管道代码和结构,使过程更容易。” 我会同意一读,但是我在Caliburn.Micro(CM)实际应用中的实际经验是无知和迷失方向。也就是说,该框架根本没有使过程变得更容易,相反。阅读由罗布·艾森伯格相当(太)非正式文档中提供不断重复的例子,从旋绕提供的样品试图推断使用模式,他们完全间接的类和接口的关系,这里的东西似乎被设计为工作基础上除非您是一个经验丰富的天才,否则副作用似乎是人类不可能做到的(对不起,这只蚂蚁很抱歉,但我想您知道我的意思)。 更不用说任何上述琐碎的场景似乎都涉及IoC容器,这是我从未使用过的东西,并且似乎解决了我什至没有的问题。我不想花更多的项目时间来学习这些东西,而不必考虑我的问题和应用程序领域。我只想要一个香蕉,但CM给了我一个拿着一篮香蕉的大猩猩(IoC)。 现在,我正在考虑回到我自己家乡的MVVM框架-仅由我实际上要实现的少数特定于MVVM的类组成-我想至少给CM一个机会,以防万一我在这里丢失了一些东西,或者只是出于纯粹的经验和愚昧无知地“错误地”做事。所以问题是: 人们普遍认为“框架使事情变得更加轻松自然”,但是如果碰巧相反,这是否意味着我不应该使用该框架,或者我试图以错误的方式学习它?有没有一个线索,我什至不应该使用框架?还是有一些“正确”的方法来弄清楚如何将CM用于简单的MVVM开发?
28 frameworks  wpf  mvvm 

4
在实现类中使用设计模式名称是个好主意吗?[关闭]
最近我碰到有大量的中等大蟒蛇的代码库来了MyClassAbstractFactory,MyClassManager,MyClassProxy,MyClassAdapter等类。 一方面,这些名称指示我研究和学习相应的模式,但它们并不能很好地描述班级的工作方式。 此外,他们似乎落在单词的列表禁止内编程:variable,process_available_information,data,amount,compute:过于宽泛的名字,不给我们介绍一下什么功能不能单独使用。 那么应该存在CommunicationManager还是宁愿PortListener?或者,也许我根本不理解问题...?

4
为什么要将登录页面与单个页面应用程序分开?
我想知道为什么将SPA的登录页面作为单独的页面而不是SPA的页面(如在加载和通过ajax请求发送数据中)的页面似乎很流行? 我唯一能想到的就是安全性,但是我无法想到特定的安全性原因。我的意思是,唯一想到的是,如果您的登录页面是SPA的一部分,它将通过ajax发送用户名/密码,而Firebug或网络检查器之类的工具也可以看到该用户名/密码,即使您以普通方式发送该用户名/密码POST请求,还有其他可以轻松捕获此数据的工具(例如fiddler,httpscoop等)。 我有什么想念的吗?

3
“高凝聚力”是什么意思?
我是一名学生,最近加入了一家软件开发公司作为实习生。回到大学时,我的一位教授曾经说过,我们必须努力实现“低耦合和高凝聚力”。 我了解低耦合的含义。这意味着将单独组件的代码分开保存,这样一处更改不会破坏另一处的代码。 但是,高凝聚力是什么意思。如果这意味着将同一组件的各个部分很好地集成在一起,我不知道这将如何变得有利。 高凝聚力是什么意思?可以解释一个例子来理解它的好处吗?


9
您如何组织高度定制的软件?
我正在从事一个大型软件项目,该项目针对世界各地的各种客户进行了高度定制。这意味着我们可能有80%的代码在各个客户之间是通用的,但是还有很多代码必须从一个客户转换到另一个客户。过去,我们是在单独的存储库(SVN)中进行开发的,而当一个新项目开始时(我们的客户很少,但客户众多),我们根据过去的项目中最能满足我们需求的代码创建了另一个存储库。过去一直有效,但是我们遇到了几个问题: 在一个存储库中修复的错误不会在其他存储库中修补。这可能是组织问题,但我发现很难在5个不同的存储库中修复和修补错误,请记住,维护该存储库的团队可能位于世界的另一部分,并且我们没有测试环境,既不知道他们的时间表,也不知道他们有什么要求(一个国家的“错误”可能是另一个国家的“功能”)。 为一个项目进行的功能和改进可能对另一项目也可能有用,或者丢失了这些功能或进行了改进,或者如果将这些功能和改进用在另一个项目中,则经常导致将它们从一个代码库合并到另一个代码库的麻烦(因为两个分支可能已经独立开发了一年) )。 如果必须在分支之间合并所有这些更改,则在一个开发分支中进行的重构和代码改进可能会丢失或造成的危害大于弊。 我们现在正在讨论如何解决这些问题,到目前为止,我们提出了以下解决方案: 将开发保持在单独的分支中,但是要通过建立一个中央存储库来更好地组织它,其中将常规错误修复程序合并到其中,并使所有项目定期(例如每天)将来自该中央存储库的更改合并到自己的更改中。这需要庞大的纪律和分支之间的合并工作。因此,我不相信这会奏效,并且我们可以保持这一纪律,尤其是在时间压力加大的情况下。 放弃单独的开发分支,并建立一个中央代码存储库,我们所有的代码都将存在于此,并通过具有可插拔模块和配置选项进行自定义。我们已经在使用Dependency Injection容器来解析代码中的依赖关系,并且我们在大多数代码中都遵循MVVM模式,以将业务逻辑与UI完全分开。 第二种方法似乎更优雅,但是这种方法有很多未解决的问题。例如:如何处理模型/数据库中的更改/添加。我们将.NET与Entity Framework结合使用来拥有强类型化的实体。我看不到如何处理一个客户所需的属性,而又另一个客户无用的属性而又不会弄乱我们的数据模型。我们正在考虑通过使用卫星表(有一个单独的表,其中特定实体的额外列与原始实体1:1映射在一起)解决数据库中的问题,但这仅是数据库。您如何在代码中处理此问题?我们的数据模型位于一个中央库中,使用该方法我们将无法为每个客户扩展。 我敢肯定,我们不是唯一一个在这个问题上苦苦挣扎的团队,我很震惊地发现关于该主题的资料很少。 所以我的问题如下: 您对高度定制的软件有什么经验,选择了哪种方法以及它如何为您工作? 您推荐哪种方法,为什么?有没有更好的方法? 您是否可以推荐有关该主题的好书或文章? 您对我们的技术环境(.NET,实体框架,WPF,DI)有具体建议吗? 编辑: 感谢所有的建议。大多数构想与我们团队中已有的构想相符,但了解您对它们的经验以及更好地实施它们的提示确实很有帮助。 我仍然不确定我们会走哪条路,也没有做出决定(单独做出),但是我会在团队中传递这一点,并且我相信这会有所帮助。 目前,男高音似乎是一个使用各种客户特定模块的单一存储库。我不确定我们的体系结构是否达到这个目标,或者我们需要投入多少资金才能使其适应要求,因此有些事情可能会在单独的存储库中保留一段时间,但是我认为这是唯一可行的长期解决方案。 因此,再次感谢您的所有回复!

7
不可变与const之间的区别
我经常看到这些术语,immutable并且const可以互换使用。但是,从我的(很少)经验来看,两者在代码中的“合同”上有很大不同: 不可变,使合同,这个对象就不会改变,任何(如Python的元组,Java字符串)。 Const使合约在此变量的范围内不被修改(不保证在此期间,其他线程可能会对指向的对象执行任何操作,例如C / C ++关键字)。 显然,除非语言是单线程(PHP)或具有线性或唯一性键入系统(Clean,Mercury,ATS),否则两者并不等效。 首先,我对这两个概念的理解正确吗? 第二,如果有区别,为什么它们几乎只能互换使用?

13
100%的代码覆盖率是一个梦想吗?
在繁重的jquery / backbonejs Web应用程序中期望100%的代码覆盖率是否可行?当实际代码覆盖率在javascript / jquery中徘徊在92%-95%左右时,由于未达到100%覆盖率而导致冲刺失败是否合理?
28 code-quality  tdd  bdd 

10
是否有使用,学习或推荐XSLT的充分理由?[关闭]
我是过去8年的开发人员。我们主要使用XSLT将XML转换为HTML。我们还将它用于XML到XML的转换。 但是我们现在可以替代所有东西。可以通过诸如ASP.Net之类的编程语言轻松地创建HTML。可以使用任何标准的高级语言来读取和处理XML。由于XSLT中的编程有些复杂,因此任何人都希望使用最新的编程语言。 现在我的问题是:如果不考虑维护已经开发的XSLT的事实,XSLT将来会是一个重要的选择吗?我可以推荐新的程序员学习XSLT吗?
28 xslt 


5
数据输入验证-在哪里?多少?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 数据输入验证对我来说一直是内部的斗争。 即将在我们的旧应用程序重写项目中添加一个真正的安全框架和代码(到目前为止,该框架几乎保持了卡式城堡般的旧安全代码和数据验证),我再次想知道应该验证多少,哪里等等 在担任Java专业开发人员的5年中,我创建并完善了个人规则,以进行数据输入验证和安全措施。当我想改进自己的方法时,我希望有人听到你们的一些想法。通用规则和过程很好,并且特定于Java的规则和过程也很好。 归纳起来,以下是我的指南(在3层Web应用程序样式中公开),并带有简要说明: 第一层客户端(浏览器):最低限度的验证,只有不变的规则(必填电子邮件字段,必须选择一项,依此类推);减少使用诸如“ 6到20个字符之间”之类的附加验证的频率,因为这会增加对变更的维护工作(可以在业务代码稳定后添加); 第一层服务器端(网络通信处理,“控制器”):我对此没有规定,但我认为此处仅应处理数据处理和组装/解析错误(生日字段不是有效日期);在此处添加进一步的验证很容易使其变得很无聊。 第二层(业务层):可靠的验证,不少于;输入数据格式,范围,值,内部状态检查(是否可以随时调用方法),用户角色/权限等;使用尽可能少的用户输入数据,如果需要,再次从数据库中检索它;如果我们也将检索到的数据库数据也视为输入,则只有在已知某些特定数据在DB上不可靠或已损坏得足够多的情况下,我才会对其进行验证-强类型化在这里做了大部分工作,恕我直言; 第三层(数据层/ DAL / DAO):从来没有认为这里需要太多的验证,因为只有业务层才可以访问数据(在某些情况下,例如“ param1为true时,param2不能为空”验证);但是请注意,当我的意思是“这里”是指“访问数据库的代码”或“ SQL执行方法”时,数据库本身是完全相反的; 数据库(数据模型):需要充分考虑,强大和自我实施,以尽可能避免DB上的数据不正确和损坏,并具有良好的主键,外键,约束,数据类型/长度/大小/ precision等-我不再赘述,因为他们有自己的私人讨论。 我知道早期的数据验证是不错的并且是性能方面的,但是重复的数据验证是一个无聊的过程,并且我承认数据验证本身很烦人。这就是为什么这么多编码员跳过它或半途而废的原因。同样,如果每个重复的验证并非始终保持同步,则可能是一个错误。这些是当今我更喜欢将大多数验证放到业务层的主要原因,但要浪费时间,带宽和CPU,并要逐案处理异常。 所以,对于这个你有什么想法?反对意见?您还有其他程序吗?提到这样的话题?任何贡献均有效。 注意:如果您正在考虑Java的做事方式,我们的应用程序是基于Spring的Spring MVC和MyBatis(性能和不良的数据库模型排除了ORM解决方案);我计划将Spring Security添加为我们的安全提供程序以及JSR 303(休眠验证器?)。 谢谢! 编辑:在第三层的一些额外的澄清。

3
在GitHub项目中声明多个许可证
多年来,我一直非常热衷于为在线共享的内容添加许可证,以使其他人更容易确定是否以及如何重用这些内容。在GitHub开始轻轻地“推动”其用户在其存储库中包含LICENSE文件之前,我真的不知道如何用代码来做到最好,尤其是在GitHub上公开共享的代码!–但是从那时起,我一直在尝试充分利用LICENSE文件。 我现在处于与其他人一起从事一个小项目的情况下,这需要提及多个许可证(由于第三方代码和库以及非代码文件)。当我的合作伙伴相当“草率地”处理该问题时,有人建议我“将代码按原样联机,没人会在意”,但我宁愿做得很好。问题是:我不知道应该如何在GitHub上提到几个(不同的)许可证。 我在GitHub上看到了几种不同的解决方案,这就是为什么我很难判断这个稍有不同的问题的答案是否具有权威性。我想知道的是,以下哪个(如果有)是最常见的,或者是否还有其他其他方式可以做到这一点。 创建一个单独的LICENSE文件,并在其中放置所有不同许可证的描述。(问题:应该以特定的顺序放置它们吗?我是否要从文件开头提到其中包含的所有许可证的名称,以便进行更好的概述)? 创建每个许可证一个许可证文件使用,并为它们命名LICENSE.md,LICENSE.LibNameA.md,LICENSE.AssetsB.md等,建议在链接的答案。(问题:命名将基于项目名称?不是许可证名称?如果我对自费材料使用了多个许可证,我是否会在“主要”中提及所有许可证LICENSE.md?如果没有,我该怎么做?) 创建两个许可证文件:一个列出“主要”内容的许可证,即自己创建的所有代码/资产;一种用于所有第三方材料。(以上问题:是否会使用一种特定的命名方案,以及列出第三者资料的顺序?) 最后,如果我正确理解了有关其Licenses API 的各种GitHub说明和项目,那么在确定回购协议的许可证时,只会考虑“主” LICENSE文件(尽管我无法弄清楚会选择哪个许可证)如果提到了几个)。
28 licensing  github 

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.