软件工程

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

7
客户信息记录的事实标准[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我目前正在评估一个潜在的新项目,该项目涉及为典型的客户信息(用户名,密码,姓氏和姓氏,电子邮件,地址,telfnr等)创建数据库。此时,仅对需求进行了粗略的定义。 预期客户数据库的记录为O(数百万)。为了计算数据库大小和评估潜在的数据库选项和体系结构的一些背景数据,我正在寻找此类记录的实际标准。特别是,每个字段的标准大小(名字,姓氏,地址等)或简单客户记录的平均平均值都是很好的信息。 在拥有如此众多的电子商务网站的情况下,应该有某种可以重复使用的典型配置,并且可以避免重新发明轮子。 有任何想法吗? ----编辑---- 答案似乎是要采用标准的客户记录而不是设计自己的记录。我想强调的是,这个问题的重点是为客户对象的字段大小确定参考,并避免自己搞清楚(我在原始文本中强调了这一部分,现在以粗体显示)。

4
“ UML对MDD来说是最糟糕的事情。”为什么?
威廉·库克(William Cook)在一条推文中写道: “ UML对MDD来说是最糟糕的事情。幸运的是,现在许多人意识到了这一点…… ” 我想知道该说法背后的原因(显然,我不是在指他的个人观点)。 我注意到那里的许多人不太喜欢UML。同样值得一提的是,他在学术界,UML成为有效设计和建模的圣杯。
17 design  uml  mdd 

2
储存库和工作单元之间的关系
我将实现一个存储库,并且我想使用UOW模式,因为该存储库的使用者可以执行多个操作,因此我想一次提交它们。 在阅读了有关该问题的几篇文章之后,我仍然不知道如何将这两个元素联系起来,具体取决于文章是通过其他方式完成的。 有时,UOW是存储库内部的内容: public class Repository { UnitOfWork _uow; public Repository() { _uow = IoC.Get<UnitOfWork>(); } public void Save(Entity e) { _uow.Track(e); } public void SubmittChanges() { SaveInStorage(_uow.GetChanges()); } } 有时它是外部的: public class Repository { public void Save(Entity e, UnitOfWork uow) { uow.Track(e); } public void SubmittChanges(UnitOfWork uow) { SaveInStorage(uow.GetChanges()); …

3
您将如何对OpenGL的图形代码进行单元测试或执行最有效的自动化测试?
我在C ++中的OpenGL之上编写游戏和随附的图形引擎。我也是良好的编码过程和自动化测试的粉丝。图形输出+测试似乎几乎是不混溶的,因为输出通常仅是可视的,或者非常注重视觉。 例如,想象一下按字节分析渲染到屏幕上的原始图像流-您需要与之比较的测试数据,这很难创建/获取,并且通常渲染的图像在屏幕上并不相同。在不同时间运行时的字节级别-算法中的微小变化将完全破坏该方法。 我正在考虑创建一个可视化的单元测试套件,在其中基本上可以渲染不同的测试场景,显示诸如阴影贴图,动画等之类的内容。作为CI的一部分,这些场景随后将被渲染为视频。具有不同指标的文件(或可能将其保留为可执行文件)。这仍然需要对视频文件进行手动检查,但至少会实现某种程度的自动化和标准化。 你怎么看?我希望有更好的方法?

2
超媒体(HATEOAS)有什么好处?
对于供程序使用的API(相对于人类直接浏览您的API而言),HATEOAS的好处我不理解。当然,客户并没有绑定到URL模式,但是他们绑定了数据模式,这在我看来也是一样。 例如,假设我想查看订单上的商品,假设我已经发现或知道订单URL。 HATEOAS: order = get(orderURL); item = get(order.itemURL[5]); 非HATEOAS: order = get(orderURL); item = get(getItemURL(order,5)); 在第一个模型中,我必须知道订单对象具有itemURL字段的事实。在第二个模型中,我必须知道如何构造商品URL。在这两种情况下,我都必须提前“知道”某件事,所以HATEOAS实际为我做什么?

3
为什么树木向下生长?
为什么树木在计算机科学中会向下生长? 我感觉它可以回溯到打印机,并且遍历树的程序首先打印根,然后使用无底纸叠的概念来表达可能遇到的不确定的递归级别。 参考文献: 树木向下生长,其根在页面顶部,叶子在下方 从“ 神圣的战争”和“和平请愿”谈起。 按照惯例,树木被画成向下生长 摘自Wikipedia上有关树数据结构的文章。 真实的树木从根部向上生长到天空,而计算机科学的树木从根部向下生长 摘自David Schmidt的讲义。

4
C ++中move构造函数的动机和使用
最近,我一直在阅读有关C ++中的move构造函数的信息(请参见例如此处),我试图了解它们的工作方式以及何时使用它们。 据我了解,移动构造函数用于缓解由于复制大型对象而导致的性能问题。维基百科页面上说:“ C ++ 03的一个长期性能问题是,当对象按值传递时,可能隐式地发生昂贵且不必要的深拷贝。” 我通常会解决这种情况 通过引用传递对象,或 通过使用智能指针(例如boost :: shared_ptr)来传递对象(智能指针而不是对象被复制)。 在哪种情况下上述两种技术还不够,而使用move构造函数更方便?

1
C#-4.0是开放标准吗?
Ecma-334(ISO / IEC 23270:2006)标准对应于该语言的2.0版。 Microsoft可以免费获得4.0版的规范,但是Microsoft的开放规范列表仅列出了Ecma(2.0版)版本。 那么,在更高版本中添加的所有良好功能(LINQ,lambda函数等)又如何呢?可以在他的编译器中实现它们吗?
17 c#  legal  standards 


5
为什么Python比Java慢但比PHP快[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我已经多次看过各种基准测试,这些基准测试表明一堆语言如何执行给定任务。 这些基准测试始终表明Python比Java慢,比PHP快,我不知道为什么会这样。 Java,Python和PHP在虚拟机中运行 所有这三种语言都将其程序转换为可在操作系统之上运行的自定义字节码-因此,没有一种语言可在本地运行 Java和Python都可以“编译”(.pyc对于Python),但Python的__main__模块未编译 Python和PHP是动态类型的,而Java是静态类型的-这就是Java速度更快的原因,如果是,请说明这如何影响速度。 而且,即使dynamic-vs-static参数正确,也不能解释为什么PHP比Python慢​​-因为两者都是动态语言。 你可以看到一些基准这里和这里,并在这里

1
是否需要工厂类来创建视图模型?
我的一位同事建议在我们的ASP.NET MVC解决方案中使用工厂类创建视图模型对象。其想法是,它可以帮助我们的应用程序中构建视图模型的方式设计和可维护性。 我想找出是否有人对此有经验。我进行了一些研究,但在这种实践上发现得很少。 当前,我们在控制器级别创建viewmodel对象,例如 public ActionResult Index() { return this.View(this.BuildIndexViewModel()); } 因此this.BuildIndexViewModel()负责创建viewmodel类(显然是:)。但是我们正在研究以下可能性: public ActionResult Index() { return this.View(ViewModelFactory.CreateIndexViewModel()); } 这是一个有趣的想法,但我不是100%相信。我对其他人对此的看法感兴趣。

4
推送新版本时处理数据库架构更改
在繁重的开发期间,数据库架构会快速且连续地发生变化,并且随着我们每周对beta版本的推动而来,架构已发生了如此大的变化,以至于唯一明智的选择是删除所有我可以并且可以从我的开发数据库中复制新版本。显然,一旦启动,这是行不通的,因为破坏生产数据是灾难的根源,所以我想知道那里有什么策略来管理从一个版本/修订到另一个版本的数据库模式更改? 我发现或经历过的一些: 直接从一个数据库到另一个数据库的nuke-and-dump(我现在在做什么) 使用通过脚本或手动运行的SQL语句维护UPDATE.sql文件。 在活动数据库中维护具有相应“ db-schema-version”值的update.php文件 第三种选择似乎是最明智的选择,但是仍然存在构造错误的SQL查询使中间脚本失败的可能性,从而使数据库处于半更新状态,因此需要还原备份。 看来这是没有问题的,但是确实发生了,因为我们作为一个团队,我们使用phpMyAdmin,我什至不能依靠自己记住复制执行的SQL语句以粘贴到update.php文件中。导航到另一页后,我必须手动重新编写SQL语句,或者撤消更改并再次执行。 我想我希望找到一种不会影响我们已建立的开发工作流程的解决方案?

4
编写公司范围内的开发人员手册
我在一家小公司工作。在我被雇用之前,公司的软件开发部门由一个自学成才的工作人员组成。现在,我已经为公司编写软件了几年,我的任务是建立正式的公司范围内的软件开发实践。目前,除了 编写代码,对其进行测试,将其放入.zip文件中,然后将其发送给客户端。TDD和版本控制的加分。 我的老板要我写一份软件开发人员手册,该手册定义了我们用来完成工作的一般流程,协议,工具和指南。换句话说,他想要一本“这就是我们在这里所做的”书,以使新员工更容易熟悉我们的处事方式,并帮助我的老板了解他的奴才在做什么以及他们的工作方式它。 从我的角度来看,我正在奠定基础,并且需要正确完成。您将如何选择此类手册的主题?您可以提供一些示例主题吗? 旁注:如果重要,我们主要是Microsoft .NET商店。我们正在研究诸如XP和Scrum之类的敏捷实践,但我们可能必须对其进行大量修改以使其在我们公司中正常工作。

3
在Java空间中,企业门户策略的替代方案是什么?
对门户空间的幻灭 我看到许多令人困扰的大型企业客户,他们对其企业Portal的经验感到失望,尤其是WebSphere Portal Server(WPS)空间中的客户。数以百万计的投资已经完成,但是通过聚合和集成协作工具实现个性化内容的承诺从未实现。迁移到WPS 7.x是一个巨大的失败,并取代了迁移,客户想知道他们是否应该完全迁移到其他地方。 门户软件:可怕的选择,但是替代品是什么 那里有大量的门户网站仇恨者,有时门户网站解决方案确实过高了,但是当您谈论大型跨国公司时,如何建议他们构建没有门户网站服务器的全球解决方案? 门户网站并非总是像Tomcat或JBoss AS那样有趣,但是在集成多个应用程序,管理内容,更新作为单独war文件部署的单个应用程序,管理直至Portlet级别的安全性,证明某种对用户的个性化设置,以及管理大型企业作为其内部和外部网站一部分的数千页的繁重任务,是否有更好的技术? 收集社区见解和反馈 我一直在努力获取尽可能多的见识。我在TSS上写了一篇有关该问题的文章: 市场上还有哪些门户替代品? 我还将在CodeRanch上恢复一个线程,以查看是否可以从那个英俊的团队中获得任何见识。 更新了线程,要求替代门户软件Stragetty。大约2012年 我也在寻找twitterati(@potemcam)的一些见识。 与其说是交叉发布,还不如说是一种从社区中真正收集到敏锐洞察力的尝试。如果我能得到扎实的回应和经验,我想将它们汇总到TSS的建议文章中。 在Java空间中,什么是企业门户的正确选择? 顺便说一句,我也将从其他站点交叉链接到该问题,以便有相同问题的人能够来回弹跳,并查看社区对此主题的看法。

3
使用TDD和良好的测试覆盖率编写的应用程序的真实示例?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 是否有任何使用测试驱动的开发开发的开源应用程序可以作为良好的单元测试应该如何工作的模型? 我更喜欢在C#和.NET中查看示例。(请注意,我提到的是应用程序,而不仅仅是库。) 我是一个中层程序员,他真的想相信并实践TDD。我在日常工作中使用的应用程序非常复杂-大约一百万行代码-我很想介绍更多的单元测试。我们已经进行了一些单元测试,但是我在TDD上所做的工作以及已经在测试中的代码的工作都没有令人鼓舞。 以我公认的有限经验,TDD似乎以去耦的名义鼓励了很多复杂性。应用程序中难以测试的部分(巧合地往往很关键)被推向外围,进入了可能会或可能永远不会编写的集成测试领域。(我在这里想到了通常的可疑对象,文件系统访问,从数据库中添加对象,异步Web调用等) 被测试的代码往往涉及对象之间的大量协作,也许还涉及一些简单的流逻辑,所有这些都发生在内存中,并且如果不必完全分离所有对象,则可以用更简单,更易理解的方式编写供测试用。 我了解模拟依赖项等的技巧,但是根据我的经验,大量使用模拟会导致非常脆弱的测试。如果我看到许多测试变成红色的第一个直觉是:“好,现在我必须修复所有模拟程序”,那么我的测试就成了阻力,而不是安全网。 我正在努力克服这一精神障碍,在其中,我正在阅读Michael Feathers的书《有效地使用Legacy Code》。我希望它能告诉我一些我所缺少的东西。 我还想研究一些具有良好代码覆盖率的.NET应用程序,例如内容管理系统或CRUD应用程序。Bob叔叔谈论的FitNesse测试框架是我可能要看的东西,但是很高兴看到用我最熟悉的语言编写的东西。 任何建议或智慧的话,将不胜感激。
17 unit-testing  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.