自从我两年前开始作为专业软件开发人员的第一份工作以来,我读过许多关于普遍接受的方法(例如Scrum,XP),技术(例如EJB,Spring),技术(例如TDD)的文章软件公司的代码评论,工具(bug跟踪,维基)等等。
对于其中许多人,我发现我们公司没有使用它们,我问自己为什么。我们做错了还是仅仅是我读过的这些文章并没有真正说明它在现实世界中是什么样的?这些文章更具学术性吗?
所以,请告诉我你公司的情况。讲述有关软件开发的所有内容。以下是一些建议(按照我的想法顺序)。至少告诉你是否这样做,或者做一个简短的评论:
请记住:我想知道你真正做了什么,而不是你想做什么或认为你应该做什么。
答案 0 :(得分:26)
答案 1 :(得分:5)
我认为着名的 Big Ball of Mud 模式描述了很多工作环境,并为您提供了一些关于如何对抗这种事情的好主意。
顺便说一句,我意识到我并没有直接回答你的问题,但是在一个令人沮丧的大部分发展情况中,大球泥流盛行。您可以询问测试驱动的开发和缺陷跟踪以及其他类似的事情,但如果从我所看到的事实中得知真相,我会说泥球的大球几乎是人们工作的事实上的方式 - 他们应该或不应该。
答案 2 :(得分:2)
注意:
答案 3 :(得分:2)
最重要的是......
然而,由于很多人想为这家公司工作,薪水很低。不能拥有一切!
答案 4 :(得分:2)
我的部门正在进行中。在过去的几个月里,我努力实施持续改进。有些东西很难被谈论。然而,当回顾过去时,它们已经有所改善。
答案 5 :(得分:1)
我为你感到难过:)这不是一个好的工作环境,因为你需要不断练习练习好的练习来真正理解和使用它们。
我知道有几家公司(包括我的公司)能够勾选列表中的所有“好”框。
然而,恶魔是详细的,甚至在一些具有良好SDP政策的公司中并非每个项目都遵循它们。
答案 6 :(得分:1)
我为南非的Chillisoft.co.za工作
测试驱动开发:自从第一本强制执行的Kent Beck Book以来,我们一直在使用测试驱动开发实践。我们使用NUnit和R#作为测试运行者。
你测试吗?:除TDD外,我们还进行手动测试(Visual),并在必要时自动进行测试。用于自动化的技术取决于UI Technologies。
单元测试:参见TDD。
集成测试:是的,但我们还没有普遍使用。
验收测试:我们为您未获得付款的外部客户进行定制软件开发,直到他们接受为止。
代码评论:每个项目预定双月刊。甚至那些已经成对/对等编程的。
配对编程:我们成对编写了大部分编码,但肯定有一些任务和项目的某些阶段效率较低。我们所做的是在项目启动期间(每个阶段的前几周)我们配对程序。在完成阶段,我们没有。当我们处理开源项目时,我们也有特定的时间(每个开发人员每周8小时),这些项目都是成对编程的。我们所有的机器都配有多个键盘和鼠标,以方便开发人员之间的顺畅互动。
创新技术:我们在Habanero上做了大量工作,并使用此框架以及DI容器Unity和RhinoMocks。
敏捷:我们已经使用敏捷哲学8年了,并且在我们继续沿着这条道路继续尝试工具和哲学时。
需求规范(如何?):我们为MSWord中的下一次迭代捕获用户故事(用例)。然后,我们通过努力估计等来捕捉Jeera中的这些摘要,这些估算管理绘制图等。
持续集成:我们目前正在使用在SVN之上运行的Hudson。
代码覆盖率工具:我们为每个项目运行代码覆盖,作为每晚构建的一部分。我们将生成的报告整合到Hudson报告中,以便我们可以每天跟踪每个项目。
沟通(维基,邮件,即时通讯,邮件列表,其他文件):很明显,我们以多种不同的方式进行交流,我们有内部维基等。
团队规模:我们有15位软件开发人员。
会议:我们每天早上都有一个“scrum”,大约持续10分钟。
错误跟踪:我们使用不同的系统进行内部错误跟踪(即在开发和内部测试期间)以及外部错误跟踪,即来自客户的错误。内部跟踪(即在内部测试和开发期间)我们使用redmine。外部跟踪(即我们的客户)我们使用Mantis。
答案 7 :(得分:1)
我在澳大利亚布里斯班的一家Ruby on Rails咨询公司工作。
测试驱动开发:我们的办公室非常非常努力。不测试被视为“令人难以置信的愚蠢”。您编写代码,如何通过CI等自动化流程确保它仍然有效?测试
你测试吗?:见第一点。
单元测试:始终使用RSpec。我在“测试::单位”中也“流利”,而且也是“。”
集成测试:同样,Cucumber。
验收测试:使用我们的门票,我们会使用验收标准“交付”它们。然后客户必须通过跟随弹跳球“接受”或“拒绝”它们。验收标准还有我们的黄瓜功能所写的奖励。
代码评论&& Pair Progamming :我们配对。这是代码审查的即时版本。它真棒,因为你可以坐下来看别人工作,他们编写测试然后你编写代码来让测试通过。如果你生病了,那么另一个人就知道你在做什么,并且可以与其他人配对。
创新技术:因为我们使用Rails,所以我们非常喜欢REST。
敏捷:我们使用Pivotal Tracker进行为期2周的迭代。
需求规范(如何?):使用Pivotal Tracker中的功能,客户可以指定他们的要求,然后我们将它们(通常通过与他们交谈)充实到验收标准中,最终是真实世界的特色。
持续集成:我们使用的是我开发的名为construct的CI服务器。这是建立在像Integrity这样的想法的基础上,但是有后台工作和对分支机构的更好支持。既然Integrity已经建立了背景,那么仍有分支支持使我们“领先”。
代码覆盖率工具:有时候是RCov。我们并没有真正对代码覆盖感到困惑,因为我们在编写它之前测试了所有内容。如果它存在,那就会测试它。
通讯(维基,邮件,即时通讯,邮件列表,其他文件):我们主要使用电子邮件与客户沟通,但我们也使用Skype与他们“站起来”。我们也使用了Basecamp。我想将谷歌Wave用于我们的下一个项目,就像一个小实验。我认为这真的很有帮助。
团队规模:我们团队中有4人,除非有人生病,否则通常会有2人。
答案 8 :(得分:1)
我是一家小型软件公司的两名程序员之一,他们非常非技术所有者(“什么是'浏览器'” - 上周认真询问过。)
优点是我可以在大多数这些方面为自己选择。
测试驱动 - 开发 - 我们的主人经历了不好的经历。以错误的方式提到测试,我发誓她是在创伤后应激障碍中行事。
Domain-Driven-Design - 是的。
模型驱动设计/架构 - 是的。
你测试了吗? - 不。测试属于销售和销售范围。支持员工和业主。因此,一旦它离开我的开发机器,就没有任何测试。单元测试 - 如果我被抓住了,我可能会被解雇。而且它是唯一能让我解雇的东西。
集成测试 - 请参阅“您测试吗?”
验收测试 - 好吧,我们必须在某个时候部署它,对吗?
代码评论 - 没有人会理解它。我见过所有人。希望我没有。
创新技术(Spring,Hibernate,Wicket,JSF,WS,REST,......) - 是的。但是我得到了好消息。我是“孩子”,他不知道过去十年没有发明的任何东西(尽管我30岁并在我的桌面上有“数据库系统读物”)。
敏捷 - 我不是瀑布。但我也不是敏捷的。
结对编程 - 您不想尝试与在我们公司工作的其他“程序员”交谈。
UML - 不。但我有时会在我的白板上绘制带有标识符的方框。这样的老板。好东西,他们不是更倾向于技术,或者我可能会看到更多的盒子。
特定于域的语言 - 不。
要求规格(如何?) - 没有。
持续整合 - 不。
代码覆盖率工具 - 没有。
Aenemic Domain Model - 是的。试了一下。我的大部分情况都不喜欢它,也不使用它。
通讯(维基,邮件,即时通讯,邮件列表,其他文件) - 试过,无法让同事买进。我们的MediaWiki安装仍然具有默认徽标图形。
努力估计 - 我们必须估计每个工作需要多长时间才能完成。这就是客户收费的原因。这就是我们期望在项目上花费的。当我们从头开始查看新客户和开发新应用程序时,以及当我们进行错误修复(是的,我们向客户收费),功能添加等时,我们甚至会这样做。
团队规模 - 1.让我说这不是一个好的工作方式。能够实时反映其他有能力的程序员的想法要好得多。
会议 - 每周几个小时的价值,有时是两倍,而且很少少于此。我做的一半与客户会面,完全是内部的。
代码指标 - 不。
静态代码分析 - 没有。
错误跟踪 - 没有我应该的那么多。
答案 9 :(得分:1)
答案 10 :(得分:1)
在我来这里的近2年里,这支球队已经在我们的第3队领先。
CMS项目是我们正在努力的大项目,尽管有其他人提供的支持请求。
我们有一个IS副总裁,这一年有很多变化。由于现在有一个检查清单程序和更多可能有用的环节,生产更加锁定,并且还有更多的工作要完成发布。
答案 11 :(得分:1)
答案 12 :(得分:0)
就是这样。我们认为我们可以改进这些领域。
更新
在我发布此消息后的几周内(08年11月初),我们失去了业务分析师。我已经在现有的应用程序中实现了ELMAH 和最近开发的应用程序来帮助进行错误跟踪(我们还登录到数据库),我喜欢它的易用性,功能和能够捕获我们没有捕获的异常(这在很大程度上是未使用的,但仍有很好的覆盖范围)。我仍然在自己的单元测试中徘徊 - 我真的需要在那里加快步伐(我也想学习MVC,但我也大部分时间都在考虑)。
我们现在正在设计一个新的应用程序,我正在为6个模块中的3个做一个模拟数据库模式(将获得一些基本的图表)(团队负责人正在研究另外3个模块)。我并不期待它,因为这将由我们3人(每个2个模块)使用IronSpeed Designer(6.1)串联开发。 IronSpeed会为我做一些我喜欢的事情,但这不是快速完成这些事情的唯一方法,它会做一些我不关心的事情。
没有其他任何改变。
答案 13 :(得分:0)
测试:我做了很多系统测试,并且进行了少量的单元测试。我尝试在有意义的时候使用测试驱动开发,但感觉就像大多数时候它对我正在做的事情的核心没有意义。
至于其余部分,我不确定我是否正确地使用“特定于域的语言”,但我确实使用了大量自动生成的代码来捕获我工作中的重复内容 - 我算了9 Perl脚本生成近100,000行代码。
至于其他人,团队规模总是一个。我每年一次使用PC-Lint进行静态代码分析。我非常重视gprof和valgrind(你似乎没有提到过这类工具)。多年来我一直在寻找一个适当的bug跟踪系统,但我现在仍在使用待办事项列表软件和电子邮件处理它。
答案 14 :(得分:0)
我的公司已经采用了大多数“流行语”方法。单元测试,测试驱动开发,Scrum,敏捷,持续集成,代码覆盖率分析等 我发现随着团队规模随经济发展而变化,我们正在从产品跳到产品。经过大量裁员,我们从Rally Dev / Scrum转移到Jira / Agile。 我们正在使用Selenium进行自动化测试,但现在正在查看Tellenium和Google的WebDriver。
我们发现了什么?已经通过为其创建的每个测试(包括负载测试)的站点在真正分析时可能会非常低效。在进行代码性能分析后,我们能够为我们的一个站点减少2/3的服务器资源,并且仍然具有更好的性能。它仍然通过了相同的测试。
前端自动化测试无法捕捉人类在几秒钟内会注意到的定位问题。当然,我们可以花几个小时写测试来检查定位。但是测试很脆弱,并且在页面布局发生变化时必须重写,即使只是一点点。测试通常只是表明代码有效,而不是有多好。
我曾在使用许多不同技术的大小公司工作过。包括简单的“牛仔编码”。当我们没有采用规划和测试方法时,存在更多错误,但我们移动得更快。我们在几小时内推出了更改和修复,而不是几天和几周。
Facebook每周(周二)都会“推”。通常在最新的代码推送中存在错误(测试不够?),但是他们经常在周四或周五再次推动修复任何问题。我的猜测是Facebook更接近“牛仔编码”方法,而且它一直在为他们工作。答案 15 :(得分:0)
答案 16 :(得分:0)
以下是我的观察:
测试驱动开发:否
域驱动设计:是
模型驱动设计/架构:是
你测试吗? :是的
单元测试:是
集成测试:是
验收测试:是
代码评论:否
创新技术(春天, Hibernate,Wicket,JSF,WS,REST, ......):是的
敏捷对编程:否
UML:是
特定于域的语言:是
要求规格(如何?)是
持续整合:是
代码覆盖率工具:否
Aenemic Domain Model:No(这是什么意思?)
沟通(Wiki,Mail,IM, 邮件列表,其他文件):Wiki,Mail,IM,Mailinglists
努力估算:是
团队规模:2-4名成员
会议:每周一举行会议,每隔一天举行一次浮动会议
代码指标:是
静态代码分析:否
错误跟踪:是
答案 17 :(得分:0)
•测试驱动开发 - 刚开始接手,到目前为止非常满意
•你测试吗? - 当然,每个人都这样做,谁想要QA嘲笑他们?
•单元测试 - 大约2年以来,每次构建都有稳定性和测试的帮助
•代码评论 - 此处和那里,尤其是任何后期更改
•敏捷 - 爱敏捷及其代表性
•结对编程 - 只需在几个点上尝试,早期回报有希望
•持续集成 - CruiseControl.NET赢得胜利!如此巨大的帮助
•代码覆盖工具 - 在每次单元测试运行期间,CC.NET都会向全世界发布此信息
•通讯(维基,邮件,即时通讯,邮件列表,其他文件) - WIKI,IM,Campfire
•团队规模 - 小,当产品团队变大时,我们会分解为功能团队
•会议 - 简短但不经常,更有可能走廊走廊
•代码指标 - 仅限于圈复杂度
•静态代码分析 - 真的尝试这个更多使用FxCop和VSTS的本土
•错误跟踪 - Windows的TFS和Mac的Traq
答案 18 :(得分:0)
答案 19 :(得分:0)
答案 20 :(得分:0)
答案 21 :(得分:0)
你看过NDepend了吗?该工具分析C#和.NET代码,并提供了许多很酷的功能来浏览分析结果。使用NDepend,您可以编写代码规则,compare 2 versions of the code base可以使用80 code metrics以上的数据。
此外,该工具还具有几个出色的可视化功能,如:
依赖图:
依赖矩阵:
通过treemaping进行代码度量标准可视化:
答案 22 :(得分:-1)
很高兴听到MDA,DDD和配对编程没有在任何地方使用:D Martin Fowler不是上帝,只是有些奇怪想法的人。