软件工程

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

9
作为专业开发人员,不编写单元测试是否可以接受?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 只是想知道TDD /自动单元测试的优缺点,并寻找社区对于专业开发人员在不支持单元测试的情况下编写应用程序是否可接受的观点?

4
通过伪编码进行软件设计?
您知道使用基于伪代码的方法设计(即写下)软件的好方法吗? 我是软件设计的新手,并阅读了一些有关UML的信息。到目前为止,我的谦逊的类层次结构还不错,但是,当事情变得复杂之后,我注意到通过“全面了解”,我可以使用其他结构来实现更高的可扩展性。由于Python可以很好地进行原型制作,所以我刚开始写就可以了,但是还不够。 所以我尝试了UML类图,但是它们似乎并没有太大帮助。我在那里解决的问题在脑海中微不足道。但是,一旦我开始对实际方法进行伪编码,我确实注意到了其他设计要求。 因此,如果您想通过伪代码进行设计,您将如何做?我相信对我来说,一种与代码大致一对一的方法效果最好。但是大多数UML软件甚至都没有显示该方法的代码(与GoF中的图片相反)。 有人声称UML仅用于文档和演示,对设计不是那么好吗?我也有这种感觉。我一直以纯粹的UML和一些简单的白板草图为设计软件的方式,直到谷歌搜索我找到Envision APDT为止。 那么,敏捷开发是我应该关注的东西吗?还是他们会随机称其为敏捷-我认为敏捷仅与计划有关?还是我设计不正确(使用UML)-有人通过伪代码进行设计吗?我如何找到一个好的工具?
9 agile  uml  design 

3
Linux中用于多核处理器的无锁IPC
我正在尝试找到一种在Linux上使用多核处理器在C语言下使用无锁IPC编写应用程序的方法。 假设我有进程1和进程2写入FIFO或共享内存。然后,进程3和进程4将从该共享内存或FIFO中读取。 使用无锁算法是否可能? 非常感谢您的指导。

1
如何将Silverlight应用程序移动到HTML5 [关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我一直在使用Silverlight 5应用程序一段时间。我喜欢这项技术,并为获得Silverligt开发认证而着迷。 但是,Html5在这一点上获得了动力,这是对新应用程序的新思考。现在,我正在考虑是用Sl还是html5开发。我已经阅读了数千篇有关该主题的文章,并且不清楚是否有任何方法可以将应用程序迁移到HTML5 SL,知道是否有任何工具可以帮助该过程?

2
CDN如何保护故障转移站点免受DDoS攻击?
我正在设计Java Web应用程序,最终可能会将该应用程序部署到Google App Engine(GAE)。关于GAE的好处是,我真的不必担心要从可怕的DDoS攻击中强化我的应用程序-我只需指定一个“计费上限”,并且如果我的流量达到此上限(DDoS或其他),只会关闭我的应用程序。换句话说,GAE本质上可以扩展到任何数量,直到您根本负担不起让应用程序继续运行。 因此,我正在尝试制定一个应急方案,如果我确实超出了计费上限,并且GAE关闭了我的应用程序,则我的Web应用程序域DNS设置会“故障转移”到另一个非GAE IP地址。一些初步研究表明,某些CDN(例如CloudFlare)可为这种确切情况提供服务。基本上,我只是保留我的DNS设置,并且它们提供了一个API,我可以点击它以自动执行故障转移过程。因此,如果我检测到我的GAE应用程序的帐单上限为99%,则可以点击CloudFlare API,然后CloudFlare将动态更改DNS设置,使其从GAE服务器指向其他IP地址。 我最初的偶然性是将故障转移到托管在其他地方(例如由GoDaddy或Rackspace托管)的Web应用程序的“只读”(仅静态内容)版本。 但是,突然间我突然意识到:如果DDoS攻击针对的是域名,那么如果我从GAE IP地址过渡到我的GoDaddy IP地址会产生什么区别?从本质上讲,故障转移除了允许DDoS攻击者关闭我的备份/ GoDaddy站点外不会做任何其他事情! 换句话说,DDoS攻击者协调了由GAE托管的我的Web应用程序上的攻击,该攻击www.blah-whatever.com确实是IP地址100.2.3.4。它们使我的流量激增到我的帐单上限的98%,并且我的自定义监视器触发了CloudFlare从100.2.3.4到105.2.3.4的故障转移。DDoS攻击者不在乎!他们仍在发动攻击www.blah-whatever.com!DDoS攻击仍在继续! 因此,我想问:像CloudFlare这样的CDN可以提供什么保护,以便当您需要故障转移到另一个DNS时,您不会受到相同的,持续的DDoS攻击的威胁吗?如果存在这样的保护,故障转移站点上是否存在任何技术限制(例如,只读等)?如果没有,那它们有什么好处?提前致谢!

1
DVCS促进了地理分布团队之间的回购复制
我的公司正在探索从Perforce过渡到DVCS的问题,由于软件开发团队分布在德国,中国,美国和墨西哥,有时从一个地方到另一个地方的带宽并不理想,因此我们目前使用许多Perforce代理。 在与IT进行交流时,我们开始寻找一种方法,可以从地理分布的角度使事情顺利进行,以便每个人都能获得最新和最好的信息,而无需确定哪个回购服务器是真相的来源(即透明复制)。 我认为也许我们可以通过预推钩和预拉钩模拟DNS机制。例如,考虑国家A,B和C。从有福的A撤出后,A本身就会从B撤出变化,这反过来又会促使C发生变化。如果B和C有新的变化,它们将落入A。相反,当有推送时,它可以传播到所有受祝福的存储库。 我知道一般来说,您只有一个有名的仓库,但是这可能无法在全球范围内扩展,每个有名的仓库仅适用于来自单个国家/地区的团队。 我的问题是:DVCS回购复制的概念在实践中是否有用?有人成功完成了吗?如果是,正确的方法是什么?

2
从项目初期就使用VCS的规范方法是什么?
背景 git过去,我曾经使用VCS(主要是)来管理许多现有项目,并且效果很好。通常,对于现有项目,我会检入对代码进行的所有更改,以优化或更改整体功能(您知道我的意思是,在适当的步骤中,并不是我更改的每一行)。 问题 我没有太多练习的一件事是创建新项目。我正在启动一个自己的新项目,该项目可能会变得很大,但是我发现在前几天/几小时/几周/整个时期内,还有很多事情要做,并且有很多变化直到产品以其最基本的形式实际起作用为止。 与现有项目一样,我在流程的每个步骤中是否都需要检查?我没有用所做的更改破坏项目,因为它尚无法正常工作。当我离开计算机时,每天结束时我只是一直在使用VCS作为备份。 我最初的几次提交是诸如“适当的基本目录结构”和“已创建数据库表”之类的内容。开始新项目时应如何使用VCS?

2
对于任何大小的数据,blob是否比varchar更有效?
设置数据库时,我想对可能相当长的数据使用最有效的数据类型。目前,我的项目是存储有关该歌曲的歌曲标题和想法。有些标题可能是5个字符或超过100个字符,并且想法可能会持续很长时间。 使用varchar设置为8000还是使用Blob更有效?使用blob与varchar一样,因为有一个固定大小的分配对象,而不管它持有什么大小?还是只是一个指针,它实际上并没有在表上占用太多空间?Blob是否有特定的大小设置,还是可以扩展?
9 mysql 

2
什么是使用替换变量来编辑电子邮件模板的用户友好解决方案?
我正在一个系统上,我们依赖于许多“管理员/经理”通过数据库向用户发送电子邮件。关键功能之一是能够同时向多个人发送电子邮件,并提供与每个人相关的特定信息。另一个关键功能是能够手工制作电子邮件,因为每次都需要对电子邮件进行轻微修改,但是使用基本模板可以节省大量时间。 为此,我们有一个典型的“模板”解决方案,其中有一个看起来像这样的模板: Hello {{recipient.full_name}}, Your application to {{activity.title}} has been accepted. You have requested to participate on dates {{application.dates}}, in role {{application.role}} Blah blah blah 显然,我们遇到的问题是(如我们预期的那样),管理人员没有得到完整的“变量”构想,他们做了诸如覆盖它们的事情,这使得他们一次不能向一个人发送多个电子邮件。它们将不会被替换并且系统已损坏,甚至无法解释,例如“ Hello {{John}}”。 最大的问题是,与往常一样,这并没有降级为“管理员”部分,在该部分中,只有少数高级用户有权编辑自动发送的模板,并且期望他们知道自己在做什么。系统的每个用户都会遇到此问题。 显而易见的解决方案是在显示此模板以供用户编辑之前替换变量,但这在向多个人发送电子邮件时不起作用。 这似乎是一个相当普遍的问题,我们希望有人已经解决了它。 您是否见过任何地方/已创建/可以想到解决此问题的好方法? 更新资料 根据Daniel B的回答,我最终要做的是根据光标位置和代码中{{}}的位置来检测用户当前是“变量内”还是“变量外”。在内部,我在大文本区域下方显示了一小段文字,解释该文字将被替换,并且他们可以根据需要将其完全删除,但无法编辑。 我这样做onClick,onChange,onKeyDown,onKeyUp。对于“键”事件,如果我们位于变量内,则仅当keyCode是一些“导航”键之一时,我才返回TRUE。否则,我返回FALSE,这实际上防止了该变量的版本。 它不是完美的,但是它非常便宜,并且似乎有效。

7
入门级工程师有关内存管理的问题
自从我担任入门级软件开发人员职位以来已经过去了几个月。现在,我已经克服了一些学习上的困难(例如,语言,行话,VB和C#的语法),我开始专注于更深奥的主题,以编写更好的软件。 我向同事提出的一个简单问题是“我专注于错误的事情”。尽管我尊重这位同事,但我不同意这是要重点关注的“错误”。 这是代码(在VB中),然后是问题。 注意:函数GenerateAlert()返回一个整数。 Dim alertID as Integer = GenerateAlert() _errorDictionary.Add(argErrorID, NewErrorInfo(Now(), alertID)) 与... _errorDictionary.Add(argErrorID, New ErrorInfo(Now(), GenerateAlert())) 我最初编写了后者,并用“ Dim alertID”将其重写,以便其他人可能会更容易阅读。但是,这是我的关注和问题: 如果使用Dim AlertID编写此消息,则实际上会占用更多内存。有限但更多,是否应该多次调用此方法,否则会导致问题?.NET将如何处理此对象AlertID。在.NET外部,应该在使用后手动处理对象(在子程序末尾附近)。 我想确保我成为一个知识渊博的程序员,而不仅仅是依靠垃圾回收。我在想这个吗?我是否专注于错误的事情?

4
如果我们采用用户故事,我如何说服我的团队不需要需求规范?
我们计划采用用户故事,以轻量级方式而不是繁重的SRS(软件需求规范)来捕获利益相关者的“意图”。但是,似乎他们虽然了解故事的价值,但仍然希望将故事“转换”为具有所有属性,优先级,输入,输出,来源,目的地等的SRS式语言。 用户故事从一开始就“消除”了对像正式SRS这样的工件的需求,那么拥有SRS的意义何在?如果我们采用用户案例来捕获系统的功能需求,我应该如何说服我的团队(顺便说一句,他们都是非常合格的CS人才-在教育和实践上都如此),SRS将被“消除”。(也可以捕获NFR等,但这不是问题的意图)。 所以这是我的“工作流程”论点:将初始需求捕获为用户故事,然后将其详细阐述为用例(需要以较低级别进行记录,即描述与UI原型/模型的交互,并且是可交付的文章)部署)。因此,从用户故事转到用例,而不是从用户故事转到SRS到用例。 你们目前如何在工作场所中捕获用户故事(如果有的话),以及您如何建议我为存在用户故事的情况下缺少SRS辩护?

9
什么时候使用伪代码代替流程图?
我是一名学习各种编程技术的学生,并且遇到过伪代码和流程图。我知道这两个都是为了在实际编程之前仔细考虑问题,但是我对此有一些疑问。 什么时候使用伪代码计划,什么时候使用流程图?还是在实际编程之前同时做这两项更好 特别是对于JAVA中的小型街机游戏,因为这是我的下一个项目。 我注意到伪代码与实际代码非常相似,而不是流程图。这是否会使伪编码更好,因为您本质上是将伪代码复制/粘贴到程序中(当然,您必须更改伪代码以适合语言。我了解这一部分)。 在编程时同时使用这两种方法是否可行?特别是前面提到的相同游戏。谢谢。

4
在商业产品中使用我自己的GPL许可代码
我正在使用GPL v3许可的Java / Swing开发软件项目。稍后,我想创建一个使用Java / Swing应用程序算法的Android应用程序。此Android应用将是商业产品(在Google Play商店中出售)。 当我在自己开发的商业软件中使用OWN GPL代码时,这是一个问题吗?

2
如何更好地解决动态编程问题
我最近遇到了一个问题:“您得到一个布尔表达式,由字符串'true','false','and','or'和'xor'组成。计算括号的方法数量这样,表达式的结果将为true。例如,可以通过两种方式将“ true and false xor true”括起来,使其结果为true。” 我知道这是一个动态编程问题,因此我尝试自己提出一个解决方案,如下所示。假设我们有一个表达式为ABC .... D,其中“。” 代表任何运算,或xor和大写字母代表true或false。可以说,此大小为K的表达式产生真值的方式为N。当向该表达式添加新的布尔值E时,有两种方法可以使该新表达式成为括号。(((ABC .... D) .E),即 加上ABC .... D的所有可能括号,我们在末尾加上E。2.(ABC(DE)),即 首先评估DE,然后找到此大小为K的表达式产生真值的方式。 假设T [K]是大小为K的表达式产生真值的方式数,则T [k] = val1 + val2 + val3其中val1,val2,val3的计算如下。 1)当E与D分组时 i)它不会改变D的值 ii)反转D的值 在第一种情况下,val1 = T [K] = N。(因为这简化为初始ABC ... D表达式)。在第二种情况下,重新计算dp [K],其中D的值取反,即val1。 2)当E与整个表达式分组时。 // val2包含'true'的数量E将产生的表达式在所有带括号的ABC实例中给出'true'... D i)如果为true.E = true则val2 = N ii)如果为true.E = false,则val2 …

2
非阻塞ORM问题
我问了一个SO 问题,发现我最喜欢的Web框架没有非阻塞ORM。所谓非阻塞,是指具有对异步检索的回调支持的ORM。ORM将提供回调或在接收到数据时执行的回调。 我想创建一个,但是有一些问题使我无法开始开发: 开发ORM可能会遇到什么问题? 支持无阻塞检索是否会大大增加ORM的复杂性? 为什么周围的非阻塞ORM这么少? 更新:看来我必须改善我的问题。我们拥有的解决方案已经允许我们以非阻塞方式接收数据,我相信使用这种解决方案的大多数公司都使用原始SQL。我们希望创建一个更通用的解决方案,以便在以后的项目中重复使用。我们可能遇到什么困难? 更新2:首选语言是python,但是我对原理感兴趣。这个问题实际上是给我的,因为我将看一下已经具有非阻塞ORM的平台。
9 web  orm  server-side 

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.