A luta pela qualidade em aplicações web, depressão, dragões e Westeros

Ninguém inicialmente planejou o desenvolvimento web. Mesmo em um pesadelo. Em termos gerais, com o apoio de grandes corporações e ciência, as pessoas perceberam a criação de sistemas de TI caros como um processo cientificamente disponível para a elite, no qual é muito importante saber não apenas rapidamente esquecido pela maioria dos algoritmos (aprendi o princípio de ignorar a madeira vermelha e preta 5 vezes com um folheto - uma olhada nos quadris oscilantes no início da primavera apaga completamente as informações recebidas), mas também o interior do ferro. Essa ação sagrada, é claro, tinha que ser adequadamente controlada (glória ao grande Deming ), medida e testada e testada para sempre. Amém. Mas algo imediatamente deu errado e errado ...

A luta pela liberdade de expressão


Muito rapidamente, o desenvolvimento de software começou a se transformar em graphomania e ninfomania algorítmica, e por muito dinheiro, para os clientes. A situação com a criação de produtos de software em larga escala e as comunidades de desenvolvedores ao seu redor começou a se assemelhar ao envolvimento em seitas religiosas com base no amor à auto-tortura de engenharia.

O movimento do software livre respondeu rapidamente a essas distorções do senso comum, graças às quais agora temos ferramentas gratuitas, de alta qualidade e muito úteis em nossos lazer e negócios aos quais estamos muito acostumados: Linux , MySQL , PHP e muitos outros.

Muito bem, o valor do software livre é visível no contexto da proibição do uso do Android em dispositivos Huawei. E o desenvolvimento ativo das criptomoedas modernas adiciona combustível ao incêndio - os bancos de criptomoedas começaram a trabalhar seriamente e estão puxando o solo sob os pés das instituições e tecnologias tradicionais.

Punks em desenvolvimento - scripts


Isso não quer dizer que o software acabou sendo ruim. Ele foi criado por um longo tempo, depois foi testado por um longo tempo e eles receberam o que já estava desatualizado. O processo, no entanto, está funcionando. Evolução: em milhões de horas-homem de teste, os insetos desaparecem e lagartos e baratas permanecem em vez de dinossauros, mas ... tenazes. As pessoas gastavam muito tempo resolvendo tarefas de sistema de baixo nível, esquecendo as metas de negócios. A situação foi agravada pela crença de que quanto mais programadores, mais rápido você pode escrever um sistema. O desejo de se livrar de servir o código para a glória de seu uso para os negócios gerou inicialmente uma grande sede e, em seguida, a implementação de toda uma classe de linguagens de programação, cujos objetivos eram segurança, velocidade de desenvolvimento, simplicidade e concisão: Python, PHP, Ruby, Lua, JavaScript. Apesar das limitações teóricas: a ausência de tipagem estática, a presença de um coletor de lixo e tempo de execução, a preguiça total e a goivagem semântica, as tecnologias estão se desenvolvendo ativamente e trazem muito mais benefícios do que danos.

Conceitos com vazamento


Logo ficou claro que era possível ensinar com um bastão, mas escrever um código que resolvesse um problema comercial simples e compreensível para outros representantes do Homo Sapiens era muito mais difícil e você realmente deseja fazê-lo. Por expressar essa idéia simples, eles quase queimaram Saint Dijkstra vivo . É sobre como escrever livros (você precisa de um grande desejo de aprender e ir para o objetivo = talento) e escrever postagens no Facebook (você precisa de uma conta). Mas longe de todo mundo foi dado esse entendimento, porque é mais fácil aprender a gramática de uma língua do que aprender a escrever coisas interessantes e, portanto, ainda existe um debate feroz:

  1. qual linguagem de programação é melhor
  2. qual sistema operacional está mais correto
  3. escreva testes antes, durante ou depois do casamento
  4. que pés levantar pela manhã etc.

O confronto tradicional entre escritores e bibliotecários, críticos de música e astros, criadores de empresas e gerência intermediária :-)

Nas mãos de um engenheiro de verdade, o código é bom, suportado e sem erros - em qualquer linguagem de programação. E é míope procurar um ambiente de desenvolvimento em que você possa levar os alunos de férias, garotas, cerveja e PS4 e esperar algo em troca.

Descobriu-se que a vida é tão diversa e as tarefas que são resolvidas com a ajuda da programação às vezes são tão originais que uma concepção tradicional simplesmente não funciona de frente ou dá origem a "conceitos burros" destrutivos da consciência:

  1. A programação orientada a objetos funciona bem em jogos e sistemas gráficos, mas no Python não é muito apreciado como um conceito que limita a liberdade. Lembro-me de ver no PHP a classe Tools estendendo a classe Utils
  2. A programação funcional faz um ótimo trabalho no processamento de fluxos de dados e restrições (Apache Spark), mas Haskell nunca decolou, porque a vida não é uma abstração matemática, mas muitas vezes um conjunto de muletas dispersas e rindo
  3. Scripts em PHP, Python, Ruby conectam perfeitamente diferentes tecnologias e componentes de aplicativos, descrevem scripts em jogos em Lua, mas escrever serviços de rede altamente carregados neles é melhor para dar um tiro na cabeça. O Python nem pensa em adicionar multithreading.

Em geral, descobriu-se que resolver todos os problemas com uma ferramenta (Java Spring), para dizer o mínimo, é ineficiente e é melhor escolher a ferramenta certa para a tarefa do que martelar pregos com um microscópio. Mas, infelizmente, eles não gostam de estudar ...

A dificuldade é o principal inimigo


À medida que os sistemas cresciam, tornou-se cada vez mais claro que alguns funcionários aprendem, implementam conceitos avançados, linguagens, tecnologias, lêem muito e outros, às vezes, infelizmente, a maioria, francamente, não têm tempo e começam a entender colegas avançados. Módulos efetivamente escritos, incompreensíveis inicialmente para a maioria e depois para os próprios autores, começam a viver suas próprias vidas e a morrer, geralmente em orgulhosa solidão. Ficou claro que toda a equipe deveria possuir tecnologia, caso contrário, a tecnologia pode causar mais mal do que bem.

Uma linguagem de programação excelente, ousada e decente, com uma curva de entrada íngreme, digamos, Rust bonito, pode ser um sinal de menos e um risco para o projeto.

As pessoas são lindas


Quantas décadas desenvolveram linguagens e tecnologias de programação na mesma direção:

  1. Código eficiente e rápido próximo ao hardware. Um compilador vazado, mal concebido, substituindo um desenvolvedor. C / C ++.
  2. Coletor de lixo, linguagem segura. Conceitos poderosos. Digitação bastante estrita. Mas perdemos velocidade e consumimos RAM. Às vezes, escrevemos sob o coletor de lixo. Java, C #, Swift (sim, eu conheço RC).
  3. Linguagem muito simples, entrada rápida, desenvolvimento rápido. Mas a falta de digitação (riscos) e o coletor de lixo. PHP, Python, Ruby.

E então surge uma ótima idéia: “pessoal, não estamos seguindo o caminho certo da palavra; e vamos tornar o compilador mais inteligente? " Nasce a ferrugem, que atende a quase todos os pedidos:

  • Código eficiente e rápido, sem abstrações
  • Compilador inteligente que protege o desenvolvedor de erros terríveis ao trabalhar com memória
  • Nenhum coletor de lixo, Carl. NÃO É!

Glória à mente e beleza!



Desenvolvimento Web - como isso pode acontecer?


Tendo acumulado a experiência necessária e os empecilhos, a humanidade percebeu subitamente que, se você atravessar a ferramenta de layout de texto mais simples , uma linguagem inventada em uma noite para automatizar botões de páginas da web , as regras para atribuição de cores e, cuidadosamente, sem movimentos bruscos, siga todas as instruções, puxe-a pela Internet c usando PHP, com o conhecimento de que, segundo eles, as crianças já nascem - você pode obter a sinergia tecnológica mais poderosa e começar a resolver rapidamente problemas de negócios aqui e agora:

  1. Renderize interfaces eficientes usando HTML / CSS. Sim, eles nem sempre foram perfeitos, mas são eficazes e, especialmente agora, extremamente poderosos.
  2. Armazene dados de aplicativos com segurança no MySQL
  3. Navegue na net via linux
  4. Transferir mensagens entre componentes usando padrões arquiteturais maduros, como filas

Na verdade, ninguém entende por que essa revolução ocorreu, mas o fato permanece: a sinergia de tecnologias simples gerou uma bomba nuclear. E deixe o PHP continuar surpreendendo ao emprestar conceitos polidos de outras linguagens e nunca permita que o Python introduza multithreading - apenas scripts, como simplicidade, laconicismo e um alto nível de abstrações, tornaram possível revolucionar a programação e resolver problemas de negócios de maneira rápida, simples e eficiente. -5 linhas de código.

A sinergia continua - BigData e Machine Learning


Foi pelas razões acima que o Python decolou para as tarefas de processamento e análise de dados. Os matemáticos sentaram-se, escreveram sobre a sua ferramenta de digitação “terrível”, de tipo fraco, de digitação Duck , que é assustador de usar em suas mãos - não há compilador, uau, que problema! Eles escreveram, escreveram e ... escreveram um conjunto de bibliotecas da classe mais alta:

  1. Numpy - processamento em alta velocidade de matrizes multidimensionais, isso não é e não é esperado em PHP
  2. Pandas - Poderoso processamento de dados relacionais na memória
  3. Matplotlib , Seaborn - Ótimas ferramentas de visualização de dados

Eu baixei a distribuição de freeware Anaconda , instalei os pacotes e é isso, criei um bigdat, inicie neurônios e preveja o futuro! De graça.

No entanto, estas ainda são flores. O Berries é um ambiente de comunicação e desenvolvimento interativo padronizado muito popular - o Jupiter Notebook . A primeira impressão é regressão. Bem, existe um IDE poderoso? Mas então vem a compreensão - este é um grande passo em frente. O papel de Júpiter é praticamente o mesmo do desenvolvimento da Web no momento de sua aparência: resultados rápidos, comunicações rápidas, recursos críticos para os negócios e padrões abertos.

Web Studio e Programador Web - Atmosphere


Você pergunta, por que estou escrevendo tudo isso? O fato é que, sem mergulhar na atmosfera de desenvolvimento da Web, você não consegue ver a melhor forma de controlar a qualidade ao criar aplicativos da Web. Sem se apaixonar por esse espírito, você não pode ter sucesso na web. As abordagens padrão e clássica não funcionam aqui, e aqui está o porquê:

  1. Ao contrário do mundo de C, C ++, onde é habitual emitir 1-2 lançamentos por ano, aqui eles são lançados uma vez por semana, ou seja, desenvolvimento ocorre em velocidades super leves
  2. Ao contrário do mundo de C # e Java, onde é comum se envolver em programação orientada a objetos e cobrir tudo com testes de unidade e integração, geralmente existem conceitos e tarefas tão complexos e fora do padrão que um script de 10 linhas pode resolver uma tarefa mais rápida e bonita que uma estrutura de 10 classes. Infelizmente, o teste de layouts e scripts é automaticamente muito difícil e caro, portanto eles são frequentemente testados com os olhos e com os usuários :-)
  3. Diferentemente do mundo da programação funcional e da beleza da expressão funcional de uma tarefa, aqui as abordagens para a solução são expressas por meio de um burro literal, mas bom, e isso é justificado - a viabilidade econômica de um terrível roteiro processual que você pode jogar fora e escrever um novo (e assim 10 vezes)
  4. Diferentemente do software tradicional, aqui as idéias são rapidamente implementadas no código, verificadas, descartadas e melhor selecionadas. 90% do código - morre, 10% - vivem e encantam os clientes. É melhor ter 10 linhas de trabalho confiáveis ​​e compreensíveis, aqui e agora, do que 1000 linhas acadêmicas em algum lugar em funções e classes com buracos indefinidos e cobertura por autotestes.

Mas o principal é as pessoas. Entre os desenvolvedores web, eles são especiais. Eles não gostam de escrever código, mas odeiam. O objeto de admiração do desenvolvedor da web é a velocidade de resolver o problema. Se houver uma escolha entre 2 linhas de código PHP e uma estrutura de 20 classes, a escolha será em direção a uma solução mais sexual com seu laconicismo. É por isso que, se você optar por escrever ou não código, um programador profissional da web escolherá o primeiro e passará mais tempo com a garota, por exemplo, na sala de leitura da biblioteca, estudando o antigo épico indiano , e o novato aprenderá o segundo até perceber que quanto mais código, quanto mais erros houver nele, e em autotestes para o código de erro haverá ainda mais e, portanto, é melhor escrever 5 linhas e verificá-las rapidamente com seus olhos do que criar uma aparência de qualidade e corrigir qualquer erro por semanas :-)

Como gerenciar a qualidade dos projetos da web


Neste ponto, você provavelmente já aprendeu que o desenvolvimento web é uma área de programação especial, nova e muito tempestuosa, repleta de colegas engenheiros muito diferentes que odeiam códigos e têm um desejo ardente de resolver problemas o mais rápido possível e com a ajuda de ferramentas prontas e simples . É por isso que os desenvolvedores da Web costumam se tornar administradores de sistemas que gostam de ganhar mais do que trabalho. E sim, outra associação, um desenvolvedor web é mais como um nerd com uma arma do que um samurai 8 dan com uma espada, serpentinas e cheio de juntas. Faça apostas, quem vencerá a batalha de rua, SEM as regras?

Mas isso é apenas metade da batalha. Clientes empresariais que perceberam que o uso do desenvolvimento da Web podem resolver rapidamente problemas complexos: crie uma loja on-line dinâmica com conexão CRM e pesquisa integrada de um catálogo de produtos em uma semana, se você refazer metade da funcionalidade da caixa, poderá escrever livros de qualidade Desenvolvimento da Web, a partir do qual Deming provavelmente rolar constantemente no espeto no inferno . Aqui estão os pontos principais que abalam o básico do controle de qualidade clássico:

  1. A velocidade de desvio do concorrente é mais importante que a qualidade. Se o projeto da web decolar e girar (1 em 10 ou menos), você poderá reescrevê-lo "corretamente", mas, estranhamente, ninguém os reescreverá e eles viverão, e com freqüência, com sucesso e comodidade, durante anos.
  2. O projeto é feito para a ação, a qualidade única e interna pode ser esquecida com a consciência limpa. A probabilidade de alguém entrar no código mais tarde é igual a 0,00001% (entrei nesses projetos; na véspera de Ano Novo, eles podem se tornar populares novamente).
  3. Os clientes não desejam escrever autotestes que aumentem o custo de desenvolvimento em duas vezes e aumentem a arquitetura das classes em conjuntos de conceitos abstratos e destacáveis. Mas às vezes, para bibliotecas e, com alta probabilidade, reutilização, eles concordam.
  4. Os clientes estão prontos para ajudar no teste do sistema da web, muitas vezes percebendo (infelizmente, há exceções) que, com esses períodos de desenvolvimento (4 meses para todo o projeto turnkey) e a luta contra o autoteste e a inflação de código no nível do contrato, é impossível alcançar a mesma qualidade de todos os componentes do sistema .
  5. O TK não é necessário, pois está em constante mudança, tornando-se obsoleto e você precisa manter um departamento de documentação para atualizá-lo. Mais fácil de criar em tempo real, veja os resultados e gire a roda ágil.
  6. O trabalho tolo ama

Entendendo isso, especialistas em qualidade voam para longe do dragão e não voltam mais, horrorizados com o que está acontecendo, ou aceitam os valores do desenvolvimento da web, os penetram e constroem algo como isto:

  1. As abordagens usadas no projeto, desenvolvimento e teste não devem ser adotadas religiosamente. É importante tornar-se Thomas . Então você precisa escrever autotestes, então você precisa. Quem precisa disso? Prova de viabilidade econômica. Por que autoteste em um site de cartão de visita se você pode verificar rapidamente tudo com os olhos? Por que gravar objetos simulados na estrutura que você está usando, se gera toneladas de código que podem conter erros e que precisam ser acompanhados. Não é mais fácil escrever 10 linhas de código claro sem DI?
  2. Estritamente falando, é impossível estimar o período de desenvolvimento de um projeto da Web com 3-5 dias para o design, portanto, a avaliação é feita no projeto da Web mais semelhante e multiplicada por 666
  3. Às vezes, quando é economicamente viável, você precisa remover riscos críticos no protótipo, realizar testes preventivos de estresse
  4. É importante verificar se ferramentas, estruturas, tecnologias prontas são usadas e há um entendimento claro de que quanto mais código, mais erros serão corrigidos
  5. É importante, muito importante, fornecer as comunicações mais intensivas que permitem que você mergulhe totalmente no sistema da web, sinta seu movimento e arquitetura e crie o efeito de "muitos olhos olham para o código". Lembre-se de que no Linux, um sistema operacional bem-sucedido, por muito tempo não houve testes automatizados e, se o Design Orientado a Testes estivesse lá imediatamente, ele provavelmente ainda seria lançado. Por outro lado, o Linux imediatamente teve uma auditoria profunda de código e um sistema centralizado de aceitação de alterações. Você precisa se sentir bem.
  6. Nesses projetos, você pode reduzir significativamente os riscos se conectar engenheiros experientes para planejar uma arquitetura de baixo nível e decidir sobre a necessidade de um protótipo. Assim que surgir a sensação de que há um abanamento de requisitos e orçamento, estar em apuros - você precisa fazer alguns truques suicidas, borrifar sangue em várias paredes e placas Agile. Vítima do sucesso do projeto - o que poderia ser mais legal?



Assim, a qualidade do sistema da web ainda pode ser gerenciada efetivamente se você abordar o assunto com sabedoria, cuidado, sem levar em consideração os dogmas da engenharia religiosa, checar tudo e buscar a simplicidade e minimizar a quantidade de código e bibliotecas criadas a partir de cima. Suprimir a rápida criatividade técnica das equipes e direcioná-la para a busca de simplicidade, concisão, baixo custo e transparência - ajuda muito, principalmente na criação de sistemas Web complexos e fora do padrão.

Mas o mais difícil, infelizmente, deixamos nos bastidores. A parte mais difícil é aprender a equilibrar a ênfase na navalha. Você, um desenvolvedor web, está parado sem armadura, em membros apertados da família e uma camisa com a inscrição "Agile", com uma funda giratória nas mãos, na frente do gigante. E se você bater na testa dele - seu projeto. Mas perca algumas vezes seguidas - você será pisoteado pelos esquadrões de samurais de 8 dan com um bom alongamento e cheio de juntas, que, comendo seu cadáver, cuspirão com ossos e rirão: “Eu queria resolver um problema com 50 classes e 7 estruturas em PHP, louco” . Em geral, não perca, carregue armas de fogo, aprenda desenvolvimento web e ... boa sorte!

Source: https://habr.com/ru/post/pt452788/


All Articles