软件工程

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

3
了解环复杂性
我最近遇到了“ 圈复杂度”问题,我想尝试更好地理解它。 计算复杂度的不同因素有哪些实用的编码示例?具体来说,对于的Wikipedia等式M = E − N + 2P,我想更好地理解以下各个术语的含义: E =图的边数 N =图的节点数 P =连接的组件数 我怀疑E或N可能是代码块中决策点的数量(如果是,则是foreach等),但是我不确定是哪个代表另一个。我还猜测P是指函数调用和类实例化,但是鉴于我可以看到,没有一个明确的定义。如果某人可以通过一些清晰的代码示例来阐明更多信息,那将会有所帮助。 作为后续措施,环复杂性是否与100%路径覆盖所需的单元测试数量直接相关?例如,复杂度为4的方法是否表示需要4个单元测试才能覆盖该方法? 最后,正则表达式会影响环复杂度吗?

4
是否应该使用“ make clean”而不是“ make”的通用规则?
我现在正在编写一个多文件程序,并且由于某种原因导致我的程序失败,显然只运行“ make”(因为在大多数情况下人们会直观地认为需要这样做)。我想我可以提供有关该问题的更多详细信息,但重要的是它在使用“ make clean”时确实可以运行。所以我想知道是否有人知道运行“ make clean”而不是“ make”的一般经验法则
11 c++  builds  make 

6
如何使用用户故事定义复杂的业务规则?
用户故事的快速而肮脏的定义: "As a <role>, I want <goal/desire> so that <benefit>" 在这个公认的定义中,几乎没有空间定义业务规则,约束或用户输入。 一个简单的例子只是为了说明: "As a <librarian>, I want to <register new books> so that <students can find their availability online>" 在这个愚蠢的例子中,注册书时在哪里定义所需的字段?应该写在任何地方吗?还是应由产品负责人以口口相传通过所需的业务规则?

4
团队领导的工作可以远程完成吗
我目前是软件开发人员。作为我职业生涯的下一个里程碑,我认为我必须确立自己的团队领导地位,领导一个小型开发团队才能满足可交付成果,部署等方面的需求。居家办公。但是我不确定这方面是否已经讨论/辩论过。我本身还没有担任团队的领导角色,但是我想知道标题所伴随的责任,以及在家中工作时是否可以管理(以及如何管理)。

2
如果您不是美国/英国人,如何发布付费Android应用
创建一个我的应用程序时,我感到非常兴奋,但是事实证明,如果您既不居住在美国也不居住在英国,则实际上无法注册Google Checkout。而且由于Google Checkout是Android Market向您付款的唯一方式,所以我所有的努力似乎都是徒劳的。因此,因为我住在印度,所以我无法出售我的应用程序。 我曾尝试通过各种方式与Google联系,但到目前为止没有任何回应。我也尝试在网上搜索,只是发现无法通过其他任何方式付款。 我很确定这里很多人可能也遇到过同样的问题。您是如何解决的? 我也有一个PayPal帐户和一个AdSense帐户。他们可以提供任何帮助吗? 如果没有任何结果,我应该如何出售我的应用程序?

4
Scala代替Java是一个不错的选择吗?
我们将开始一个新项目,其中将培训所有使用Java(frameworks / ECO system等)的.net开发人员。我们有很多用C#编写的代码,似乎所有这些都将浪费掉,因为我们必须用Java重新编写所有代码。我看到的问题是,大约第一年(可能是两年),我们将无法交付任何东西,因为我们将大部分时间用于重现Java以前但现在的内容。 由于我们的团队分布在世界各地的不同办公室,并且我们有大量的Java开发人员(20至30名)和10位使用.net的开发人员,因此我们希望让所有开发人员都使用相同的语言/平台,以便我们开始重用组件/模块。所以我可以理解管理层的观点。 昨天我遇到了Scala,并想知道将它与当前产品(用C#编写)一起使用是否会更好,然后至少一年后我们将有一个有效的产品。同样在一年中,我们在迁移产品的其他部分时可以在Java世界中使用这些模块。 考虑到我们要实现的目标,Scala是比Java更好的选择吗?
11 java  c#  scala 

3
自动化单元测试创​​建
有哪些策略可用于自动创建单元测试用例?为了能够至少生成一个不错的测试用例框架,您需要在每个类中研究哪些方面? 我意识到综合的自动解决方案不切实际,但是我想至少通过创建一个骨架来加快测试的创建速度。我不是在寻找代码示例,而只是在寻找一些从何处开始的建议或在何处进行过类似的示例,这样我就可以了解他们如何实现它以及可能的实现方式。 我对在PHP中创建单元测试框架的方法特别感兴趣,该方法没有提供其他语言提供的所有工具,例如完整的类型提示。
11 php  unit-testing 

8
可以转售GPL许可的软件吗?
我的研究小组正在开发一些用于研究目的的软件。项目负责人希望该软件是开源的,并且喜欢GPL,但希望确保这些软件不能出售。 我们是否正确阅读GPL?该软件可以自由修改,(重新)分发和出售吗?如果是这样,我明白了为什么很难有效销售该软件;但是,GPL不够严格,无法满足我们的需求。 有什么建议么?
11 licensing  gpl 

4
TDD的“显而易见的实现”是先编码,然后再测试吗?
我和我的朋友是相对较新的TDD,并且对“显而易见的实现”技术存在争议(来自Kent Beck的“ TDD示例”)。我的朋友说这意味着,如果实现很明显,则应继续进行编写- 在对该新行为进行任何测试之前。确实,这本书说: 您如何实现简单的操作?只需实施它们即可。 也: 有时,您确定自己知道如何实现操作。前进。 我认为作者的意思是您应该首先进行测试,然后“实施”它,而不是“ Fake It('Till You Make It')”和其他技术,后者在实施阶段需要更小的步骤。同样在这些引用之后,作者谈论在执行“显而易见的实现”时获得“红条”(失败的测试)-如何在没有测试的情况下获得红条? 但是我从书中找不到任何引述说“显而易见”仍然意味着首先要进行测试。 你怎么看?当实现是“显而易见的”时,我们应该先测试还是之后测试(当然,根据TDD)?您知道一本书或博客文章这么说吗?
11 tdd 

9
您可以采取什么措施来减少实时网站的部署错误数量?
我敢肯定你们中的很多人都遇到了这个问题。网站或Web应用程序正在运行并且正在运行。您想上传下一个版本,但是您还没有弄清所有内容,例如在配置文件中将值设置为false,将另一条记录插入数据库中以及进行许多次要的工作,这些工作有时可以计算20个或更多的参数。 上传新版本后,一切都会中断。现在,解决问题可能只需要20分钟,但是您所能忍受的总体压力以及对公司的财务和商誉损失有时也不会忘记。 有什么方法可以减少由新版本部署的初始配置引起的这些类型的错误? PS:请不要提及检查清单,因为我们已经有了它们。检查清单的问题在于,它们应该始终得到更新,但不会更新。

5
您是否应该重构专注于新功能的项目中未破坏的现有代码?
给定一个旨在为应用程序添加新功能的小型项目,所引入的更改涉及一些现有代码,涉及在某些领域中进行更新。在实施期间,我发现其中一些更新的代码具有重构的候选对象。 这是否是一个适当的重构时间,从而又需要对受影响的那些组件进行回归测试(因此可能引入的范围最初不是项目的一部分)?还是我应该推迟,完成功能,也许有一个单独的项目进行重构(尽管我有点犹豫,因为业务用户可能不会完全赞助一个不添加任何功能的项目,除非他们重视代码的可维护性...)?

11
一个人应该如何处理“免费项目”?一个人应该接受还是不接受?
好的,作为一名软件工程师,我觉得我的技能在其他情况下也很有价值,例如,有一位朋友来找我,要求我建立一个网站进行她的研究,而我却是免费的。起初,我以为这会给我起名字,给我一些工作机会,并在业余时间磨练我的技能……但是我不禁要想到,我在浪费自己的时间来从事无薪工作。 现在,另一个朋友带着同样的故事来到我身边:“你能为我做吗?我会把你的名字放在那儿,你知道的,它将得到无数的意见……Yadda Yadda ...” 您如何处理?即使我们在谈论朋友,您是否也会在业余时间对服务收费?如果是这样,您将如何收取费用,例如作为顾问?

6
如何教一个脚本来发现讽刺?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我当前正在构建一个有趣的脚本,该脚本基本上匹配给定的短语并根据匹配点给出预定义的响应。您可以要求它根据实时供稿检索一些信息,运行任务,讲述轶事或只是与她聊天。 我已经有内置的badwords和/或大写锁定检测功能。该程序有一个女孩的名字,我尝试从逻辑上讲尽可能接近一个女孩(例如:每个人都知道,大多数女孩花700ms来回答一个问题,当然是在开玩笑)。所以这是一个小例子: 客户:您有什么问题? 菊:不要使用与我同色的东西! 客户:####您 菊久:您为什么对我这么刻薄:/ 但是,我真的很想添加讽刺功能。因此,如果您用讽刺的方式写东西,那么她会发现并做出相应的回应。现在这是一个棘手的部分,您如何教脚本,什么是讽刺? 对我来说更具体。今天最常用的讽刺单词是什么?还是如何获得该统计数据?如何使脚本理解给定短语的上下文? 更新 由于这个问题引起了很多炒作,我认为应该多清理一些事情。很清楚,使脚本完全检测讽刺基本上是不可能的。至少在合理的事情上。但是,我确实相信可以发现一些可能的讽刺。 目前为止,我的脚本可以检测到非常有限的讽刺。我预定义了一些常见的讽刺词(但是,仅它们是无用的。)例如:诸如此类,是的,正确而伟大。然后首先匹配简单的东西,例如大写和quoted:THANKS you are so smart或oh you are so "SMART"。 由于脚本的主要功能是执行任务或检索信息,而后记它将询问您的意思。然后我想,添加“谢谢”作为特殊变量。因此yeah thanks还是whatever thanks触发了可能的讽刺,脚本将询问您:“我是否检测到讽刺?” 最好的选择就是说“对不起”,否则它将添加一个警告点,如果达到限制,它将开始无视您。 由于这些非常简单的算法似乎可以实际工作,因此,当然,在进行大量调整和调整之后,这种想法才有希望。但是,有很多人会更聪明地制作出具有相同想法的开源软件。然后,可以将此功能连接到Web上的许多功能。客户服务可能会最大程度地受益,但是,这种软件也可以用于检测“可疑”内容。

5
什么时候应该创建开发分支?
我们正在将我们的项目团队从使用单个Main / Trunk分支转移到应定期合并到Main中的多个Development / Work分支。我们将基于本文和《TFS分支指南》(我们正在使用TFS和Visual Studio 2010)建立新流程。 目前,任何时候都有1至5个人从事该项目。Main必须始终保持稳定,因为我们希望该选项可以在需要时释放。我们没有固定的冲刺-至少现在还没有-现在每1-2周发布一次。 现在,每个人都在修复整个应用程序中的错误。在几周内,我们将开始为该应用程序开发新的大型组件。 我们发现的一个症结是何时应该创建开发分支。我们将根据开发人员的技能水平并行实施多个用户故事。我们已经考虑过为每个开发人员创建一个分支,但这没有任何意义,因为在一件作品上总会需要一些协作。我们不能只靠一个开发分支,因为我们想在其他工作完成时合并到Main。 有人对此有指导吗?


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.