5

软件工程师在又一次充满压力的发布后会遇到什么?好吧,我们在小组中遇到的第一件事就是我们公开发布的错误。作为软件工程师,我们在紧张的发布后遇到的最大问题是意大利面条代码,也称为大泥球

追求完美的时间和金钱很少,也不应该。为了生存,我们必须尽一切努力让我们的软件正常工作并按时推出。事实上,如果一个团队完成了一个有空闲时间的项目,今天的经理们可能会将其视为下次提供更少时间和金钱或更少人员的标志。

您需要在预算范围内按时交付优质软件

成本:架构是一项长期投资。支付账单的人很容易拒绝它,除非有一些切实的直接利益,例如税收减免,或者除非有多余的金钱和时间可用。这种情况很少见。更常见的是,客户需要一些明天可以工作的东西。通常,控制和管理开发过程的人根本不认为架构是一个紧迫的问题。如果程序员知道做工是无形的,而管理者无论如何也不想为此买单,那么一个恶性循环就产生了。

但如果真的是这样,那么每个长期的软件项目最终都会导致一大堆泥巴。

我们知道这并不总是会发生。怎么会?因为关于管理者不将架构视为紧迫问题的说法是错误的。至少现在。IT 领域的管理人员非常清楚可维护性是业务的关键。

业务变得依赖于驱动它的数据。企业已经严重依赖其软件和计算基础设施。有许多关键任务系统必须每周 7 天/每天 24 小时不间断运行。如果这些系统出现故障,则无法检查库存、无法支付员工工资、无法安排飞机航线等等。[..]

因此,寻求使系统远离大泥球的方法是企业的核心。该系统仍然是可维护的。该系统确实有效,并且您作为程序员可以证明它确实有效。您的经理是否问您今天是否完成了编码,她是否问您是否可以在今天完成具有修复 A、B 和 C 的版本,或者她是否问将要发布的软件是否真的可以工作?你证明它有效吗?什么?

现在我的问题:

我们必须通过哪些方式来证明我们的经理和/或利益相关者我们的软件有效?我们的软件单元测试的那些绿灯是否足够好?如果是,那岂不是只能证明我们的大泥球仍在做我们期望它做的事情吗?该软件是可维护的?你如何证明你的设计是正确的?

[稍后添加]

Chris Pebble 他在下面的回答是让我的团队走上正轨。质量保证绝对是我们正在寻找的东西。谢谢克里斯。与利益相关者达成一致的 QA 政策并不是我的团队正在寻找的合乎逻辑的结果。

后续问题是 QA 政策中应该包含哪些内容?

  • 让我的利益相关者可以看到该 buildserver 的运行
  • 让 buildserver 不仅“只是构建”,而且添加作为 QA 策略一部分的测试
  • 我的利益相关者就我们的开发过程达成协议(开发人员相互审查代码是其中的一部分)
  • 更多的..

更多信息:我领导的团队正在构建由其他软件团队使用的 Web 服务。这就是为什么一个破坏性的网络服务会立即花费金钱。当演示层团队的开发人员或实际测试人员无法继续前进时,我们会立即面临压力,必须尽快修复错误,这反过来又会导致快速破解。

[稍后添加]

感谢所有的答案。这确实是关于“信任”。如果利益相关者不信任该软件,我们将无法发布该软件,利益相关者正在使用使用我们 Web 服务的网站自己积极测试我们的软件。当出现问题时,我们测试人员的第一个问题是:是服务层问题还是表现层问题?这指示我制定 QA 政策,以确保我们的软件适合他们正在进行的测试。

因此,我(现在)可以设想与测试人员建立信任的唯一方法是: - 与当前的测试团队交谈,检查他们能够手动执行的测试(从他们的测试脚本和场景中)并确保我们的团队已经将这些测试作为单元测试与我们的网络服务进行了检查。在我们发布演示层团队必须集成的版本之前,这将是一个很好的“签收”起点。需要一些努力来澄清为所有这些场景创建自动测试需要一些时间。但是,确保我们构建的东西确实有效,这绝对是有用的。

4

5 回答 5

5

我是一个为政府客户处理一个大型项目的团队的一员。第一阶段的第一个模块是一场巨大的灾难,团队无人管理,没有质量保证团队,开发人员没有动力去更好地工作。反而是经理不停地喊叫,给不加班的人扣工资!!

客户,呵呵,别问这个,他们真的很生气,但他们留在了我们公司,因为他们知道没有人像我们一样了解业务。

那么解决方案是什么:

  • 首先将管理层与程序员分开,并放置一个友好的团队负责人。
  • 其次,要有一支合格的QA团队。在最初的几周里,bug 有 100 多个。
  • 第三,将 2-3 名开发人员作为支持团队,其职责是不做任何新任务,只是修复错误,直接与 QA 合作。
  • 第四,激励人,有时不是钱或额外的假期,有时一句好话就完美了。小例子,连续工作 3 天,每天工作近 15 小时后,组长给经理做了个便条。两天后,我收到了 CEO 的来信,感谢我的努力,并给了我 2 天的假期。

我们将很快交付系统的第 4 个模块,作为支持团队之一,我可以说它至少 95% 没有错误。与我们的第一个模块相比,这是一个巨大的飞跃。

今天,我们拥有强大的开发团队、合格的 QA 和专家级错误修复人员。

很抱歉说得太长了,但这就是我们的团队(在 4 个月内)如何向经理和客户证明我们是可靠的,只需要合适的环境。

于 2009-11-15T15:08:52.027 回答
4

您无法在测试范围之外证明它,除非有一个防弹规范(从来没有),否则测试永远不会证明任何超出显而易见的东西。

作为一个团队,你可以做的是以负责任的方式进行软件设计,不要屈服于编写糟糕代码以取悦经理的诱惑,要求必要的资源和时间限制,并将整个过程视为手艺一份工作。最优秀的文艺复兴时期雕塑家知道没有人会看到将背面雕像放置在大教堂的角落,但仍然努力确保他们不会卖空自己。

作为一个团队,证明你的软件可靠的唯一方法是建立一个跟踪记录:从一开始就做正确的事情,在实施新功能之前修复错误,永远不要屈服于快速修复,并确保每个人都共享相同的内容对代码的热情和尊重。

于 2009-11-15T13:47:34.730 回答
3

在所有微不足道的情况下,您都无法“证明”您的软件是正确的。

这就是用户验收测试的作用表明已经达到了可接受的有用程度

于 2009-11-15T13:47:20.423 回答
1

我认为这是本末倒置。这无异于一个步兵试图向将军解释什么是战斗演习以及为什么保护你的侧翼很重要。如果管理层无法区分质量代码和一大堆泥巴,那么您最终总是会交付一大堆泥巴。

不幸的是,完全不可能“证明”您的软件没有错误(windows xp 广告总是通过宣布“有史以来最安全的 windows 版本”让我很恼火,这在发布时无法证明)。由管理层来设置和执行 QA 流程,并建立关于可交付产品的实际外观以及最终版本中可接受的错误或意外行为级别的指标。

也就是说,如果您是一个小团队,并且在几乎没有管理层投入的情况下制定自己的 QA 政策,我认为编写一个基本的 QA 流程并让管理层签字是有利的。对于我们的 Web 应用程序,我们目前支持 4 种浏览器——管理层知道这一点——所以当应用程序在一些不起眼的手持浏览器中中断时,每个人都清楚地明白,这不是我们设计应用程序要支持的东西。当管理层决定要开始对 x 进行测试时,它还为雇用额外的开发或测试资源提供了良好的杠杆作用。

于 2009-11-15T14:04:48.970 回答
1

正如比利·乔尔(Billy Joel)曾经说过的那样,“这一直是信任问题。”

您需要了解软件开发对除编写软件的人之外的所有人来说都是“黑魔法”。对于您公司的其他人来说,您的许多举措会提高质量并降低超时和/或预算运行的风险,这对您公司的其他人来说并不明显(实际上,非常违反直觉)。

关键是在开发和业务的其他部分之间建立信任、尊重的关系。你如何建立这种信任?嗯,这是那些敏感的人的问题之一......你需要做一些实验。我经常使用以下工具:

  1. 流程可见性- 确保每个人都知道您在做什么以及事情的进展情况。此外,确保每个人都能看到开发过程中发生的影响和变化。
  2. 指出小胜利- 建立信任,指出事情何时完全按照您的计划进行。尝试找出您必须做出判断的情况,并与您的管理层一起使用“降低风险”一词。
  3. 不要说“我告诉过你”。- 假设您告诉管理层您需要 2 个月的时间来完成某项任务,他们说:“好吧,您只有三周的时间。” 结果不太可能是好的(假设您的估计是准确的)。让管理层意识到问题并记录您为赶上最后期限而必须做的所有事情。当质量被证明很差时,您可以以专业的方式解决您面临(并记录)的问题,而不是指责并说“我告诉过你”。

如果您与您的经理关系良好,您可以建议他们阅读一些专门针对软件开发的书籍,以便他们了解行业最佳实践。

另外,我要向您的老板指出,不允许您担任专业软件开发人员正在损害您的职业生涯。你真的想在一个能让你专业成长的地方工作,而不是在一个让你变成黑客的地方工作。

于 2009-11-16T00:55:04.383 回答