9

在实践中,软件质量对应用程序开发人员真的很重要吗?

我知道这个问题似乎是最愚蠢的问题。但是请看下面我为什么要问这个问题。

我喜欢这样的工程原理、模式,并一直在实施和享受。但现在我意识到,这些原则对 Application Developer 来说真的无关紧要,重要的是“开发时间”、“应用程序按预期工作”和“完成得有点晚,但没关系”。

我现在真的很困惑软件质量和原则对于应用程序开发人员的实际重要性。因此,在我的所有时间指南之后寻找实用的答案无法为软件质量影响组织和[设计代码质量的重要性][2]提供答案

有大量关于软件质量和软件工程的信息可用,但实际上它们是否在应用程序开发中得到实施?

我作为应用程序开发人员提出这个问题,而不是谈论操作系统、语言或编译器开发/创新。


谢谢大家的回复。让我补充更多关于为什么我首先问这个问题。

我也相信并认为在思考这些原则时应该毫不犹豫。我相信这是一门艺术,策略不能因事而变。

但是,如果您看到有关此主题的任何内容或说出此帖子,请注意诸如“取决于什么”之类的短语。现在实际的问题是,除了你自己,谁会直接受益于这样的质量代码,这也是你的圣洁、道德、伦理。

让我们举一个非常常见的例子;一个拥有数百万点击量的网站。最终用户很高兴,因为网站看起来很有吸引力并且他们得到了订单。管理层很高兴,因为开发/增强是在预算范围内完成的,并且所有功能都已实施。PM 很高兴,因为不知何故团队及时交付了它。Tech Lead 很高兴,因为所有异构子系统都在按预期进行通信,并且满足了基础设施限制。一个由 25 名开发人员组成的团队很高兴,因为所有错误都已修复,现在他们的代码正在运行;当然,他们很有信心,因为他们使用了类型安全的语言、出色的 IDE,并且他们会找到任何运行时错误的行号,因为到处都有 try catch 块来坚持它。

在这里,可以说,他们没有遵循任何模式或最佳实践。所以代码不可重用或逻辑层取决于数据格式或......但是对于下一次开发,会有新的预算,新的开发计划和开发人员获得的新任务可能与过去的任务不一致。

那么谁直接受益或必须通过遵循一些原则来强制消除这些,可能是通过在时间和预算方面支付一些额外成本?

那么谁在乎实际地遵循这些呢?每个人都知道它的理论重要性,但在实践中,它是“金手指”还是“很高兴拥有”功能或“必须拥有”的要求?如果它真的很重要,那么正如许多人所说,为什么预算或时间被赋予了最重要的意义,这意味着质量是次要的。

4

18 回答 18

15

你制作高质量的软件有三个原因:

  1. 要想做得好,就必须设计得好,而设计得好的软件编写起来会更快。
  2. 制作精良的软件更易于维护,并且一切都得到维护。
  3. 我们编写制作精良的软件是因为我们在乎,而且因为我们是专业人士。
于 2009-08-06T04:11:20.263 回答
5

应用程序按预期工作并不总是理想的解决方案。内部工作是如何发生的也是需要注意的一点,而不是单独获得所需的输出。

如果不是这样,公司就不会有软件质量保证的翅膀。

软件质量经常被忽视,因为我们经常倾向于进行短期优化

为什么您认为应用程序开发与质量无关?

于 2009-08-06T04:04:14.800 回答
5

第一步是定义质量。

归根结底,重要的是软件给消费者带来了什么价值。所以,就我而言,只有两件事构成了“质量”代码。

  1. 对用户的直接价值。(外部质量)
  2. 为软件增加更多价值是多么容易(包括测试、验证缺乏回归、构建过程等) - 内部质量。

高质量的代码库让您可以快速轻松地进行更改,并确信您不会破坏世界,并且构建/验证更改的成本较低。低质量的代码库很脆弱,很难进行更改,并且需要很长时间来构建/验证。

其他一切都只是朝着这两点之一建立的指导方针。一致且良好的命名可以提高质量,因为它可以清楚地说明代码在做什么,并且理解代码在做什么可以更容易地进行更改。单元测试套件提高了质量,因为它们使更改代码变得更加容易,并且充满信心。诸如关注点分离之类的“良好设计”原则使更改代码变得容易,因为更改往往更加孤立。

所以,是的,这些事情甚至对应用程序开发也很重要。内部质量因素使在给定时间段内向应用程序添加更多功能变得容易 - 但是,这必须与在相同数量的开发人员努力下可以实现的功能相平衡。

于 2009-08-06T05:23:19.430 回答
4

这真的取决于你的听众。如果您是独立开发人员并且直接向最终用户销售您的产品,那么您真的应该关心质量。

如果您正在开发某些公司专门在内部使用的应用程序,您可能不必关心质量,只要您可以忍受出现的问题并且您的用户讨厌您的胆量。

竞争越少,质量对于产品的生存就越不重要。这并没有考虑到高质量的应用程序可以更有用并节省时间和金钱。

于 2009-08-06T04:07:37.883 回答
4

我要添加第二个答案,因为这是我的个人观点,也是我尝试操作的方式,不仅是软件质量,还有我得到报酬的任何事情。

对于所有事情,当有人付钱让我做某事时,我会尽我所能去做。我不会走捷径,我不会吝啬,我不会偷工减料。我将尽我所能,因为人们注意到了这一点,他们欣赏它,他们会回来的。这是我给他们的产品上的我(或我公司)的名字,我不希望我的名字出现在一个狗屎上。可能比其他人花费更多的时间和成本,但没关系。

我想对我正在做的事情感觉良好,如果我知道我的钱太便宜了,我就做不到。不幸的是,并不是每个人都这样操作。法拉利并没有以偷工减料和吝啬出名。人们会注意到你花时间做正确的事,而且通常情况下,如果你偷工减料,你可能不得不回去修复它。您真的想要因制造破坏而获得声誉吗?

有句话说,如果一个客户有一个好的体验,他会告诉 3 个人,如果他有一个不好的体验,他会告诉 10 个。这是事实,而且要修复一个坏名声要困难得多而不是保持一个好的。有时,那些怀疑的阴影永远不会消失,而且很痛苦。

第一次把事情做好总比第一次做好,然后第二次改正,一路上到处找废话的借口要好。

道德,伦理,废话,废话

于 2009-08-06T04:23:15.560 回答
4

编写糟糕的代码真的没有很好的理由。

  • 几乎所有软件的大部分生命周期都用于维护。因此,几乎所有代码都应该是可维护的。

  • 一旦你养成了习惯,构建可维护的代码不会比构建不可维护的代码花费更多的时间。但是你不会通过编写不可维护的代码来养成编写可维护代码的习惯。因此,即使您打算丢弃的代码也应该是可维护的。

  • 导致可维护代码的相同实践也导致可测试代码。如果你没有测试过代码,你就不能诚实地说它按预期工作。因此,即使您打算丢弃的代码也应该进行测试。

  • 编写为可维护和可测试的代码具有更少的错误。即使是未经测试的编写良好、可测试的代码也比未经测试的编写不佳、难以测试的代码出现错误的可能性要小得多。因此,即使你没有测试的代码也应该写得很好。

您需要防范的不是浪费时间让代码变得更好。让糟糕的代码工作是浪费时间。

于 2009-08-06T08:04:25.627 回答
3

这真的取决于应用程序的重要性。编写医疗软件和简单的实用程序应用程序之间存在差异。

我不太清楚你说的质量是什么意思?

源代码的整洁度?

用户界面?

可靠性?

速度?

规模?

这一切都与谁付钱让你做这件事、他们想要什么、他们期望什么(这些可能不同并且非常令人沮丧)、他们何时需要它等有关。

于 2009-08-06T04:10:59.297 回答
3

代码质量由多种因素定义

您基本上是在说只有外部可见的因素或其中的一部分(“按预期工作”)才重要。这些当然是最明显的,但普遍的共识是,如果没有内部代码质量因素,您将无法获得高外部质量。

类比 - 真正伟大的汽车不仅仅依赖于对最终原型的非常严格的测试。设计和开发过程本身必须应用高质量的技术,以实现一辆可以成为优秀汽车的汽车。

于 2009-08-06T08:17:14.633 回答
2

大多数开发人员都能够交付按预期准时或准时完成工作的软件。真正的问题是维护。对于短期项目,维护在交付后开始。对于大型项目,它甚至在达到 v1.0 之前就开始了。良好的实践和质量开发人员创建可维护的代码。

当然,您的项目按预期工作。但是到目前为止,我所看到的每个项目都不所需要的。客户总是意识到某些要求的功能甚至不接近所需的功能,并且不可避免的设计变更请求进来了。或者项目成功并被客户组织中的更多团队采用,并且每次都有一个小的变化要求更好地满足他们的需求。或者原始需求规模是当前部署使用量的十分之一,软件必须容纳更大的用户群。

这些只是根据要求正确实施的项目。而且我们都是人类,都会犯错误,我们会误解需求,有时我们会提供一些与所要求的内容相去甚远的东西。

这一切都归结为这样一个事实,即软件永远不会冻结,只要有赞助商为所需的更改付费。写得不好的黑客软件是不可能改变的。良好实践在开发过程中施加了负担,以确保最终产品可以更改、重构、调试和维护。

于 2009-08-06T04:14:32.160 回答
2

大多数非开发人员会将质量应用程序定义为满足他们期望的应用程序。总体而言,不同的利益相关者会有不同的定义:

  • 用户 - 应用程序快速、易于使用并提供我需要的功能
  • 营销人员 - 它看起来很漂亮,很容易销售
  • 管理——按时完成,满足业务需求
  • 开发人员 - 易于长期维护

许多从事小型项目的开发人员都陷入了对 XYZ 模式的思考,或者对要使用的正确框架/语言自以为是。这些事情对大型企业应用程序或大型性能关键网络应用程序(即 facebook、google 等)很重要,但在更可取的解决方案中,通常不太重要。

最后,企业主/负责人是决定你就业的人,他们对质量的定义是最重要的。

于 2009-08-06T04:17:35.820 回答
1

总的来说,我会同意,特别是如果您不打算大规模销售您的产品。对我来说,我从事的大多数应用程序都是单独出售的,因此应用程序的外观不如功能重要。我发现应用程序很少能胜出,因为它的功能越少越好。此外,当为了让某些东西看起来更好而进行更改时,我的客户会非常恼火,但它要么破坏了功能,要么彻底改变了他们的工作流程,可能使其变得更慢或更乏味。

另一方面,如果一个产品看起来不错,甚至漂亮,我认为用户体验会好很多,他们在使用时会更快乐。我认为他们甚至会喜欢要求更多的修改/添加,因为他们喜欢使用该应用程序并希望更多地使用它。我还认为,有时美与功能是相伴相生的:很多漂亮的应用程序看起来很漂亮,因为它们具有很好的功能,例如 Web 应用程序中的 AJAX。

最后,如果应用程序是面向公众的应用程序,那么我认为应用程序的外观非常重要。(当你在处理内部应用程序时,它就不太重要了。)如果当人们点击谷歌的结果时,一个应用程序第一眼看起来很丑,他们不太可能留下来查看更多内容,并且会去拥有漂亮网站的竞争对手/应用。

还有一件事:我通常会尽量让事情看起来不错。我会花额外的时间,即使它不是让它更令人愉悦的报价。我是一个完美主义者,我想要一些可以展示给其他客户的东西,而不是让我感到羞耻的东西。

于 2009-08-06T04:12:54.097 回答
1

我以挑选那些不尊重他们软件质量的开发人员开始的项目为生。

诚然,我有源源不断的客户这一事实意味着,他们不是一开始就雇佣像我这样的人,而是雇佣了一个工作马虎的人。所以,是的,从某种意义上说,你可以摆脱它并仍然谋生,这并不重要。

但对我来说,这不仅仅是短期的。随着我的技能和经验的增长,我想领导更大的项目,如果我不注意我的软件质量,我就无法做到这一点。

此外,当你这样做时,它看起来更漂亮。

于 2009-08-06T04:20:07.593 回答
1

当然,这很重要。

就像你说的那样,有很多信息可以按照他们应该设计的方式设计应用程序,并按照它们必须编码的方式进行编码。

即使您像您所说的那样是应用程序开发人员,如果您马虎,您的队友和同事也不会愿意与您合作。您的工作质量反映在您的所有团队中。

您可以在不学习原理和架构的情况下花费您的职业发展,但不要期望得到认可或扩展到更高的职位。您永远无法自己设计应用程序的架构,因为您只会知道开发最基本的功能/屏幕。

所以是的......这很重要。去学习吧!

于 2009-08-06T04:20:35.550 回答
1

我不太明白你的问题。但是,如果您质疑始终遵循设计原则的必要性以及这些原则如何影响您的项目质量,这就是我的答案。

这取决于项目的阶段、团队的规模以及预期完成的时间。

有时快速和肮脏很重要。让它尽快工作。在这些情况下使用最好的设计模式是多余的,而且没有必要。能够通过/任何解决方案快速交付的开发人员获胜。头朝天的人输了。

然而,有时(通常)快速而肮脏的方法会惨遭失败。例如,如果项目拥有或将拥有一大群开发人员(超过 4 人)或多个团队,那么从长远来看,遵循可靠/经过验证的开发模式和技术是取得成功的唯一途径。此外,如果有大量复杂的遗留代码,实现新模式通常会失败。最后,预期的时间线对于保持一致至关重要。如果客户期望在一天内完成某种原型,那么就不要花一周时间来组装一个完整的 MVC 框架。

于 2009-08-06T04:22:46.853 回答
1

似乎您在说真正重要的是,正如您所说,“开发时间”、“应用程序按预期工作”和“完成得有点晚,但没关系”。这基本上是开发时间、功能和......开发时间。

你是对的。重要的是您的产品按预期工作并按时发布。有时,即使按预期工作也没有把它拿出来那么重要。

但问题是:如何让产品快速按预期工作?对于一个非常小的代码库,答案可能只是将一些又快又脏的东西扔在一起。在某些情况下,猛禽不会因为使用 goto 而攻击您

但是绝大多数情况下,您正在处理的事情至少要花费几个人周的时间。快速而肮脏的代码有一种失控的方式,让你的产品变成一堆闷烧的段错误、未捕获的异常和竞争条件。它可能会在第二天、第二周或第二个月发生,但它总是在你预料之外,而且当它发生时没有任何好的选择。您可能会在前几个截止日期前的所有功能都没有错误,但最终您的快速而肮脏的代码将停止快速并继续肮脏,这将影响您的开发时间、功能和……开发时间。

或者,您可以花时间编写可正确使用设计模式的可读、惯用、可扩展的代码。起初,这似乎是一种慢得多的做事方式。 那是因为它是,但仅限于现在。三个月后,你的老板会告诉你做出一些改变。也许它正在将您的整个系统从 Solaris 移植到 Linux:因为您一直在编写良好的独立于平台的代码,所以您更改了一些函数调用,并且它可以无错误地编译。或者可能是添加对第三方插件的支持:由于所有渲染都根据 DRY 原则在同一区域处理,因此您只需为一个类添加插件支持。同时,您的快速和肮脏的竞争对手正在考虑对其产品进行完全重写,因为他们的原始代码标准和设计(或缺乏)没有考虑到可移植性或可扩展性。

简而言之,软件质量是您如何满足最后期限并创建正常工作的功能。

于 2009-08-06T07:18:44.020 回答
1

应用程序质量对开发人员来说意义重大,而且大多只对开发人员而言,很少对管理层而言。

当您关注良好的应用程序架构,在设计时考虑到可扩展性和可维护性,您可以在将来尝试调试代码和修复在某个阶段刚刚开始崩溃的事情时节省自己的时间和痛苦。

开发人员试图做出的那些小技巧和快速修复有一个术语——开发人员债务。如果你赚够了它们,在未来的某个时候你会陷入困境——技术破产。这意味着现在几乎不可能添加新功能或更改某些内容而不使其余部分崩溃。现在只需从头开始重写所有内容就更便宜、更简单了。管理层永远不想这样做。作为一名自豪的开发人员,您永远不会想要帮助“实现”这种情况,甚至可能不会参与具有这种开发理念的项目。

于 2009-08-06T08:13:33.097 回答
1

Thank you all for your response. Let me add more on why I asked this question on first place.

I too believe and think that there should be no hesitation while thinking about such principles. I believe that this is kind of art and strategy cannot be switched depending on something.

But if you see anything on this subject or say this post, notice phrase such as "depends on what". Now practical question is who gets directly benefited with such quality code, except yourself which is also your sanctification, Morals, ethics.

Lets take a very common example; a website having millions of hits. End user are happy because site looks attractive and they get placed order. Management is happy because development / enhancement was done within budget and all feature are implemented. PM is happy because somehow team delivered it in time. Tech Lead is happy because all heterogeneous sub systems are communicating as expected and infrastructure constraints are met. A team of 25 Developers are happy because all bugs are fixed and now their code is running; Of course they are confident since they used type safe language, great IDE and they will find line number of any run time errors since try catch block is everywhere to persist it.

Here, lets say, they did not follow any pattern or best practices. So the code is not reusable or logical layers are depend on data format or ... But for next development, there would new budget, new development schedule and developers get new task which might not be inline with past task.

So who gets directly benefited or has to enforce eliminating these by following some principles, may be by paying some extra cost in terms of time and budget?

Then who cares to follow these practically? Everybody knows its theoretical importance but in practice, is it "golden touch" or "nice to have" feature or "must have" requirement? If it does really matter, then as many are saying, why budget or time has been given most importance meaning quality as second importance.

于 2009-08-07T02:29:37.233 回答
0

我总是尝试编写好的代码来满足自己。=)

于 2009-08-07T07:06:27.697 回答