软件工程

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

7
这证明goto语句合理吗?
一秒钟前,我遇到了这个问题,我从中提出了一些建议:“ break n”结构有名称吗? 对于人们来说,这是一种不必要的复杂方法,它可以指示程序摆脱双重嵌套的for循环: for (i = 0; i < 10; i++) { bool broken = false; for (j = 10; j > 0; j--) { if (j == i) { broken = true; break; } } if (broken) break; } 我知道教科书喜欢说goto语句是魔鬼,而我本人一点也不喜欢它们,但这是否有例外的理由? 我正在寻找与n嵌套for循环有关的答案。 注意:无论您回答是,否还是介于两者之间,都不欢迎完全封闭的答案。特别是如果答案是否定的,请提供一个合理的正当理由(无论如何,这与Stack Exchange法规相距不远)。

4
亲液程序设计
我最近遇到了Jaron Lanier提出的一个名为“现象学编程”的想法。 这个想法是在计算机程序中使用“表面”接口而不是单点接口,利用统计信息来找出较小的错误,这些错误通常会导致“经典”程序崩溃。 两行描述在这里: 根据Jaron的说法,“当前软件思想(协议遵循性)与(他正在讨论的)思想(模式识别)之间的真正区别与我们正在创建的错误类型有关”,如果“我们不知道, “找不到思考和创建软件的不同方法,无论我们的处理器有多快,我们都不会写出超过一千万行代码的程序。” 稍长的解释在这里。甚至更长的解释在这里。 因此,这个问题回过头来,人们往往会挑出明显的机器人主导的涵义,那么人们将如何实际设计和编写“交互程序”呢?
15 design  program 

1
机器学习如何纳入搜索引擎设计中?
我目前正在建立一个基于Apache Lucene的小型内部搜索引擎。它的目的很简单-根据一些关键字,它将建议一些在公司内部撰写的文章。我使用相当标准的TF-IDF评分作为基本指标,并在此基础上建立了自己的评分机制。所有这些似乎都工作得很好,除了一些极端情况下,排名似乎一团糟。 因此,我打算做的是在搜索结果页面上添加一个小的“相关/不相关”链接,以便用户可以根据对结果是否应该首先包含在内的感知,单击其中的一个。 我的点子 将这些相关/不相关视为标签并创建训练数据。 使用此数据来训练分类器(例如SVM) 将此模型整合到搜索引擎中,即,每个新结果都将通过分类器,并为其分配是否相关的标签。 对我来说,这种方法似乎很直观,但是不确定它是否会在实践中起作用。我有两个具体问题: 我应该提取什么所有功能? 有没有更好的方法将机器学习组件集成到搜索引擎中?我的最终目标是基于业务逻辑和用户反馈来“学习”排名功能。

4
如何识别不稳定的浮点计算?
在数字中,能够识别不稳定的方案并提高其稳定性非常重要。如何识别不稳定的浮点计算? 我正在做一个非常复杂的仿真,其中许多数值方案一起工作,我正在寻找一种方法来识别其薄弱部分。我正在研究涉及微分方程的物理模型。整个过程的鸟瞰图是: (初步步骤)收集物理观测P。 确定模拟的初始参数。这使用了一种优化算法,在该算法中,我们进入参数空间并查找参数C,以使某些误差函数E(F(C),P)降至最小,其中F为参数的某些导出量。 将C插入仿真引擎。这是EDP的Euler方案,因此,在每个时间步上,我们都会计算驱动动态项(每个项都是一个复杂的函数,可能会受到不稳定性的影响),并向Euler方案提供这些动态项以计算下一个州。这持续了数千个时间点。 在模拟结束时,我们计算最终状态S的某些函数Proof(S),并将其与从观察到的数量推导出的一些Require(P)进行比较。这不是结果的正式证明,更多是真实性检查。 此外,我看到了一个复杂的操作塔(在Euler方案中,在Proof中,动态项的计算)。并希望识别并修复“不良零件”。 我推测使用精度降低的浮点数的软件实现会放大数值方案的不稳定性,从而简化了不同实现之间的比较。这是调查这个问题的常用技术吗?是否可以使用虚拟机(例如Bochs)来实现此目的而无需更改程序? 为了适当地处理稳定性问题,有时可以将数值过程的典型输入作为目标,因此可以对其进行调整以使其在该输入上效果很好,而在其他有效但不太可能的输入上效果可能不太好。给定典型输入的样本,就有可能窥探一些中间结果并为它们准备统计数据。同样,这是研究稳定性问题的常用技术吗?虚拟机对此有用吗?

7
在C中惯用的任意块是什么?
块是要执行的语句列表。在C中出现块的示例是在while语句和if语句之后 while( boolean expression) statement OR block if (boolean expression) statement OR block C还允许将一个块嵌套在一个块中。我可以用它重用变量名,假设我真的很喜欢'x' int x = 0; while (x < 10) { { int x = 5; printf("%d",x) } x = x+1; } 将数字5打印十次。我想我会看到需要保持变量名数量少的情况。也许在宏观扩张中。但是,我看不出有任何硬性理由需要此功能。任何人都可以通过在使用该功能的地方提供一些惯用法来帮助我理解此功能的用法。
15 c  syntax 

5
我可以在不破坏封装的情况下使用依赖注入吗?
这是我的解决方案和项目: 书店 (解决方案) BookStore.Coupler (项目) Bootstrapper.cs BookStore.Domain (项目) CreateBookCommandValidator.cs CompositeValidator.cs IValidate.cs IValidator.cs ICommandHandler.cs BookStore.Infrastructure (项目) CreateBookCommandHandler.cs ValidationCommandHandlerDecorator.cs BookStore.Web (项目) Global.asax BookStore.BatchProcesses (项目) Program.cs Bootstrapper.cs: public static class Bootstrapper.cs { // I'm using SimpleInjector as my DI Container public static void Initialize(Container container) { container.RegisterManyForOpenGeneric(typeof(ICommandHandler<>), typeof(CreateBookCommandHandler).Assembly); container.RegisterDecorator(typeof(ICommandHandler<>), typeof(ValidationCommandHandlerDecorator<>)); container.RegisterManyForOpenGeneric(typeof(IValidate<>), AccessibilityOption.PublicTypesOnly, (serviceType, …

3
高阶函数的命名约定?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 高阶函数有命名约定吗?即,返回其他功能的功能。 Javascript中的示例: function onlyDivisibleBy(div) { // <-- higher order function return function (n) { return n % div === 0; } } var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; arr.filter(onlyDivisibleBy(3)); // [0, 3, 6, 9] arr.filter(onlyDivisibleBy(5)); // [0, 5] 我倾向于按照上面的方式编写它:也就是说,在调用点进行了易读性优化(我读了上面的最后几行,即“过滤数组以使项只能被5整除”),但是在定义点从使用它的上下文来看,从其名称了解该函数的作用并不容易。

1
微软为什么要放弃IronRuby和IronPython?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 几年前,微软宣布Ruby和Python即将加入.net。这些项目分别称为IronRuby和IronPython。微软表示,这些项目将建立在.net DLR之上。 WIKIpedia表示,出于所有意图和目的,这些项目已被Microsoft放弃。 微软为什么放弃这些项目?
15 .net  python  ruby  microsoft 

2
没有作为过程实现的延续的例子是什么?
关于SO上的回调和延续之间的区别的有趣讨论引发了这个问题。根据定义,延续是完成计算所需逻辑的抽象表示。在大多数语言中,这表现为一个自变量过程,您可以将需要继续处理的任何值传递给该过程。 用纯函数式语言(其中所有函数都是纯函数并且是头等公民),我认为延续可以完全建模为函数。毕竟,这就是我以前对到目前为止的理解。但是,世界充满了状态(叹息),因此一般定义不需要连续捕获程序状态-它只需要包含意图。 为了帮助我理解,是否可以用功能语言提供一个示例,其中以比功能更抽象的方式表示延续?我知道Scheme可以让您以一流的方式(call / cc)来获取当前的延续,但是即使如此,似乎传递给call / cc的一个参数过程只是以另一种形式给出了当前的延续调用/ cc函数可以将其结果应用到的自变量过程。

5
XSLT和可能的替代品
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我看过XSLT,它可以将一个XML文件转换为另一个XML文件(HTML等)。现在,尽管我看到XSLT(作为一种标准化且使用过的工具)有很多好处,但出于以下几个原因,我还是不愿意 XSLT处理器似乎非常庞大/资源匮乏 XML对于编程来说是一个糟糕的表示法,这就是XSLT的全部含义。 它不想在这里拖拉XSLT,尽管我只是想指出我不喜欢XSLT的原因,以使您了解我对替代产品的期望。 有一些Lisp背景知识,我想知道是否有一些基于Lisp的树结构转换的更好方法。我看到过对DSSSL的引用,可悲的是,大多数关于DSSSL的链接都已失效,因此查看一些说明它的代码已经具有挑战性。是否仍在使用DSSSL?我记得在签出docbook内容时我曾经安装过openjade。 Jeff Atwood的博客文章似乎暗示使用Ruby而不是XSLT。 在非xml编程语言中,是否有任何明智的方式来进行类似于XSLT的XML转换?我愿意接受输入 有用的脚本语言库,可促进XML转换 特别是(但不限于)类似Lisp的转换语言或Ruby等。 到目前为止,我发现了一些东西: 网上有几个地方指出Linq是一种可能的选择。通常,我会进行任何类型的分类,也包括那些拥有最佳XSLT经验的分类。 对于方案http://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/和http://www.okmij.org/ftp/Scheme/xml.html
15 xml  lisp  linq  xslt 

5
实现新的编译器后端时,Scrum是否有意义?
我有一种需要移植到新平台的现有语言。我可能会通过更改现有编译器的后端进行尝试。 重写后端需要大量的工作。在不违反INVEST标准的情况下,我看不到将其分解为明智的故事的方法。 我看不到每个故事如何可以面议-它们都是正常工作的编译器所必需的。这些故事都具有同等优先权,无论我按什么顺序发表它们都无所谓。我需要全部做。 我正在实施的软件中某些部分的优先级比其他部分低,我可以看到我们可以逐步提供该部分。但是,必须具备一个重要的核心。 我计划尝试遵循Scrum,但是我只是在进行议案吗? 有针对此类项目的推荐做法吗?

9
学习C对计算机科学必不可少吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是一个前端开发人员,几乎看不到带有.h或.c扩展名的文件。我知道基本的C语法,我在Unreality中学习了它,但是对这种低级编程从来没有兴趣,因为它对于简单的事情来说设置太多了。 我对学习计算机科学的各个方面都非常感兴趣,但是我想相信,为了理解计算机科学中的大多数概念,我真的不需要了解特定的语言。但是,当我开始阅读有关计算机科学基本概念(例如数据结构和算法设计)的书籍和文章时,似乎必须学习C,因为所有示例甚至课程都使用C(有时甚至是Java)编写。 我的问题是,C是计算机科学必不可少的编程语言,还是我们刚巧用CS编写了所有CS资源?不学习C就能学习计算机科学吗?

6
如何向用户保证网站和密码的安全[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 在可靠的网站上,我总是看到诸如“所有数据都已加密”或“使用128位加密对所有密码进行加密”之类的声明。但是,我从未遇到过诸如“所有密码都经过哈希处理”的声明。 在我的网站上,将SHA-512(最有可能)使用带有随机盐的哈希后,将所有用户密码存储在数据库中。我想添加一个摘要,以确保用户的密码是安全的,因此不会阻止他们使用我的网站,因为它需要密码。我希望用户感到安全,但是我认为并不是每个人都知道哈希是什么。 我的问题:可以提供一条消息,说“所有密码都是加密且安全的”吗,因为我认为普通用户不会知道哈希和加密之间的区别,并且更可能会因为看到了而感到安全舒适词“加密”?还是我应该提供替代消息? 附带一提,我是加密和密码哈希的新手,我想知道在我启动网站时现在是否足够安全。我不想告诉用户它是否安全。任何信息将不胜感激。谢谢。


4
如何安全地实现自动登录
我读过很多,很多,很多关于如何“你可能会存储密码错”的帖子。他们总是指在用户登录的服务器上存储密码。他们基本上会重新编码(确保使用双关语)无处不在的建议,例如确保对密码加盐等。但是,我从未见过有关在客户端上存储密码的最佳实践的文章,这样客户端不必登录每次他们要登录时手动进行;“记住我”功能。 从浏览器到诸如Dropbox之类的程序,许多软件都具有此功能。 我最近确实读过一篇老文章,内容涉及Dropbox如何在您的计算机上存储ID,您可以将其复制/粘贴到另一台计算机上,然后启动Dropbox并以从中获得ID的设备身份登录。没有登录,什么都没有,并且对Dropbox帐户具有完全访问权限。这似乎是一个非常愚蠢的设计,但是我想不出任何更好的方法来做到这一点。 我什至不知道如何避免以纯文本形式存储像cookie之类的东西。如果您对其进行加密,那么将密钥存储在何处? 我认为不引入安全漏洞的唯一方法是删除自动登录功能,并让用户每次想要使用服务时都输入密码,但这是在可用性方面的努力,并且用户不愿意这样做而被宠坏了。 关于安全地本地存储凭据以实现自动登录功能,我可以读到什么?如果原则对于整篇文章来说太简单了,那是什么?有问题的软件不应依赖于并非所有平台都具有的功能(例如某些Linux发行版具有的“钥匙串”)。
15 security  login 

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.