软件工程

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

3
我可以使用哪些论点将BDD概念“出售”给不愿意采用它的团队?
我有点支持“行为驱动开发”方法论(又名BDD)。我已经使用BDD已有两年了,并且在开发DotNet应用程序时采用StoryQ作为我的首选框架。即使我已经进行了多年的单元测试,并且以前已经转向测试优先的方法,但我发现使用BDD框架会带来更多的价值,因为我的测试抓住了相对而言需求的意图。在我的代码中清除英语,并且因为我的测试可以执行多个断言而无需在测试进行到一半时结束测试-这意味着我可以一目了然地查看哪些特定断言通过/失败,而无需进行调试即可证明。 对于我来说,这确实是冰山一角,因为我还注意到,我能够以更有针对性的方式调试测试和实现代码,从而提高了我的生产力,并且我可以如果由于输出进入构建日志而导致问题一直困扰到集成构建,则可以轻松确定发生故障的位置。此外,StoryQ api具有很好的流利语法,易于学习,并且可以以多种方式应用,不需要外部依赖就可以使用它。 因此,有了所有这些好处,您会认为很容易将概念引入团队其他成员。不幸的是,其他团队成员甚至都不愿看StoryStorQ来对其进行正确评估(更不用说应用BDD的想法了),并说服彼此尝试从我们自己的核心测试框架中删除许多StoryQ元素,甚至尽管他们最初支持使用StoryQ,但是即使他们希望删除的代码也不会影响我们测试系统的任何其他部分。这样做将最终导致整体上显着增加我的工作量,并且确实与实际情况背道而驰,因为我通过实践经验深信,这是在特定的工作环境中以“测试优先”的方式工作的更好方法,只会导致更大的工作量。鉴于以下情况,我们的软件质量得到了改善 我们发现更容易坚持使用BDD进行测试。为了进一步澄清,我们大多数的单元测试往往都很脆弱且难以维护,多年来由于应用程序测试不佳而导致的结果是,由于不愿坚持测试驱动的流程,开发人员退回到了旧习惯,在项目结束时进行所有测试(这些人声称自己是敏捷的!)。 因此,问题实际上归结为以下几点: 我可以使用哪些论点来真正说明这个团队使用StoryQ或至少采用BDD方法会更好? 您能否指出我能用来支持我的论点以采用BDD作为我们的标准选择方法的任何轶事证据? 您能想到什么相反的论点,这可能表明我希望鼓励团队采用BDD的想法可能是错误的?是的,只要论据是合理的,我很高兴被证明是错误的。 注意:我并不是在主张我们全面重写测试,而只是为了以后的所有测试工作而以不同的方式开始工作,最好以与客户互动的方式开始。 对于希望进一步了解BDD的人来说,以下链接可能会有用: http://dannorth.net/introducing-bdd/ http://en.wikipedia.org/wiki/Behaviour_driven_development http://behaviour-driven.org/简介 对于那些对更多细节感兴趣的人,我们是一个由4人组成的小型团队,致力于大约5个大型项目。BDD的“试验”最初进行了大约2个月,随后又进行了大约4个月。团队接受了我应该继续以这种方式工作并进行自己的尝试。自试验结束以来,我一直从事BDD工作约两年,而其他人则非常擅长回避问题。我不是在问题上施加“对抗”,而是在寻找一种方法来温和地说服团队摆脱集体的落后,并抽出时间来做好自己的工作。

6
开发人员,测试人员和业务用户是否应该具有一个统一的测试脚本?
在开发中,我通常会拥有自己的测试脚本,这些脚本将记录计划测试的数据,方案和执行步骤。这是我的开发测试计划。将功能部署到Test后,测试人员将使用自己编写的测试脚本对其进行测试。在UAT中,业务用户然后使用他们自己的测试计划进行测试。 回想起来,这似乎提供了更好的覆盖范围,开发测试混合了黑盒和白盒测试,而测试人员和企业用户则专注于黑盒测试。但是另一方面,这带来了仅在每个阶段执行的独特测试用例(即,测试人员认为仅在测试阶段执行的一些用例),并且希望开发人员错过它,这使其成为查找/错误。 。 从一开始就合并测试脚本是否值得?因此,使用一个统一的测试脚本,还是在前期做起来有点困难?

5
处理敏捷项目中的客户/开发人员文化不匹配
敏捷的宗旨之一是... 客户合作而非合同谈判 ...另一个是... 个人与流程和工具之间的互动 但是从我的角度来看,至少在与客户互动方面,存在一个基本问题: 客户的想法与软件工程师的想法不同 是的,这可能有点概括。可以说,在某些业务领域中,这不一定是正确的,尽管这些领域很少而且相去甚远。但是,在许多领域中,典型的客户是: 对日常运营问题感兴趣-短期策略...不一定是策略; 可以理解,仅关注即时解决方案; 实际的思想家,而不是抽象的思想家; 与考虑解决方案将如何支持未来的问题相比,对“完成工作”更感兴趣。 另一方面,理想情况下,实践敏捷的软件工程师是: 大量考虑质量的人; 欣赏一些前期工作可以节省大量精力的个人; 经验丰富的分析思想家。 因此,似乎存在文化差异,倾向于抑制“客户合作”。 解决此问题的最佳方法是什么?
11 agile 

2
作为一家欧洲公司,是否可以为客户编写定制的iPad应用程序?
我们的客户希望我们为他编写一个自定义应用程序,以供他在公司的少数iPad上使用。此应用程序可能仅对这个客户有用(将来可能会再增加两个或三个,但只有在进行其他自定义之后)。 我了解到,如果客户订阅了Apple的批量购买计划,我们便可以为他提供定制的B2B应用程序。但是,这似乎仅限于美国开发商(或客户?或两者兼有?)。 对于欧洲(或更常见的非美国)软件开发人员及其本地客户,有哪些替代方案?

5
可以为单元测试重复代码吗?
我为类分配编写了一些排序算法,并且还编写了一些测试以确保算法正确实现。我的测试只有10行,其中有3行,但是3行之间只有1行更改,因此有很多重复的代码。将此代码重构为另一个可以在每次测试中调用的方法是否更好?然后,我不需要编写另一个测试来测试重构吗?有些变量甚至可以上移到类级别。测试类和方法是否应该遵循与常规类/方法相同的规则? 这是一个例子: [TestMethod] public void MergeSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Millisecond); for(int i = 0; i < a.Length; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b = new int[1000]; a.CopyTo(b, 0); List<int> temp = b.ToList(); temp.Sort(); b = temp.ToArray(); MergeSort merge = new MergeSort(); …


4
具有多种环境的Google Analytics(分析)
我们计划在我们的组织中使用Google Analytics(分析),并且由我负责设置。我想知道如何处理多种环境。我们当然不希望在开发和质量检查过程中收集数据(或可能将数据收集到其他分析帐户),但我们希望站点何时投入生产(显然)。 您如何处理多种环境和Google Analytics(分析)? 您是否为Google Analytics(分析)设置了多个帐户,并根据环境使用其中一个? 如果重要的话,我们正在使用ASP.NET 2.0。

3
使用编码标准可以避免的错误
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我正在寻找统计数据(或估计值)来支持编码标准有助于减少错误的说法。硬数字会很好,尽管我没有发现太多东西。我什至研究过各种开源项目的错误跟踪,但是并不是很成功地找到了我需要的东西。外面有人知道我可以找到这个地方吗?还是你们中的任何人对任何存在漏洞的开源项目做出了贡献,而这些漏洞可以通过更好的编码标准来避免?

2
从头开始创建SCRUM,没有建立基本框架?
我们是一个由5人组成的小组,即将开始一个新项目。这是我们将全力以赴地进行的第一个项目。 我们正在为如何建立项目基础(框架等)而苦苦挣扎。这些任务不是用户直接受益的任务,因此我们很难弄清楚如何为它编写用户故事。 因此,总的来说,当您从头开始没有框架且没有基础库的项目时,如何使用scrum?

9
我如何关注远程自由职业者?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 我一直在雇用来自世界各地的数名开发人员。一切顺利,但我发现其中一些人滥用我的礼貌,最近却忽略了太多。 他们全天都被雇用。但是,我发现一天5个小时后,没有做太多事情。 我正在考虑开发一种软​​件,该软件每1-5分钟对计算机屏幕截图一次,并将其上传到我的系统中。但是,这是极端的。 人们通常如何管理远程开发人员?

4
针对专家团队的Scrum
Scrum最适合具有通才成员的团队,即,至少2人可以完成相同任务的团队。我的主要关注点是为由专家组建的团队找到合适的解决方案以适应混乱(保持什么,删除什么,改进什么)? 假设您有一个由5个开发人员组成的团队(不是真正的,仅作为示例): 一位在C语言方面很强的数学家; 一名数据库开发人员; 一名Web开发人员; 一位UX / GUI开发人员; 一位软件架构师; 在这里,所有人都是专家,没有人可以替代其他人(我不在乎建立这样一个团队的风险,我想专注于Scrum)。因此,在混乱的情况下,这是我的想法: 毫无用处的春季计划:的确,当数学家说某项特定任务的价值为2分时,没人会投票反对他。 无用的团队速度指标:由于每个人都可以为自己的任务分配任意数量的点,因此计算速度是没有意义的; 用每周一次(较长)的Scrum会议代替每天的Scrum会议:由于团队中的每个成员都在按自己的任务进行工作,因此,每天的Scrum会议对于保持“团队合作精神”非常重要。但是,每天的Scrum会议应该持续15分钟左右。显然这不足以了解其他人正在做和将要做的事情。而且,数学家在大多数时候会回答相同的问题:“我仍在做%&Lo(+?$$ ++&)” ...每周的会议会花更多的时间。为了在“初始” Scrum会议和“每周” Scrum会议之间保持相同的会议时间,每个每周的Scrum会议应持续(每周5天,有4个星期的冲刺,其中Sprint会议持续4个小时,每日会议持续15分钟): (4 * 60 + 20 * 15)/ 4 => 还是Scrum仍然可用?也许应该使用另一种敏捷技术?
11 agile  scrum 

9
SOLID与静态方法
这是我经常遇到的一个问题:假设有一个具有Product类的网上商店项目。我想添加一个功能,允许用户对产品发表评论。所以我有一个Review类,它引用一个产品。现在,我需要一种列出所有产品评论的方法。有两种可能性: (一种) public class Product { ... public Collection<Review> getReviews() {...} } (B) public class Review { ... static public Collection<Review> forProduct( Product product ) {...} } 通过查看代码,我将选择(A):它不是静态的,并且不需要参数。但是,我认为(A)违反了单一责任原则(SRP)和开放式封闭原则(OCP),而(B)没有违反: (SRP)当我想更改收集产品评论的方式时,我必须更改产品类。但是更改产品类的原因应该只有一个。那当然不是评论。如果我在产品中打包了与产品有关的所有功能,它将很快崩溃。 (OCP)我必须更改Product类以使用此功能对其进行扩展。我认为这违反了原则的“为变革而封闭”部分。在我收到客户的要求以实施评论之前,我认为产品已完成,然后“关闭”。 更重要的是:遵循SOLID原则,还是拥有更简单的界面? 还是我在这里做错了什么? 结果 哇,谢谢您的所有精彩回答!很难选择一个作为官方答案。 让我总结一下答案中的主要论点: 赞成(A):OCP不是法律,代码的可读性也很重要。 亲(A):实体关系应该是可导航的。两个类都可能知道这种关系。 pro(A)+(B):同时执行并将(A)中的任务委派给(B),这样就不太可能再次更改产品。 pro(C):将finder方法放在非静态的第三类(服务)中。 反对(B):阻止测试中的嘲笑。 我的大学在工作中还提供了一些其他功能: 亲(B):我们的ORM框架可以自动生成(B)的代码。 赞成(A):由于我们ORM框架的技术原因,在某些情况下,有必要独立于发现者去向而更改“封闭”实体。因此,无论如何,我将始终无法坚持使用SOLID。 对比(C):大惊小怪;-) 结论 我在当前项目中同时使用(A)+(B)和委派。但是,在面向服务的环境中,我将选择(C)。

7
对于仅具有不可变引用或标签的语言,对于名称变量有什么好的替代方案?
例如,在函数式语言中,变量是单个赋值,并且一旦赋值它们的值就不可变。因此,它们有两个状态unbound和bound,一旦绑定,就无法更改。 是否有最适合诸如事物之类的数学术语或其他计算机科学术语?一些语义并不意味着方差或可变性。 如果不存在诸如term之类的词,并且如果您正在设计一种具有这种结构的语言,那么您除了使用word 变量之外还会使用什么呢? 我不是真的希望调查的想法,我试图找出是否已经有一个公认的行业(任何行业)项这样的事情。

2
对于服务器端沙盒脚本,我有哪些选择?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我正在建立一个公共网站,用户可以在其中共享数据和脚本以运行某些数据。该脚本在某种沙箱中在服务器端运行,而在此周期中没有其他交互:我的Perl程序从数据库中读取用户制作的脚本,将要处理的数据添加到脚本中(即JSON文档),然后调用解释器,返回响应(JSON文档或纯文本),我使用perl脚本将其保存到数据库。该脚本应该可以自己访问添加到脚本语言中的内置函数,但是仅此而已。 因此,我偶然发现了node.js作为一个JavaScript解释器,大约一个小时前就使用了Google的V8(v8对这种事情有意义吗?)。我也想到了CoffeeScript,因为它看起来不错并且仍然是Javascript。 我认为javascript足够广泛并且更易于“沙盒化”,因为它没有操作系统调用或任何远程不安全的东西(我认为)。 顺便说一句,我在Perl和Php上为前端编写系统。 为了改善这个问题:我之所以选择Javascript,是因为我认为可以使用node.js来实现它既安全又简单,但是实现这种任务还有哪些其他选择呢??蟒蛇?我只是找不到有关如何以适当方式运行沙盒解释器的信息。

4
使用自动设置文本格式是一种好习惯吗?
我正在使用Eclipse,并将以它为例进行讨论,但是我确信在任何其他IDE中都是如此。 Eclipse拥有的CTRL- Shift- F命令,它自动格式化你的代码。使用这种格式是否是一种好习惯?我要问的是一个大型项目,其中可能有许多程序员在处理相同的文件,而所有这些程序都由CSV系统管理。 谢谢!

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.