22

自从我大约两年前开始作为专业软件开发人员的第一份工作以来,我已经阅读了许多关于普遍接受的方法(例如 Scrum、XP)、技术(例如 EJB、Spring)、技术(例如 TDD、代码审查)的文章)、软件公司中的工具(错误跟踪、wiki)等。

对于其中许多,我发现我们公司不使用它们,我问自己为什么。我们做错了还是仅仅是我读过的这些文章并没有真正说明现实世界中的情况?这些文章更具学术性吗?

所以,请告诉我你们公司的情况。讲述有关软件开发的一切。这里有一些建议(按照我脑海中的顺序)。至少告诉您是否这样做,或发表简短评论:

  • 测试驱动开发
  • 领域驱动设计
  • 模型驱动设计/架构
  • 你测试吗?
  • 单元测试
  • 集成测试
  • 验收测试
  • 代码审查
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...)
  • 敏捷
  • 结对编程
  • UML
  • 特定领域的语言
  • 需求规范(如何?)
  • 持续集成
  • 代码覆盖工具
  • 贫血域模型
  • 通信(Wiki、邮件、即时消息、邮件列表、其他文档)
  • 努力估计
  • 团队规模
  • 会议
  • 代码指标
  • 静态代码分析
  • 错误跟踪
  • ...

请记住:我想知道你真正在做什么,而不是你想做什么或认为你应该做什么。

4

23 回答 23

26
  • 测试驱动开发- 没门。
  • 领域驱动设计- 什么是设计
  • 模型驱动设计/架构- 什么是设计?我们确实有一个架构团队。除了一个例外(最初级的建筑师),他们无法从纸袋中编写代码。不过,他们肯定擅长用线条画框!并建立蹩脚、毫无价值、过于笼统和完全无用的标准。(旧的 OPC 东西还可以,但在过去 4 年左右的时间里,UA 标准已经“下个月完成”。)
  • 你测试吗?- 是的,我们确实有一个专门的测试团队。每 10-12 名开发人员大约有 1 名测试人员。他们完全被淹没了。问我我们是否测试得很好
  • 单元测试- 完全非正式/由开发人员决定。当我得到的时间表允许时,我会这样做。
  • 集成测试- 是的。鉴于我们开发和支持的产品套件,这是必要的。
  • 验收测试- 是的,仅适用于合同制工作。
  • 代码审查- 总是口头上说,永远要这样做。
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...) - 强烈反对采用新的依赖项。Boost 永远不会被采用,例如,我们通常很幸运能够获得较新版本的 .Net,但通常会落后 2 年左右。
  • 敏捷——不。管理层声称想要“敏捷”,尽管他们没有表现出对它是什么的最简单的理解。我们最近刚刚修改了我们的流程,以便指定更高优先级的任务并以......(等待它)更高的优先级来实现!管理层告诉我,这是我们新的“敏捷”流程。不过,它仍然像瀑布一样闻起来、走路和嘎嘎叫。
  • 结对编程- 没门!付钱让两个人做一个人的工作?接下来,您将建议开发人员应该将时间浪费在设计代码审查等无意义的事情上。狗,猫,一起生活!
  • UML - 不。我们曾经有过一个 UML 工具来帮助我们理解已经发展的遗留代码库。该工具的评估负责人非常喜欢它,它在不到 30 秒的时间内对整个百万行以上的 C++ 代码库进行了逆向工程!在他们被说服购买它并且实际的开发人员尝试使用它之后,我们发现实际上只需要这 30 秒就无法解析 95% 以上的代码库。错误报告太糟糕了,评估员甚至没有发现它失败了。(我在看着你,孩子!)我们只花了一年半的时间就放弃了我们的许可证。看?敏捷!
  • 特定领域的语言——它们可能在某处被使用,虽然不是我自己。
  • 需求规范(如何?) - 产品经理执行一些巫术并发明它们。有时他们甚至可能与客户谈论他们!如果你真的很幸运,他们甚至会理解用例和需求之间的区别。不过,不要指望它。我们真的不做用例。
  • 持续集成- 没办法。当一切都同时破裂时,它会更令人兴奋。
  • 代码覆盖工具- 有人曾经在冰冷的服务器机房中的源存储库服务器上放了一块毯子。这算不算?
  • 贫血领域模型- 说真的,我以前从未听说过这个。
  • 通信(Wiki、邮件、即时消息、邮件列表、其他文档) - 备忘录。Lotus Notes不做“电子邮件”。一堆新奇的垃圾。
  • 努力估计- 不是真的。在我的组织中,估计是目标的代码。. 项目的截止日期锁定在项目的瀑布式开发的 5 个“敏捷”阶段中的第一个阶段。这些到期日称为“大致估计”,但实际上是指“发货日期”。
  • 团队规模- 根据产品运行范围。如果包括经理,我们的团队小至四人,大至十五人。
  • 会议——如果你相对初级并且不从事超过一两个产品的工作,这还不错。我每周只需要参加 2-3 次 1 小时的会议。
  • 代码指标- 否。
  • 静态代码分析- 从理论上讲,.Net b/c FxCop 是内置的,它的使用是我们的标准规定的,但实际上,没有。没有人检查它 b/c 从来没有任何代码审查。只是偶尔的质量审核(又名,书面跟踪/责任审核),以确保我们不会失去今年的认证。
  • 错误跟踪- 是的,但仅针对客户报告的问题。不允许开发人员针对他们正在开发的 b/c 产品提交发现的错误,这些产品不是“团队合作者”。(当我犯了那个错误时,我老板的老板向我解释了这一点。我现在对一个愿意“发现”我可能在其他与支持相关的沟通过程中“不小心”提到的错误的特定客户很友好.)

就大型企业开发而言,还有更糟糕的情况。考虑到我住的地方,以及该地区缺乏高科技工作,我真的很幸运能有一份演出。但这并不意味着我必须喜欢事情的现状。甚至试图影响已建立的企业文化也需要大量的时间和持续的压力。

但如果他们厌倦了我试图改变文化并解雇我的尝试,好吧,我想那天晚上我不会哭着入睡。

于 2008-10-23T13:18:46.260 回答
5

我认为著名的Big Ball of Mud模式描述了很多工作环境,并为您提供了一些关于如何与此类事情作斗争的好主意。


顺便说一句,我意识到我没有直接回答你的问题,但大泥球在令人沮丧的大部分开发情况中占主导地位。你可以询问测试驱动开发和缺陷跟踪以及其他类似的事情,但如果从我所看到的情况来看真相,我会说大泥球几乎是人们工作的事实上的方式——他们应该或不应该。

于 2008-10-23T12:45:01.817 回答
2
  • 测试驱动开发 - 几乎就在那里。
  • 领域驱动设计 - 否
  • 模型驱动设计/架构 - 否
  • 你测试吗?- 是的
  • 单元测试 - 是的
  • 集成测试 - 是
  • 验收测试 - 否
  • 代码审查 - 否
  • 创新/新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...) - ASP.NET MVC?休眠?是的
  • 敏捷——刚刚开始
  • 结对编程 - 否
  • UML - 没有正式的
  • 特定领域的语言 - 否
  • 需求规范(如何?) - 是的。捕获故事需求。
  • 持续集成 - 是的。团队城市
  • 代码覆盖工具 - 是的。无盖
  • 贫血域模型 - 否
  • 通信(Wiki、邮件、IM、邮件列表、其他文档)- IM、电子邮件
  • 努力估计 - 1,2,4,8
  • 团队规模 - 4
  • 会议 - 每日站立
  • 代码指标 - 否
  • 静态代码分析 - 否
  • 错误跟踪 - 现有的自定义作业

我的部门正在进行中。在过去的几个月里,我一直在努力实施持续改进。有些事情已经很难谈论了。然而,当回首往事时,他们已经有所改善。

于 2008-10-23T12:35:44.317 回答
2
  • 测试驱动开发:是
  • 领域驱动设计:是
  • 模型驱动设计/架构:是
  • 你测试吗?是的
  • 单元测试 - 是的
  • 集成测试 - 是的
  • 验收测试 - 是的
  • 代码审查 - 是的
  • 创新技术 - 是的
  • 敏捷——完全敏捷
  • 结对编程 - 是的
  • UML - 有时用于 ddd 白板战斗
  • 特定领域的语言 - 是的
  • 需求规范(如何?) - 以示例和验收测试的形式
  • 持续集成 - 是的 - TeamCity
  • 代码覆盖工具 - 是的 - NCover
  • 贫血域模型 - 不确定
  • 通信(Wiki、邮件、IM、邮件列表、其他文档) - wiki、邮件、msn
  • 团队规模 - 6+ 取决于项目
  • 会议 - 每天早上 9:30 - SCRUM
  • 代码指标 - 不知道
  • 静态代码分析 - 不知道
  • 错误跟踪 - 螳螂

而且最重要的是...

  • 每个人都在 5 点 30 分回家:

但是工资低很多,因为很多人想为这家公司工作。不能拥有一切!

于 2008-12-08T13:52:42.583 回答
2
  • 测试驱动开发:不。充其量,在非常小的部分。我们都在谈论,但不要这样做。
  • 领域驱动设计:不。如果您正在开发技术框架,很难知道“域”是什么。在DDD方面没有太多经验知道如何去做。
  • 模型驱动设计/架构:不。
  • 你测试吗?:是的,但还不够。每个版本(我们尝试每 8 周推出次要版本)总是有超过 2 个服务版本。我们正处于产品开发的第一年,所以我认为这还不错。
  • 单元测试:是的。在大约。30% 的覆盖率。大多数开发人员现在都知道他们应该为自己编写单元测试。每次他们必须修复自己代码中的关键错误时,如果他们事先编写一个简单的测试以首先防止错误,他们就会看到好处。
  • 集成测试:是的,使用 Selenium 和 WebDriver。
  • 性能测试:是的,从现在开始。目标是存档长期性能测量并将它们与发布进行比较。为此使用 JMeter 和专用的性能测试服务器。
  • 验收测试:并非如此,但我们的产品也在内部使用,并且在发布之前我们很快就收到了反馈。我将其视为验收测试。
  • 代码审查:不。有时,其他人会看 30 分钟,但仅此而已。
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST ......):从我的观点来看,这些技术不再“创新”。他们现在几乎是老派了。除了 JSF,它几年前就死了。Spring + Hibernate 在过去的几年里。现在做 Wicket + WS 2 年了。将 Hibernate 替换为 iBatis SqlMaps。
  • 敏捷:不。
  • 结对编程:不。
  • UML:一点点,主要用于部署图。类图过于细化,常常与现实不同步。开发人员做他们认为最好的事情,而不是 UML 图告诉他们做的事情。
  • 特定领域的语言:是的,我们正在使用自制的业务规则技术。这是一种适用于最终用户的可视化 DSL。有点像使用 Visio 来为决策建模。
  • 需求规范(如何?):不。
  • 持续集成:是的。基于 Hudson 和 Maven。单元测试在每个构建上运行。启用更详细报告的其他夜间构建。整个团队都会收到有关构建失败的通知(是的,他们有时会抱怨收到太多邮件,如果某些事情破坏了链并且所有 30 个子模块都出现构建失败,例如当 Maven 存储库无法访问时)
  • 代码覆盖工具:是的。Maven/Cobertura 和声纳。
  • 贫血领域模型:不知道这应该是什么。
  • 通信(Wiki、邮件、IM、邮件列表、其他文档):由专业/非开发人员编写的 Wiki、邮件、IM、每日站立会议、最终用户和开发人员手册。
  • 努力估算:努力做好估算。但是没有reqs,它们只是粗略的估计。不过,对于资源规划来说已经足够了。
  • 团队规模: 12
  • 会议:每日站立,每次小版本发布后每 8 周回顾一次。
  • 代码指标:声纳。希望遵守大多数规则。虽然没有时间重新配置规则以满足我们的需求。
  • 静态代码分析: Sonar。
  • 错误跟踪: JIRA

笔记:

  • Sonar 是一个代码质量服务器。它结合了 PMD、Findbugs、Checkstyle 等工具。
于 2009-11-01T22:15:48.020 回答
1
  • 测试驱动开发 - 否
  • 领域驱动设计 - 否
  • 模型驱动设计/架构 - 否
  • 你测试吗?- 几乎从不
  • 单元测试——几乎从不
  • 集成测试 - 否
  • 验收测试 - 否
  • 代码审查 - 否
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...) - Spring、Hibernate、Wicket
  • 敏捷 - 否
  • 结对编程 - 否
  • UML - 只是草图
  • 特定领域的语言 - 否
  • 需求规范(如何?)——我们得到一个庞大的客户需求规范,我们使用思维导图来提取实际的特征,然后进行估计
  • 持续集成 - 否
  • 代码覆盖工具 - 否
  • 贫血域模型 - 是
  • 通信(Wiki、邮件、IM、邮件列表、其他文档)- 思维导图、邮件
  • 努力估计 - FITA(指在空中,见这里
  • 团队规模 - 2-6
  • 会议 - 每周 2-3 次
  • 代码指标 - 否
  • 静态代码分析 - 否(尝试过 FindBugs 和 Checkstyle)
  • 错误跟踪 - 是的,Bugzilla
于 2008-10-23T12:00:04.530 回答
1

我为你感到难过 :) 这不是一个好的工作环境,因为你需要不断练习实践好的做法才能真正理解和使用它们。

我知道有几家(包括我的)公司能够在您的清单中勾选所有“”的方框。

然而,魔鬼在细节中,即使在一些拥有良好 SDP 政策的公司中,也不是每个项目都遵循它们。

于 2008-10-23T12:19:09.407 回答
1
  • 测试驱动开发——虽然它应该是试图引入的,但我不认为它已经起飞,所以这仍然是一个不,但现在有更多细节。
  • 领域驱动设计 - 否
  • 模型驱动设计/架构 - 否
  • 你测试吗?- 是的,但不全面。我们确实有一些单元测试、一些集成测试和一些 WatiN 测试。
  • 单元测试——我们有一些用于我们的新开发,但旧的没有。
  • 集成测试 - 通常,当它适用时。我的团队作为网络团队似乎还没有经常发生这种情况。
  • 验收测试 - 我们有几个级别。第一个是当一个新功能正在开发中,并且必须得到另一个团队的某个人的初步批准,该团队将输入在它甚至与代码集成之前出现的内容。第二个是在 Sprint 结束时展示功能以获得更多关于看起来不正确或运行良好的反馈。然后在它作为决赛投入生产之前还有第三个关卡,“是的,这并没有破坏我们已经拥有的东西,”之类的事情。
  • 代码审查 - 这些不再完成,但可能是一件好事。
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST ......) - 我们的项目中应用了一些 RESTful 思想,我们正在使用 .Net 框架的一些特性,如 lambda 表达式。
  • 敏捷 - 我们使用 Scrum 并有站立会议、故事板、迭代计划会议(这实际上是针对 sprint 而不是 2 个 sprint 的迭代,因为在每对 sprint 之后,工作会向高管和其他部门展示,而另一个演示适用于架构师和内容输入团队的负责人。)
  • 结对编程——我们确实在大多数不被视为繁重工作的新开发中结对。因此,对于想要在网站的培训部分工作的人来说,一对将完成,而不仅仅是一个开发人员。
  • UML - 不,我们的新机器中删除了 UML 工具
  • 特定领域的语言 - 不,但有一些术语是公司自己对事物的解释,因为内部产品的一些名称与其他人可能用于各种事物的术语发生冲突。
  • 需求规范(如何?) - 这可以从一个大字文档说明需要做什么到要做什么的对话,然后尝试这个,然后再尝试那个。
  • 持续集成 - 我们为我们的 CI 运行 Cruise Control.Net,当我们提交代码更改时使用它。
  • 代码覆盖工具 - 不。
  • 贫血的领域模型 - 某种程度上,这里并没有真正的大领域模型。
  • 通信(Wiki、邮件、即时消息、邮件列表、其他文档) - 按重要性排序:电子邮件、即时消息、电话,然后是访问隔间。每周与应用程序经理举行一次团队会议,并就大项目进行每日站立会议。
  • 工作量估算——这在每个 sprint 中都很常见,尽管有时这是通过发送电子表格让每个人输入他们的估算来完成的,Scrum Master 将所有结果结合起来供我们最终查看。
  • 团队规模 - 5 名开发人员和一名团队负责人、一名担任 Scrum Master 的业务分析师、一名负责监督我们拥有的内容的测试人员以及根据需要弹出的团队之外的其他人,包括实际使用系统的内容作者。
  • 会议 - 实事求是,简短,有效,通常有利于沟通当前的情况。
  • 代码指标 - 我不知道。
  • 静态代码分析 - 不。
  • 缺陷跟踪 - Quality Center 用于跟踪缺陷。 * 源代码控制 - 我们现在正在使用 Subversion。对于任何功能或错误,我们都会创建一个新分支,这样我们就可以独立工作,而不会让我们的提交在我们处理某些事情时破坏构建。但是,我们都共享相同的数据库进行开发,这有时会很有趣。
  • IDE - 在 XP 上使用 .Net 3.5 和 Sitecore 6.1 的 Visual Studio 2008
  • ...

在我来这里的近 2 年里,该团队是我们的第三个团队领导。

CMS 项目是我们都在努力的大项目,尽管有其他人处理的各种支持请求。

在我们拥有 IS 副总裁的这一年发生了很多变化。生产更加锁定,还有更多的工作来完成发布,因为现在有一个检查列表程序和更多可能有用的箍。

于 2008-10-23T15:38:55.883 回答
1
  • 测试驱动开发——如果你的意思是在代码之前编写测试,并不总是
  • 领域驱动设计——不是纯粹的 DDD
  • 模型驱动设计/架构 - 永远不会,但真的永远不会,再次
  • 你测试吗?- 是的,总是
  • 单元测试 - 是的,总是
  • 集成测试 - 这取决于但我们尽量避免它们,因为它们通常很慢
  • 验收测试 - 是的,理想情况下是自动化的
  • 代码审查 - 是的,这包含在完成的定义中
  • 创新技术 (Spring, Hibernate, Wicket, JSF, WS, REST, ...) - 不确定提到的技术是否具有创新性,但对 Spring、Hibernate、WS 是肯定的
  • 敏捷——是的,这在我的 DNA 中
  • 结对编程 - 并非总是如此(如果明确要求,与新团队成员一起讨论新主题)
  • UML - 一点点(即白板上不时出现的类或序列图),仅在有帮助的情况下
  • 特定领域的语言 - 直到现在还没有真正的使用
  • 需求规范(如何?) - 轻量级规范(例如用户故事)
  • 持续集成——当然(根据我们对完成的定义,代码必须是“集成的”)
  • 代码覆盖工具 - 是的 (cobertura),这是在 done 的定义中
  • 贫血领域模型 - 不,我们尽量避免这种情况
  • 交流(Wiki、邮件、IM、邮件列表、其他文档)- 面对面、wiki、IM、邮件、邮件列表(但我们尽量避免使用 word 文档)
  • 工作量估计 - 是的,在积压级别的故事点,在迭代级别的小时数
  • 团队规模 - 7+/-2
  • 会议 - 是的,但只有一个有用且总是有时间限制的(迭代计划、每日会议、演示和回顾)
  • 代码指标 - 是(圈复杂度、代码覆盖率、声纳中收集的编码标准)
  • 静态代码分析 - 是的(findbugs、checkstyle)
  • 错误跟踪 - 是的,当然(但我们会在发现错误后立即修复它们)
于 2009-11-01T19:51:41.663 回答
1

我是一家小型软件公司的两名程序员之一,拥有非常非技术的所有者(“什么是'浏览器'” - 上周被认真问过)。

优点是我可以在大多数这些点上自己选择。

测试驱动开发 - 我们的所有者有一个糟糕的经历或其他东西。以错误的方式提及测试,我发誓她的行为是出于创伤后应激障碍。

领域驱动设计——是的。

模型驱动设计/架构 - 是的。

你测试吗?- 没有。测试落在销售和支持人员以及业主身上。因此,一旦它离开我的开发机器,就没有什么能得到太多测试。

单元测试——如果我被发现这样做我可能会被解雇。它真的是唯一可以让我被解雇的事情。

集成测试 - 请参阅“您进行测试吗?”

验收测试 - 好吧,我们必须在某个时候部署它,对吧?

代码审查 - 没有其他人会理解它。我见过其他人。希望我没有。

创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...) - 是的。但我很生气。我是一个“孩子”,对过去十年没有发明的东西一无所知(尽管我已经 30 岁了,而且我的办公桌上有“数据库系统读物”)。

敏捷 - 我不瀑布。但我也不是很敏捷。

结对编程 - 您不想尝试与在我们公司工作的其他“程序员”交谈。

UML - 不。但我有时会在白板上画出带有标识符的方框。大佬们都这样。好在他们没有更多的技术倾向,否则我可能会看到更多的盒子。

特定领域的语言 - 不。

需求规范(如何?) - 不。

持续集成 - 不。

代码覆盖工具 - 不。

贫血域模型 - 是的。试过了。在我的大多数情况下,我不喜欢它并且不使用它。

通信(Wiki、邮件、即时消息、邮件列表、其他文档)- 尝试过,无法获得同事的支持。我们的 MediaWiki 安装仍然具有默认的徽标图形。

工作量估算——我们必须估算每项工作需要多长时间(以小时为单位)。这就是客户收取的费用。这就是我们期望在该项目上花费的费用。我们甚至在寻找新客户和从头开始开发新应用程序时,以及在我们进行错误修复(是的,我们为此向客户收费)、功能添加等时都会这样做。

团队规模 - 1。让我说这不是一个好的工作方式。能够实时反映其他有能力的程序员的想法要好得多。

会议 - 几个小时值得一周,有时会翻倍,很少少于。我做的一半会议是与客户的,完全是内部的。

代码指标 - 不。

静态代码分析 - 不。

错误跟踪 - 没有我应该的那么多。

于 2009-12-05T04:10:42.997 回答
1

我在澳大利亚布里斯班的一家 Ruby on Rails 咨询公司工作。

  • 测试驱动开发:我们办公室非常非常努力地推动这一点。不测试被视为“非常愚蠢”。您编写代码,如何通过诸如 CI 之类的自动化过程确保它仍然有效?测试。

  • 你测试吗?: 见第一点。

  • 单元测试:一直使用 RSpec。我在 Test::Unit 和 Shoulda 中也很“流利”。

  • 集成测试:再一次,一直,Cucumber。

  • 验收测试:我们用我们的票“交付”他们的验收标准。然后客户必须通过跟随弹跳球来“接受”或“拒绝”他们。验收标准还有一个好处,那就是我们的 Cucumber 功能也被写入其中。

  • 代码审查和配对编程:我们配对。这是代码审查的即时版本。这很棒,因为您可以坐下来观看其他人的工作,他们编写测试,然后您编写代码以使测试通过。如果您生病了,那么其他人就会知道您在做什么,并且可以与其他人配对。

  • 创新技术:因为我们使用 Rails,所以我们非常喜欢 REST。

  • 敏捷:我们使用Pivotal Tracker进行 2 周的迭代。

  • 需求规范(如何?):使用 Pivotal Tracker 中的功能,客户可以指定他们有什么需求,然后我们将它们充实(通常通过与他们交谈)成为验收标准,最终成为现实世界的功能。

  • 持续集成:我们使用我开发的 CI 服务器,称为构造。这是建立在像 Integrity 一样的想法的基础上,但有后台工作和对分支机构的更好支持。现在 Integrity 有了背景建设,仍然有分支支持让我们“领先”。

  • 代码覆盖工具:有时是 RCov。我们并不真正关心代码覆盖率,因为我们在编写之前测试了所有内容。如果它存在,就会有一些东西可以测试它。

  • 沟通(Wiki、邮件、IM、邮件列表、其他文档):我们主要使用电子邮件与客户沟通,但我们也使用 Skype 与他们进行“站立”。我们也为此使用了 Basecamp。我想在我们的下一个项目中使用 Google Wave,就像一个小实验。我认为这真的很有帮助。

  • 团队规模:我们团队有 4 人,通常是 2 对,除非有人生病。

  • 会议:我们早上有一个持续约 15 分钟的“scrum”/“standup”。这样做的想法是你回顾你前一天所做的事情,你遇到的任何问题,你今天要做什么,以及你发现的一些“新的和闪亮的”。这不应该变成项目会议。如果需要,这些是在站立之后的。
  • 错误跟踪:我们再次使用 Pivotal Tracker。客户可以在此处提交错误,然后(理想情况下)编写如何复制它。然后我们编写一个测试以确保这种情况永远不会再次发生(又名:回归测试),它与我们的功能经历相同的工作流程,我们交付并且客户接受。
于 2009-12-05T04:37:54.627 回答
1

我在南非的 Chillisoft.co.za 工作

测试驱动开发:自第一本 Kent Beck 书籍以来,我们一直在使用测试驱动开发实践,它一直在执行。我们使用 NUnit 和 R# 作为测试运行器。

你测试吗?:除了 TDD 之外,我们还进行手动测试(视觉),并在必要时自动进行。用于自动化的技术依赖于 UI 技术。

单元测试:见 TDD。

集成测试:是的,但我们还没有普遍使用。

验收测试:我们为外部客户进行定制软件开发,在他们接受之前您不会获得报酬,因此是的。

代码审查:为每个项目安排双月一次。即使是那些已经配对/对等编程的。

结对编程:我们的大部分编码都是结对进行的,但肯定有一些任务和项目的某些阶段效率较低。我们所做的是在项目启动期间(每个阶段的前几周),我们配对编程。在完成阶段,我们没有。当我们从事开源项目时,我们也有特定的时间(每个开发人员每周 8 小时),这些都是成对编程的。我们所有的机器都设置了多个键盘和鼠标,以促进开发人员之间的顺畅交互。

创新技术:我们在Habanero上做了大量工作,并将这个框架与 DI 容器 Unity 和 RhinoMocks 一起使用。

敏捷:我们使用敏捷哲学已经 8 年了,并且在我们继续沿着这条道路前进的过程中,我们将继续尝试使用工具和哲学。

需求规范(如何?):我们为 MSWord 中的下一次迭代捕获用户故事(用例)。然后,我们在 Jeera 中通过工作量估计等捕获这些摘要,该工作量估计等管理绘制图表等。

持续集成:我们目前使用的是在 SVN 之上工作的 Hudson。

代码覆盖工具:我们为每个项目运行代码覆盖,作为我们夜间构建的一部分。我们已将生成的报告集成到 Hudson 报告中,以便我们可以每天跟踪每个项目的这些报告。

交流(Wiki、邮件、IM、邮件列表、其他文档):显然我们以许多不同的方式进行交流,我们有一个内部 Wiki 等。

团队规模:我们有 15 名软件开发人员。

会议:我们每天早上都有一个“scrum”,持续约 10 分钟。

错误跟踪:我们使用不同的系统进行内部错误跟踪(即在开发和内部测试期间)和外部错误跟踪,即来自客户的错误。内部跟踪(即在内部测试和开发期间)我们使用 redmine。外部跟踪(即我们的客户)我们使用 Mantis。

于 2010-01-27T13:02:40.170 回答
0
  • 测试驱动开发 - 否
  • 领域驱动设计 - 否
  • 模型驱动设计/架构 - 否
  • 你测试吗?- 有时
  • 单元测试——几乎从不
  • 集成测试 - 是
  • 验收测试 - 有时
  • 代码审查 - 只是偶尔
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...) - 否
  • 敏捷 - 否
  • 结对编程 - 否
  • UML - 在我的标记板上,是的。
  • 特定领域的语言 - C++ 是特定领域的,对吧?
  • 需求规范(如何?) - 我认为我们满足他们。
  • 持续集成 - 是
  • 代码覆盖工具 - 否
  • 贫血领域模型 - 什么是领域模型
  • 通信(Wiki、邮件、即时消息、邮件列表、其他文档)- 电子邮件和 Skype。什么是维基?
  • 工作量估算 - 任何给定任务需要 1-2 天
  • 团队规模 - 2 名软件工程师,10 名硬件工程师
  • 会议 - 每周 2 次
  • 代码指标 - 否
  • 静态代码分析 - 否
  • 错误跟踪 - 否
于 2008-10-23T12:24:27.337 回答
0
  • 测试驱动开发 - 是的
  • 领域驱动设计 - 否
  • 模型驱动设计/架构 - 否
  • 你测试吗?- 是的
  • 单元测试 - 是的
  • 集成测试 - 是
  • 验收测试 - 开始
  • 代码审查 - 否
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST ......)——不是吗?
  • 敏捷 - 是的
  • 结对编程 - 几乎所有时间都是
  • UML - 没有比白板上的线条和方框更正式的了。
  • 特定领域的语言 - 一点
  • 需求规范(如何?) - 不,如果可能,我们会尝试获取用户故事
  • 持续集成 - 是
  • 代码覆盖工具 - 否
  • 贫血域模型 -
  • 通信(Wiki、邮件、IM、邮件列表、其他文档)- Wiki、IM、电子邮件、Word Docs
  • 努力估算 - 我们使用 T 恤尺码(S、M、L、XL 等)和按冲刺速度进行冲刺的积分系统的组合。
  • 团队规模 - 6->8
  • 会议 - 每日站立
  • 代码指标 - 否
  • 静态代码分析 - 否
  • 错误跟踪 - Bugzilla / 版本一
于 2008-10-23T12:25:54.167 回答
0
  • 测试驱动开发:偶尔有人可能会为一个组件做它。此外,实现带有一致性测试的公共规范提供了 TDD 的一些优点,而且还有很多优点。
  • 领域驱动设计:否
  • 模型驱动设计/架构:否
  • 你测试吗?:是的
  • 单元测试:一些,虽然不完整。很多组件都是供客户使用的库。“strlen”实现的单元测试和功能测试之间有一条细线。
  • 集成测试:并非如此,单元测试和系统测试之间几乎没有什么区别
  • 验收测试:是的,验收测试的子集用作系统测试
  • 代码审查:没有正式的过程,但一些代码得到审查
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST ......):否
  • 敏捷:没有
  • 结对编程:无
  • UML:没有
  • 特定领域的语言:非常偶尔
  • 需求规范(如何?):有点
  • 持续集成:不,但测试团队自行决定每日构建和恢复导致失败的更改
  • 代码覆盖工具:没有正式要求,已知测试团队使用它们
  • 贫血领域模型:我什至不知道这是什么
  • 通信(Wiki、邮件、IM、邮件列表、其他文档):所有这些都是临时选择的,除了需求和设计文档必须是受源代码控制的 HTML,并且内部接口文档是从标题中的 Doxygen 注释生成的。
  • 努力估计:有点
  • 团队规模:约 20 名程序员,分成 1-4 人的组件团队。几乎没有人专门为他们所属团队的组件工作。
  • 会议:每周一次的全体会议,以交换进度报告并以其他方式分享正在发生的事情。没有其他定期为开发人员安排的会议:根据需要安排讨论。
  • 代码指标:无
  • 静态代码分析:除非你算上 -pedantic ;-)
  • 错误跟踪:Bugzilla,在某种程度上与源代码控制集成
于 2008-10-23T12:30:06.030 回答
0

•Test-Driven-Development - 刚刚开始接管,到目前为止非常满意

•你测试吗?- 当然,每个人都喜欢,谁想让QA嘲笑他们?

•单元测试 - 大约 2 年以来,帮助提高了稳定性,并且每次构建都运行测试

•代码审查 - 到处都是,尤其是任何后期更改

•Agile - 热爱敏捷及其响应性

•结对编程- 只是在几个地方尝试,早期回报很有希望

•持续集成——CruiseControl.NET 的胜利!!!如此巨大的帮助

•代码覆盖工具——总是在每次单元测试运行期间,CC.NET 都会向全世界发布这些信息

•通信(Wiki、邮件、IM、邮件列表、其他文档)- WIKI、IM、Campfire

•团队规模——小,当产品团队变大时,我们会分解成功能团队

• 会议 - 时间短且不经常,更有可能在走廊聚会

•代码度量——只有圈复杂度

•静态代码分析 - 真正尝试这个 更多使用 FxCop 和 VSTS 的自产

•错误跟踪 - Windows 的 TFS 和 Mac 的 Traq

于 2008-10-23T12:31:57.553 回答
0

测试:我做了很多系统测试,以及少量的单元测试。我尝试在有意义的时候使用测试驱动开发,但感觉大多数时候它对我正在做的事情的核心没有意义。

至于其余的,我不确定我是否正确地使用了“特定领域的语言”,但我确实使用了很多自动生成的代码来捕获我工作中的重复内容——我统计了 9 个 Perl 脚本几乎生成了100,000 行代码。

至于其余的,团队规模始终是一个。我大约每年使用一次 PC-Lint 进行静态代码分析。我大量使用 gprof 和 valgrind(您似乎没有提到这类工具)。多年来,我一直在寻找一个合适的错误跟踪系统,但目前仍在使用待办事项列表软件和电子邮件来处理它。

于 2008-10-23T12:32:15.993 回答
0
  • 测试驱动开发:没有。
  • 领域驱动设计:否
  • 模型驱动设计/架构:我们确实从应用程序的模型开始
  • 你测试吗?是的。有时我是唯一一个测试我的东西的人。我讨厌这个。
  • 单元测试 - 没有。这是我技能中缺乏的一个领域,我认为需要优先解决。
  • 集成测试 - 否
  • 验收测试 - 有时。即使有来自 On High 的威胁,也很难让用户接受它。
  • 代码审查 - 没有。我们已经讨论过这样做,但最终没有这样做。我对此感到沮丧。
  • 创新技术 - 没有
  • 敏捷——我们有点敏捷,虽然不是通过预先思考的努力
  • 结对编程 - 否
  • UML - 我们需要的尽可能少,但我们做模型(我们在这里更加刻意敏捷)。
  • 特定领域的语言 - 否
  • 需求规范(如何?) - 我们这样做。我的团队有时主要负责收集需求。我们现在通常由业务分析师协助,但并非总是如此。Veep 有时会向我们提出一些我不知道从哪里来的要求。有时它们是从未做过但很久以前就计划好的旧事情。通常将收集到的需求放入由主要用户以及我的团队、业务分析师和副总裁审查的 Word 文档中。
  • 持续集成 - 不
  • 代码覆盖工具 - 没有
  • 贫血领域模型 - 我不熟悉他的,但不熟悉。
  • 通信(Wiki、邮件、即时消息、邮件列表、其他文档)- 只需电子邮件和面对面。我最近提出了这个主题,因为我们需要做更多的事情,最好是 wiki。它被放在后面的燃烧器上。
  • 努力估计——是的,但我们没有尝试真正追踪它们。这是我缺乏的另一个领域。
  • 团队规模 - 3,包括我自己(主管 <- 团队负责人 <- 我)。
  • 会议——我们每周见面一次,但并非总是如此。老板通常每周至少单独检查几次。较大的小组会议偶尔举行。当然,我们会根据需要安排会议来讨论项目要求。
  • 代码指标 - 不
  • 静态代码分析 - 不
  • 错误跟踪 - 我们记录错误。这几乎就是我们的错误跟踪。

就是这样。我们有一些我觉得可以改进的地方。

更新:

在我发布此消息几周后(08 年 11 月上旬),我们的业务分析师因大规模裁员而失业。从那以后,我在现有应用程序中实现了 ELMAH,最近开发了一个来帮助跟踪错误(我们也登录到数据库),我喜欢它的易用性、特性和捕获异常的能力。 't catch (这在很大程度上是未使用的,但仍然有很好的覆盖范围)。我仍然在自己研究单元测试——我真的需要加快步伐(我也想学习 MVC,但我主要也是在研究这个)。

我们现在正在设计一个新的应用程序,我正在为 6 个模块中的 3 个(团队负责人正在研究另外 3 个)做一个模拟数据库模式(它将获得一些基本图表)。我不期待它,因为这将由我们三个人(每人 2 个模块)使用 IronSpeed Designer (6.1) 一起开发。IronSpeed 会为我做一些我喜欢的事情,但这并不是快速完成这些事情的唯一方法,它还会做一些我不关心的事情。

其他一切都没有改变。

于 2008-10-23T15:47:04.057 回答
0

我的公司已经采用了大多数“流行语”方法。单元测试、测试驱动开发、Scrum、敏捷、持续集成、代码覆盖分析等。我发现随着团队规模随着经济的变化而变化,我们正在从一个产品跳到另一个产品。经过大量裁员后,我们从 Rally Dev/Scrum 转移到了 Jira/Agile。我们正在使用 Selenium 进行自动化测试,但现在正在研究 Tellenium 和 Google 的 WebDriver。

我们发现了什么?通过了为其创建的所有测试(包括负载测试)的站点,在真正分析时可能会非常低效。经过代码性能分析,我们能够将其中一个站点的服务器资源减少 2/3,并且仍然具有更好的性能。它仍然通过了同样的测试。

前端自动化测试无法捕捉到人类会在几秒钟内注意到的定位问题。当然,我们可以花几个小时编写测试来检查定位。但是测试很脆弱,当页面布局发生变化时必须重写,即使只是一点点。测试通常只是表明代码有效,而不是它有多好。

我曾在使用许多不同技术的大公司和小公司工作过。包括简单的“牛仔编码”。当我们不采用计划和测试方法时,会有更多的错误,但我们移动得更快。我们在数小时内推出更改和修复,而不是几天和一周。

Facebook 每周(星期二)都会进行一次“推送”。最新的代码推送中经常有错误(没有足够的测试?),但他们经常在那个星期四或星期五再次推送以解决任何问题。我的猜测是 Facebook 更接近于“牛仔编码”方法并且它一直在为他们工作。

于 2009-06-18T13:44:41.987 回答
0
  • 测试驱动开发——不,是故意的。
  • 领域驱动设计——不,我们仍在研究领域。
  • 模型驱动设计/架构 - 不
  • 你测试吗?- 我们测试构建,并让高级用户进行测试。
  • 单元测试 - 没有正式的(没有 nUnit 等)
  • 集成测试 - 否
  • 验收测试 - 是
  • 代码审查 - 偶尔。
  • 创新技术 - 随机 SharePoint 工具
  • 敏捷 - 是的
  • 结对编程 - 否
  • UML - 从不
  • 特定领域的语言 - 不
  • 需求规范(如何?) - 我们对此保持清醒并进行迭代。我们有一个做一些需求分析的 BA,但通常我们只是邀请客户参加我们的计划和日常会议。没有正式的文档。
  • 持续集成 - 是 (cruisecontrol.net)
  • 代码覆盖工具 - 否(但我们确实使用 Visual Studio 代码分析)
  • 沟通 - 展望
  • 努力估计 - 大致,加倍,然后再加倍。
  • 团队规模 - 2-4
  • 会议 - 每天上午 9 点(scrum!)加上每周计划/审查会议
  • 代码指标 - 不
  • 错误跟踪 - Bugzilla
  • 源代码控制 - SVN
于 2009-06-18T19:38:06.603 回答
0

以下是我的观察:

  • 测试驱动开发:否

  • 领域驱动设计:是

  • 模型驱动设计/架构:是

  • 你测试吗?: 是的

  • 单元测试:是的

  • 集成测试:是

  • 验收测试:是

  • 代码审查:否

  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...):是

  • 敏捷结对编程:否

  • UML:是的

  • 特定领域语言:是

  • 需求规范(如何?) 是

  • 持续集成:是

  • 代码覆盖工具:否

  • 贫血域模型:否(这是什么意思?)

  • 通信(Wiki、Mail、IM、Mailinglists、其他文档):Wiki、Mail、IM、Mailinglists

  • 努力估计:是

  • 团队规模:2-4人

  • 会议:每周一固定会议,隔日浮动会议

  • 代码指标:是

  • 静态代码分析:否

  • 错误跟踪:是的

于 2009-11-01T19:17:11.140 回答
0

你看过 NDepend 吗?该工具分析 C# 和 .NET 代码,并带有许多很酷的功能来浏览分析结果。使用 NDepend,您可以编写代码规则,可以比较代码库的 2 个版本,并且可以利用80 多个代码指标

此外,该工具还具有几个出色的可视化功能,例如:

依赖图: 替代文字

依赖矩阵: 替代文字

通过树形映射实现代码度量可视化: 替代文字

于 2010-10-18T18:09:52.573 回答
-1

很高兴听到 MDA、DDD 和结对编程在任何地方都没有使用:D Martin Fowler 不是上帝,只是有一些奇怪想法的人。

  • 测试驱动开发——如果你想
  • 单元测试 - 是的
  • 代码审查 - kindda
  • 创新技术(Spring、Hibernate、Wicket、JSF、WS、REST,...)——是的,Seam
  • UML - 有点
  • 持续集成 - 是与否
  • 代码覆盖工具 - 是和否
于 2008-10-23T12:49:42.900 回答