La lucha por la calidad en aplicaciones web, depresión, dragones y Westeros

Inicialmente, nadie planeó el desarrollo web. Incluso en una pesadilla. En términos generales, con el apoyo de las grandes corporaciones y la ciencia, las personas percibieron la creación de sistemas informáticos caros como un proceso estrechamente científico disponible para la élite, en el que es muy importante saber que no solo se olvida rápidamente por la mayoría de los algoritmos (aprendí el principio de evitar la madera roja y negra 5 veces con un folleto) Una mirada a las caderas oscilantes a principios de la primavera borra por completo la información recibida), pero también el interior del hierro. Esta acción sagrada, por supuesto, tenía que controlarse adecuadamente (gloria al gran Deming ), medirse y probarse, y probarse para siempre, amén. Pero algo salió mal y mal de inmediato ...

La lucha por la libertad de expresión.


Con bastante rapidez, el desarrollo de software comenzó a convertirse en grafomanía algorítmica y ninfomanía, y por mucho dinero, para los clientes. La situación con la creación de productos de software a gran escala y comunidades de desarrolladores a su alrededor comenzó a parecerse a la participación en sectas religiosas sobre la base del amor por la ingeniería de la auto tortura.

El movimiento del software libre respondió rápidamente a estas distorsiones de sentido común, gracias a las cuales ahora tenemos herramientas gratuitas, de alta calidad y muy útiles en nuestro ocio y negocio a las que estamos muy acostumbrados: Linux , MySQL , PHP y muchos, muchos otros.

Muy bien, el valor del software libre es visible en el contexto de la prohibición del uso de Android en dispositivos Huawei. Y el desarrollo activo de las criptomonedas modernas agrega combustible al fuego: los criptobancos se pusieron seriamente en el negocio y están sacando el suelo de debajo de los pies de las instituciones y tecnologías tradicionales.

Punks en desarrollo - scripting


Esto no quiere decir que el software resultó ser malo. Fue creado durante mucho tiempo, luego fue probado durante mucho tiempo y luego recibieron lo que ya estaba desactualizado. El proceso, sin embargo, está funcionando. Evolución: en millones de horas hombre de prueba, los insectos desaparecerán y los lagartos y las cucarachas permanecerán en lugar de los dinosaurios, pero ... tenaz. La gente pasaba mucho tiempo resolviendo tareas de sistema de bajo nivel, olvidando los objetivos comerciales. La situación se vio agravada por la creencia de que cuantos más programadores, más rápido puede escribir un sistema. El deseo de deshacerse de servir el código para la gloria de su uso para los negocios generado al principio con una sed salvaje, y luego la implementación de toda una clase de lenguajes de programación, cuyos objetivos eran seguridad, velocidad de desarrollo, simplicidad y concisión: Python, PHP, Ruby, Lua, JavaScript. A pesar de las limitaciones teóricas: la falta de tipeo estático, la presencia de un recolector de basura y tiempo de ejecución, la holgazanería total y el desgarro semántico, las tecnologías se están desarrollando activamente y brindan mucho más beneficios que daños.

Conceptos con fugas


Rápidamente se hizo evidente que era posible enseñar con un palo, pero escribir código que resuelva un problema comercial que fuera simple y comprensible para otros representantes del Homo Sapiens fue mucho más difícil y realmente quieres hacerlo tú mismo. Por expresar esta simple idea, casi quemaron vivo a Saint Dijkstra . Se trata de cómo escribir libros (necesita un gran deseo de aprender e ir a la meta = talento) y escribir publicaciones en Facebook (necesita una cuenta). Pero lejos de todo el mundo se le ha dado esta comprensión, porque es más fácil aprender la gramática de un idioma que aprender a escribir cosas interesantes en él, y por lo tanto, un debate feroz todavía está en curso:

  1. qué lenguaje de programación es mejor
  2. qué sistema operativo es más correcto
  3. escribir exámenes antes, durante o después del matrimonio
  4. qué pies levantarse por la mañana, etc.

La confrontación tradicional entre escritores y bibliotecarios, críticos de música y estrellas de teatro, creadores de empresas y mandos intermedios :-)

En manos de un ingeniero real, el código es bueno, compatible y sin errores, en cualquier lenguaje de programación. Y es miope buscar un entorno de desarrollo en el que pueda llevar a los estudiantes de vacaciones, niñas, cerveza y PS4 y esperar algo a cambio.

Resultó que la vida es tan diversa y las tareas que se resuelven con la ayuda de la programación son a veces tan originales que alguna concepción tradicional simplemente no funciona de frente o da lugar a "conceptos de tontería" que rompen la conciencia:

  1. La programación orientada a objetos funciona bien en juegos y sistemas gráficos, pero en Python no le gusta mucho como un concepto que limita la libertad. Recuerdo haber visto en PHP la clase Herramientas extendiendo la clase Utils
  2. La programación funcional hace un gran trabajo al procesar flujos de datos y bordillos (Apache Spark), pero Haskell nunca despegó, porque la vida no es una abstracción matemática, sino a menudo un conjunto de muletas de dispersión y risa.
  3. Los scripts en PHP, Python, Ruby interconectan perfectamente diferentes tecnologías y componentes de aplicaciones, en Lua describen scripts en juegos, pero escribir servicios de red altamente cargados en ellos es mejor dispararse directamente en la cabeza. Python ni siquiera piensa en agregar multihilo.

En general, resultó que resolver todos los problemas con una herramienta (Java Spring), por decirlo suavemente, es ineficiente y es mejor elegir la herramienta adecuada para la tarea que martillar las uñas con un microscopio. Pero, desafortunadamente, no les gusta estudiar ...

La dificultad es el enemigo principal.


A medida que los sistemas crecieron, se hizo cada vez más claro que algunos empleados aprenden fácilmente, implementan conceptos avanzados, idiomas, tecnologías, leen mucho, y algunos, a veces, desafortunadamente, la mayoría, francamente, no tienen tiempo y comienzan a comprender colegas avanzados. Los módulos efectivamente escritos, incomprensibles al principio para la mayoría, y luego para los propios autores, comienzan a vivir sus propias vidas y mueren, generalmente en orgullosa soledad. Quedó claro que todo el equipo debería poseer tecnología, de lo contrario, la tecnología puede hacer más daño que bien.

Un lenguaje de programación excelente, audaz y decente, con una curva de entrada empinada, digamos, guapo Rust , puede ser un inconveniente y un riesgo para el proyecto.

La gente es hermosa


¿Cuántas décadas han desarrollado lenguajes y tecnologías de programación en la misma dirección?

  1. Código eficiente y rápido cerca del hardware. Un compilador permeable, mal concebido, que sustituye a un desarrollador. C / C ++.
  2. Recolector de basura, lenguaje seguro. Conceptos poderosos. Mecanografía bastante estricta. Pero perdemos velocidad y consumimos RAM. A veces escribimos debajo del recolector de basura. Java, C #, Swift (sí, estoy al tanto de RC).
  3. Lenguaje muy simple, entrada rápida, desarrollo rápido. Pero la falta de tipeo (riesgos) y el recolector de basura. PHP, Python, Ruby.

Y luego aparece una gran idea: “muchachos, no estamos yendo en la dirección correcta; y hagamos que el compilador sea más inteligente? Nace Rust, que satisfizo casi todas las solicitudes:

  • Código eficiente y rápido, cero abstracciones
  • Compilador inteligente que protege al desarrollador de errores terribles cuando trabaja con memoria
  • No recolector de basura, Carl. ¡NO ES!

¡Gloria a la mente y belleza!



Desarrollo web: ¿cómo podría suceder esto?


Después de haber acumulado la experiencia necesaria y los golpes de relleno, la humanidad de repente se dio cuenta de que si cruza la herramienta de diseño de texto más simple , un lenguaje inventado en una noche para automatizar los botones de la página web , las reglas para asignar colores y, con cuidado, sin movimientos bruscos, siga todas las instrucciones, muévalo por Internet usando PHP, con el conocimiento de que, dicen, los niños ya nacieron: puede obtener la sinergia tecnológica más poderosa y comenzar a resolver rápidamente los problemas comerciales aquí y ahora:

  1. Renderice interfaces eficientes usando HTML / CSS. Sí, no siempre fueron perfectos, pero son efectivos y, especialmente ahora, extremadamente poderosos.
  2. Almacene de forma segura los datos de la aplicación en MySQL
  3. Navega por la red a través de Linux
  4. Transfiera mensajes entre componentes utilizando patrones arquitectónicos maduros, como colas

De hecho, nadie comprende por qué tuvo lugar esta revolución, pero el hecho es que la sinergia de tecnologías simples ha generado una bomba nuclear. Y deje que PHP continúe sorprendiendo al tomar prestados conceptos pulidos de otros lenguajes, y deje que Python nunca implemente múltiples subprocesos: es scripting, es decir, simplicidad, concisión y un alto nivel de abstracciones que hicieron posible revolucionar la programación y resolver problemas comerciales de manera rápida, simple y eficiente en 3 -5 líneas de código.

La sinergia continúa: BigData y Machine Learning


Fue por las razones anteriores que Python despegó para las tareas de procesamiento y análisis de datos. Los matemáticos se sentaron y escribieron en su herramienta de tipeo "terrible", débilmente tipeada, que es aterradora de tomar en sus manos: no hay compilador, ¡vaya, qué problema! Escribieron, escribieron y ... escribieron un conjunto de bibliotecas de la clase más alta:

  1. Numpy : procesamiento de alta velocidad de matrices multidimensionales, esto no es y no se espera en PHP
  2. Pandas - Potente procesamiento de datos relacionales en la memoria
  3. Matplotlib , Seaborn : excelentes herramientas de visualización de datos

Descargué la distribución gratuita Anaconda , instalé los paquetes y listo, ¡creé un bigdat, lancé neuronas y predecí el futuro! Gratis

Sin embargo, estas siguen siendo flores. Berries es un entorno de comunicación y desarrollo interactivo estandarizado muy popular: Jupiter Notebook . La primera impresión es la regresión. Bueno, ¿hay un IDE poderoso? Pero luego llega la comprensión: este es un gran paso adelante. El papel de Júpiter es casi el mismo que el del desarrollo web en el momento de su aparición: resultados rápidos, comunicaciones rápidas, capacidades críticas para el negocio y estándares abiertos.

Web Studio y programador web - Atmósfera


Usted pregunta, ¿por qué estoy escribiendo todo esto? El hecho es que sin sumergirse en la atmósfera del desarrollo web, no puede ver la mejor manera de controlar la calidad al crear aplicaciones web. Sin enamorarse de este espíritu, no puede tener éxito en la web. Los enfoques estándar y clásico no funcionan aquí, y he aquí por qué:

  1. A diferencia del mundo de C, C ++, donde es habitual emitir 1-2 lanzamientos por año, aquí se lanzan una vez por semana, es decir el desarrollo ocurre a velocidades superligeras
  2. A diferencia del mundo de C # y Java, donde es habitual involucrarse en la programación orientada a objetos y cubrir todo con pruebas de unidad e integración, a menudo hay conceptos y tareas tan complejas y no estándar que un script de 10 líneas puede resolver una tarea más rápido y más hermoso que un marco de 10 clases. Probar diseños y scripts, por desgracia, es automáticamente muy difícil y costoso, por lo que a menudo se prueban con los ojos y con los usuarios :-)
  3. A diferencia del mundo de la programación funcional y la belleza de la expresión funcional de un problema, aquí los enfoques para la resolución se expresan a través de, en un sentido literal pero bueno, un asno, y esto está justificado: la viabilidad económica de un guión de procedimiento terrible que puede tirar y escribir uno nuevo (y así 10 veces)
  4. A diferencia del software tradicional, aquí las ideas se implementan rápidamente en código, se comprueban, se descartan y se seleccionan mejor. El 90% del código - muere, el 10% - vive y deleita a los clientes. Es mejor tener 10 líneas que funcionen de manera confiable y comprensible, aquí y ahora, que 1000 líneas académicas en algún lugar de las funciones y clases con agujeros indefinidos y cobertura por autotest.

Pero lo principal son las personas. Entre los desarrolladores web, son especiales. No es que no les guste escribir código, sino que lo odian. El objeto de admiración para el desarrollador web es la velocidad de resolución del problema. Si hay una opción entre 2 líneas de código PHP y un marco de 20 clases, la elección será hacia una solución más sexual con su laconismo. Es por eso que, si puede elegir escribir o no escribir código, un programador web profesional elegirá el primero y pasará más tiempo con la niña, por ejemplo, en la sala de lectura de la biblioteca, estudiando la antigua epopeya india , y el recién llegado aprenderá el segundo hasta que se dé cuenta de que cuanto más código, cuantos más errores pueda haber, y en las pruebas automáticas del código de error habrá aún más y, por lo tanto, es mejor escribir 5 líneas y revisarlas rápidamente con los ojos que crear una apariencia de calidad y corregir cualquier error durante semanas :-)

Cómo gestionar la calidad de los proyectos web.


En este punto, lo más probable es que ya haya aprendido que el desarrollo web es un área de programación especial, nueva y muy tormentosa, llena de ingenieros muy diferentes a los colegas que odian el código y tienen un deseo ardiente de resolver problemas lo más rápido posible y con la ayuda de herramientas simples y listas para usar. . Es por eso que los desarrolladores web a menudo se convierten en administradores de sistemas a los que les gusta ganar más que trabajar. Y sí, otra asociación, un desarrollador web es más como un nerd con una pistola que un samurai 8 dan con una espada, serpentinas y nudillos. Haga apuestas, ¿quién ganará la batalla callejera, SIN las reglas?

Pero esto es solo la mitad de la batalla. Clientes comerciales que se dieron cuenta de que el uso del desarrollo web puede resolver rápidamente problemas complejos: cree una tienda en línea dinámica con conexión CRM y busqueda integrada para un catálogo de productos en 1 semana, si rehace la mitad de la funcionalidad de la caja, puede escribir libros de calidad usted mismo Desarrollo web, desde el cual es probable que Deming se mueva constantemente en un asador en el infierno . Estos son sus puntos clave que sacuden los conceptos básicos del control de calidad clásico:

  1. La velocidad de derivación de la competencia es más importante que la calidad. Si el proyecto web despega y rueda (1 de cada 10 o menos), puede reescribirlo "correctamente", pero, curiosamente, nadie los reescribe y viven, y a menudo con éxito y comodidad, durante años.
  2. El proyecto se realiza para la acción, una vez y la calidad interna se puede olvidar con la conciencia tranquila. La probabilidad de que alguien ingrese al código más tarde es igual al 0.00001% (subí a tales proyectos; en la víspera de Año Nuevo pueden volver a ser populares nuevamente).
  3. Los clientes no desean escribir autotests que aumenten el costo de desarrollo en 2 veces e inflen la arquitectura de las clases en conjuntos de conceptos abstractos y sobresalientes. Pero a veces, para bibliotecas y, con alta probabilidad, reutilización, están de acuerdo.
  4. Los clientes están listos para ayudar a probar el sistema web, y a menudo se dan cuenta (desafortunadamente, hay excepciones) de que con tales períodos de desarrollo (4 meses para todo el proyecto llave en mano) y la lucha contra la autoevaluación y la inflación del código a nivel de contrato, es imposible lograr la misma calidad de todos los componentes del sistema .
  5. TK no es necesario, porque está cambiando constantemente, quedando obsoleto y necesita mantener un departamento de documentación para actualizarlo. Más fácil de crear sobre la marcha, vea los resultados y gire la rueda Agile.
  6. El trabajo tonto ama

Entendiendo esto, los especialistas de calidad vuelan sobre el dragón y ya no regresan, horrorizados por lo que está sucediendo, o aceptan los valores del desarrollo web, los penetran y construyen algo como esto:

  1. Los enfoques utilizados en el diseño, desarrollo y prueba no deben tomarse por fe, religiosamente. Es importante convertirse en Thomas . Entonces necesitas escribir autotests, luego necesitas hacerlo. ¿Quién lo necesita? Prueba de viabilidad económica. ¿Por qué realizar autotests a un sitio de tarjetas de visita si puede verificar rápidamente todo con sus ojos? ¿Por qué escribir objetos simulados en el marco que está utilizando, si genera toneladas de código que pueden contener errores y que deben acompañarse? ¿No es más fácil escribir 10 líneas de código claro sin DI?
  2. Estrictamente hablando, es imposible estimar el período de desarrollo de un proyecto web con 3-5 días para el diseño, por lo que la evaluación se toma del proyecto web más similar y se multiplica por 666
  3. A veces, cuando es económicamente factible, debe eliminar los riesgos críticos en el prototipo, realizar pruebas de estrés preventivas
  4. Es importante verificar que se utilicen herramientas, marcos y tecnologías listas para usar, y hay un claro entendimiento de que cuanto más código, más errores tendrán que repararse
  5. Es importante, muy importante, proporcionar las comunicaciones más intensivas que le permitan sumergirse completamente en el sistema web, sentir su movimiento y arquitectura y crear el efecto de "muchos ojos miran el código". Recuerde que en Linux, un sistema operativo exitoso, durante mucho tiempo no hubo pruebas automatizadas, y si Test-Driven Design estuviera allí de inmediato, lo más probable es que todavía se inicie. Pero, por otro lado, Linux inmediatamente tuvo una profunda auditoría de código y un sistema centralizado de aceptación de cambios. Necesitas sentirlo bien.
  6. En tales proyectos, puede reducir significativamente los riesgos si conecta ingenieros experimentados para planificar una arquitectura de bajo nivel y decidir la necesidad de un prototipo. Tan pronto como haya una sensación de que hay un abanico de requisitos y presupuesto, para estar en problemas, debe hacer un par de trucos suicidas, rociar sangre en varias paredes y tableros ágiles. Víctima del éxito del proyecto: ¿qué podría ser mejor?



Por lo tanto, la calidad del sistema web aún se puede administrar de manera efectiva si aborda el asunto con prudencia, con cuidado, sin tomar en serio los dogmas de ingeniería religiosa, verificar dos veces todo y esforzarse por la simplicidad y minimizar la cantidad de código y bibliotecas creadas desde arriba. Suprime la creatividad técnica rápida en equipos y la dirige hacia la búsqueda de la simplicidad, la concisión, el bajo costo y la transparencia: ayuda mucho, especialmente en la creación de sistemas web complejos y no estándar.

Pero lo más difícil, desafortunadamente, lo dejamos detrás de escena. La parte más difícil es aprender a equilibrar el énfasis en la maquinilla de afeitar. Usted, un desarrollador web, está de pie sin armadura, con miembros de la familia ajustados y una camisa con la inscripción "Agile", con una honda giratoria en sus manos, frente al gigante. Y si lo golpeas en la frente, tu proyecto. Pero falte algunas veces seguidas: los octavos escuadrones de samurais lo pisotearán con un buen estiramiento y lleno de nudillos que, comiendo su cadáver, escupirán huesos y se reirán: "Quería resolver un problema de 50 clases y 7 marcos en PHP, loco" . En general, no te pierdas, lleva armas de fuego, aprende desarrollo web y ... ¡buena suerte!

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


All Articles