Web应用程序,抑郁症,龙和Westeros中的质量争夺战

最初没有人计划进行Web开发。 即使在一场噩梦中。 一般而言,在大公司和科学的支持下,人们将创建昂贵的IT系统视为精英们可以使用的紧密科学的过程,在这一过程中,重要的是要知道不仅要被大多数算法迅速忘记(我学会了用传单绕过红木和黑木5次的原理-看看早春摆着的臀部完全可以消除收到的信息),也可以消除铁杆的内部。 当然,必须神圣地控制这一神圣行动 (荣耀给戴明大帝),并对其进行测量和测试,并对其进行永久测试。 但是事情马上就错了...

争取表达自由的斗争


很快,软件开发就开始转变为算法性的拼写狂和女神狂,并且为客户带来了很多金钱。 在热爱工程学的自我折磨的基础上,大规模软件产品的创建和周围的开发者社区的情况开始类似于宗教派别的介入。

自由软件的发展迅速响应了这些常识性的扭曲,由于这些原因,我们现在在休闲和商务中拥有了自由,高质量和非常有用的工具,我们非常习惯了这些工具: LinuxMySQLPHP和许多其他工具。

很好,免费软件的价值体现在禁止在华为设备中使用Android的背景下。 现代加密货币的积极发展为火上浇油-加密银行认真开展业务,并从传统机构和技术的脚下拉下了土壤。

朋克开发-脚本编制


这并不是说软件证明是不好的。 它只是创建了很长时间,然后经过了长时间的测试,然后他们收到了已经过时的内容。 但是,该过程正在运行。 演变:在数百万个工时的测试中,错误将消失,蜥蜴和蟑螂将代替恐龙而留下,但是……顽强。 人们花了大量时间解决底层系统任务,而忘记了业务目标。 人们认为,程序员越多,编写系统的速度就越快,这使情况更加恶化。 出于一时的狂热渴望摆脱对代码使用的荣耀,然后实现一整套编程语言的目标,这些编程语言的目标是安全性,开发速度,简单性和简洁性:Python,PHP,Ruby,Lua,JavaScript。 尽管存在理论上的局限性:缺少静态类型,缺少运行时和垃圾收集器,完全懒惰和语义欺诈,但技术仍在积极发展,带来的好处多于危害。

漏水的概念


很快变得很清楚,可以用棍子教书,但是编写解决其他Homo Sapiens代表简单易懂的业务问题的代码要困难得多,您真的想自己做。 为了表达这个简单的想法,他们几乎把圣迪克斯特拉活着烧死了 。 它是关于如何写书(您需要学习和追求目标的强烈愿望=才能)和在Facebook上撰写帖子(您需要一个帐户)。 但是,并不是所有人都了解这种语言,因为学习一种语言的语法要比学习为其编写令人兴奋的东西要容易得多,因此仍在进行激烈的辩论:

  1. 哪种编程语言更好
  2. 哪个操作系统更正确
  3. 在结婚之前,期间或之后写测试
  4. 早上起床什么脚等等

作家和图书馆员,音乐评论家和舞台明星,公司创建者和中层管理人员之间的传统对抗:-)

在任何编程语言中,由真正的工程师掌握的代码都很好,受支持且没有错误。 寻找开发环境,让您可以带动学生度假,女孩,啤酒和PS4,并期望得到回报,这是短视的。

事实证明,生活是如此多样,并且在编程帮助下解决的任务有时是如此原始,以至于某些传统观念根本无法正面发挥作用或产生打破意识的“有洞概念”:

  1. 面向对象的程序设计在游戏和图形系统中效果很好,但是在Python中,由于它限制了自由性,因此强烈不喜欢它。 我记得在PHP中看到Tools类扩展了Utils类
  2. 函数式编程在处理数据流和遏制(Apache Spark)方面做得非常出色,但是Haskell从未成功,因为生活不是数学上的抽象,而是常常分散而笑的拐杖。
  3. PHP,Python,Ruby中的脚本完美地将不同的技术和应用程序组件互连在一起,在Lua中,它们描述了游戏中的脚本,但是在它们上编写高负载的网络服务最好直接击中自己。 Python甚至不考虑添加多线程。

总的来说,事实证明,仅用一种工具(Java Spring)来解决所有问题,效率低下,并且为完成任务选择合适的工具比用显微镜锤击钉子更好。 但是,不幸的是,他们不喜欢学习...

困难是主要敌人


随着系统的发展,越来越清楚的是,有些员工容易学习,实施高级概念,语言,技术,阅读很多东西,而有些人不幸的是,大多数人坦率地说没有时间开始理解高级同事。 有效地编写的模块,首先对于大多数人来说是不可理解的,而对于作者本人来说则是不可理解的,他们开始过着自己的生活并死去,通常以骄傲的孤独为生。 很明显,整个团队应该拥有技术,否则技术弊大于利。

优秀的,大胆的,体面的编程语言,加上陡峭的输入曲线(例如,帅气的Rust) ,可能对项目造成不利影响。

人很美


在同一个方向上开发编程语言和技术已有几十年的历史了:

  1. 高效,快速的代码接近硬件。 一个漏水的,构思错误的编译器替代了开发人员。 C / C ++。
  2. 垃圾收集器,安全的语言。 强大的概念。 相当严格的打字。 但是我们会失去速度并消耗RAM。 有时我们在垃圾收集器下编写。 Java,C#,Swift(是的,我了解RC)。
  3. 语言非常简单,快速入门,快速发展。 但是缺少类型输入(风险)和垃圾收集器。 PHP,Python,Ruby。

然后出现一个好主意:“伙计们,我们从字面上走错了方向; 让我们使编译器更智能吗?” Rust诞生了,它满足了几乎所有要求:

  • 高效快速的代码,零抽象
  • 智能编译器,可在使用内存时保护开发人员免受严重错误的侵害
  • 没有垃圾收集器,卡尔。 不是!

荣耀归于心灵与美丽!



Web开发-这怎么可能发生?


积累了必要的经验和充实的知识后,人类突然意识到,如果您跨过了最简单的文本布局工具,便是一夜之间发明的一种语言可以自动执行网页按钮分配颜色规则,并小心翼翼地遵循所有说明,将其全部拉到互联网上c他们说,使用PHP知道孩子已经出生了-您可以获得最强大的技术协同作用,并开始在此时此刻快速解决业务问题:

  1. 使用HTML / CSS渲染高效的界面。 是的,它们并不总是完美的,但是它们是有效的,尤其是现在,它们非常强大。
  2. 在MySQL中安全存储应用程序数据
  3. 通过linux上网
  4. 使用成熟的架构模式(例如队列)在组件之间传输消息

实际上,没有人知道这场革命是为什么发生的,但事实仍然存在-简单技术的协同作用已经产生了核弹。 让PHP继续感到惊讶的是,它从其他语言中借用了冗长的概念,而让Python从不实现多线程-正是脚本(即简单性,简洁性和高层次的抽象性)使革命性的编程成为可能,并在3中迅速,简单而有效地解决了业务问题。 -5行代码。

协同作用继续-大数据和机器学习


正是由于以上原因,Python才开始从事数据处理和分析任务。 他们坐着数学家,在他们的“可怕”,弱类型的Duck键入工具上写了东西,这真让人难以接受-没有编译器,哇,真是麻烦! 他们编写,编写和...编写了一组最高级别的库:

  1. Numpy-多维数组的高速处理,这在PHP中也不是预期的
  2. Pandas-内存中强大的关系数据处理
  3. MatplotlibSeaborn-伟大的数据可视化工具

我下载了免费的发行版Anaconda ,安装了软件包,就是这样,创建了bigdat,启动了神经元并预测了未来! 免费的。

但是,这些仍然是花朵。 浆果是一个非常流行的标准化交互式开发和交流环境- 木星笔记本 。 第一印象是回归。 好吧,有没有功能强大的IDE? 但是,随之而来的是了解-这是向前迈出的一大步。 Jupiter的作用与Web开发出现时的作用大致相同:快速的结果,快速的通信,业务关键功能和开放标准。

Web Studio和Web程序员-气氛


你问,我为什么要写这一切? 事实是,如果不投入Web开发的气氛,您将看不到创建Web应用程序时如何最好地控制质量。 不爱上这种精神,您将无法在网络上获得成功。 标准和经典方法在这里不起作用,原因如下:

  1. 与C语言世界不同,C ++语言习惯于每年发布1-2个版本,而在这里,它们每周发布一次,即 超高速发展
  2. 与C#和Java世界不同,在C#和Java世界中,习惯于参与面向对象的编程并使用单元测试和集成测试来覆盖所有内容,而通常有如此复杂和非标准的概念和任务,因此10行脚本比10类框架可以更快,更漂亮地解决任务。 遗憾的是,测试布局和脚本会非常困难且昂贵,因此经常需要对眼睛和用户进行测试:-)
  3. 与函数式编程的世界和问题的函数式表达的美不同,这里的解决方法是通过一种字面意义但很好的方式来表达的,这是有道理的-糟糕的过程脚本的经济可行性,您可以扔掉并编写一个新的(约10次)
  4. 与传统软件不同,这里的想法可以通过代码快速实施,检查,丢弃和更好地选择。 90%的代码-死亡,10%-使客户满意。 最好在当前和现在拥有可靠的10条工作线,而不是在函数和类中某个地方的1000条学术行具有不确定的漏洞和自动测试覆盖范围。

但主要的是人。 在Web开发人员中,他们很特别。 他们并不是不喜欢编写代码,而是讨厌它。 Web开发人员钦佩的目标是解决问题的速度。 如果在2行PHP代码和20个类的框架之间进行选择,那么选择将是一种具有简洁性的更性解决方案。 这就是为什么,如果您可以选择编写或不编写代码,那么专业的网络程序员会选择第一个并与女孩在一起,例如在图书馆的阅览室里花更多的时间学习古老的印度史诗 ,而新手将学习第二个,直到他意识到更多的代码为止。它可能包含的错误越多,并且在对错误代码进行自动测试时,错误甚至会更多,因此,最好写下5行并用眼睛快速检查它们,而不是创建质量外观并修复数周的任何错误:-)

如何管理网络项目的质量


到此时,您很可能已经了解到Web开发是一个特殊的,新的且非常困难的编程领域,其中充满了与众不同的同事工程师,他们讨厌代码,并渴望借助现成的简单工具尽快解决问题。 。 这就是为什么Web开发人员经常成长为喜欢赚取比工作更多的系统管理员的原因。 是的,另一个协会,一个Web开发人员更像是一个拿着枪的书呆子,而不是一个拿着剑,彩带和指节的武士8蛋。 下注,没有规则,谁将赢得街头大战?

但这只是成功的一半。 意识到使用Web开发可以快速解决复杂问题的商业客户:建立具有CRM连接的动态在线商店,并在1周内内置搜索产品目录,如果您重现了一半的功能,则可以自己编写优质的书籍Web开发,Deming可能会从中不断地翻身而来。 以下是他们的观点,这些观点动摇了传统质量检查的基础:

  1. 竞争对手的旁路速度比质量更重要。 如果Web项目确实可以启动并滚动(每10个或少于10个),则可以“正确地”重写它,但奇怪的是,没有人重写它们并且它们可以生存并且通常成功且舒适地存在了很多年。
  2. 该项目是为行动而完成的,可以凭良知遗忘一次性和内部质量。 某人稍后再加入代码的可能性等于0.00001%(我参与了此类项目;在除夕之夜,它们可以再次变得流行起来)。
  3. 客户不想编写自动测试,从而使开发成本增加2倍,并且将类的体系结构充实为抽象和突出概念集。 但是有时候,对于图书馆并且很可能会重用,他们表示同意。
  4. 客户准备好帮助测试Web系统,通常会意识到(不幸的是,有例外),在这样的开发阶段(整个交钥匙项目为4个月),并且在合同级别与自测试和代码膨胀进行斗争时,不可能达到所有系统组件相同的质量。
  5. TK是不必要的,因为它一直在变化,变得过时,并且您需要保持文档部门对其进行更新。 即时创建更容易,查看结果并转动敏捷轮。
  6. 傻瓜喜欢工作

理解了这一点,质量专家要么飞走了,不再被正在发生的事情吓倒了,要么接受了Web开发的价值,渗透了这些价值并构建了类似的东西:

  1. 设计,开发和测试中使用的方法不应出于信仰而虔诚。 成为托马斯很重要。 因此,您需要编写自动测试,然后再编写。 谁需要它,嗯? 经济可行性证明。 如果您可以用眼睛快速检查所有内容,为什么还要对名片站点进行自动测试? 如果模拟对象写入正在使用的框架,为什么会生成大量可能包含错误并且需要随附的代码,为什么还要向其使用框架。 没有DI编写10行清晰代码难道不是很容易吗?
  2. 严格来说,不可能以3-5天的时间来估算一个Web项目的开发周期,因此评估是从最相似的Web项目中进行的,并乘以666
  3. 有时,在经济上可行时,您需要消除原型上的重大风险,进行预防性压力测试
  4. 重要的是要检查是否使用了现成的工具,框架,技术,并且清楚地了解到,代码越多,必须修复的错误就越多。
  5. 提供最密集的通信,让您完全沉浸在Web系统中,感受其移动和体系结构,并产生“许多人看代码”的效果,这一点非常重要,也非常重要。 回想一下,在一个成功的操作系统Linux中,很长一段时间没有自动测试,如果立即进行测试驱动设计,那么很可能仍会启动它。 但是另一方面,Linux立即进行了深层代码审核和集中式变更接受系统。 您需要感觉良好。
  6. 在这样的项目中,如果您将经验丰富的工程师联系起来以计划低层架构并决定是否需要原型,则可以大大降低风险。 一旦感觉到需求和预算激增,就会陷入麻烦-您需要做出一些自杀的把戏,在几堵墙和敏捷板上洒血。 该项目成功的受害者-哪个更酷?



因此,如果您明智,谨慎地处理此问题,而无需遵循宗教工程学上的教条,仔细检查所有内容并力求简单并最小化从上面创建的代码和库的数量,则仍然可以有效地管理Web系统的质量。 抑制团队中快速的技术创造力,并将其引导到寻求简单性,简洁性,低成本和透明性-这很有帮助,尤其是在创建复杂和非标准的Web系统中。

但是最不幸的是,我们离开了幕后。 最难的部分是学习如何平衡对剃刀的重视。 您是一名Web开发人员,身穿铠甲,身穿紧身的家庭成员,而衬衫上刻有“ Agile”字样,手中握着旋转的吊带,站在巨人面前。 如果您在额头上碰到他-您的项目。 但是连续数次错过它-您会被武士小队8 dan踩踏,并有良好的伸展力和十足的指关节,吃掉您的尸体后,会吐出骨头并大笑:“我想用PHP解决50个类和7个框架的问题,太疯狂了” 。 一般来说,不要错过,携带枪支,学习网站开发以及……祝您好运!

Source: https://habr.com/ru/post/zh-CN452788/


All Articles