Complexidade de sistemas e métodos de "luta" com ele

De uma forma ou de outra, todos projetamos e implementamos sistemas. Quer se trate de sistemas de software, infraestrutura ou soluções de plataforma. E como parte deste trabalho, somos constantemente confrontados com o conceito de um "sistema complexo". Como parte deste post, quero compartilhar minha visão da complexidade dos sistemas e a "luta" com ele.


Vamos começar definindo o sistema. Gosto da definição dada no livro System Architecture . Estratégia e desenvolvimento de produtos para sistemas complexos . A tradução soa mais ou menos assim:


Um sistema é um conjunto de componentes e seus relacionamentos. A funcionalidade de todo o sistema é maior que a soma das funcionalidades de seus componentes individuais.

Esta é uma definição muito importante. Isso sugere que o sistema deve gerar "utilidade". Se o sistema não fornecer um aumento na "utilidade", em comparação com os componentes que o compõem, provavelmente esse sistema não será muito necessário.


A próxima pergunta que você pode se perguntar é o que é um "sistema complexo". Você pode falar muito sobre isso, mas, na minha opinião, é difícil chamar um sistema difícil de avaliar com sua mente, difícil de trabalhar, difícil de entender, difícil de manter em mente todas as interações que ocorrem neste sistema.


E aqui para nós, como engenheiros, é importante ter um mecanismo, alguma maneira de medir essa complexidade. Como base para esse mecanismo, os caras do MIT sugerem o uso do conhecido "número mágico sete mais dois menos". Há um estudo original sobre esse assunto, além de artigos sobre as apresentações de Habré e TED . Em poucas palavras, a idéia de todos esses estudos é que a "memória de trabalho" de uma pessoa pode simultaneamente segurar e trabalhar com um número limitado de objetos diferentes. Aqui, o conceito de "vários" objetos é muito importante, porque o cérebro está lutando com a complexidade ao agrupar objetos. Por exemplo, conexões entre objetos do mesmo tipo ou tipo podem ser lembradas como uma conexão. Ou, mais claramente - você não precisa imaginar um sistema de montes de bolas misturadas de cores diferentes. Simplesmente agrupe-os em sua cabeça, diga que existem, digamos, cinco bolas vermelhas, sete amarelas e três azuis. Isso simplifica o trabalho com o sistema, reduzindo o número de objetos de quinze para três. Portanto, no contexto da avaliação da complexidade, estamos falando de objetos diferentes, atômicos, que não podem ser agrupados.


No final, existem estimativas diferentes da capacidade da memória de trabalho. Alguém fala de quatro objetos, alguém - cerca de cinco, alguém - cerca de sete. No meu raciocínio, vou aderir à abordagem clássica - "sete mais menos dois" .


Com base nessas estimativas, pode-se dizer que, se ficar difícil trabalhar com um sistema, manter seus componentes e comunicações na memória, aparentemente excederá o mesmo limite de capacidade de "sete mais menos dois". Por sua vez, isso significa que esse "número mágico sete" pode ser usado como uma estimativa básica da complexidade do sistema. Penso que, até agora, uma definição provisória tem direito à vida:


Um sistema complexo é um sistema que consiste em 7 + -2 componentes atômicos e suas ligações em várias proporções.

Maneiras clássicas de lidar com a complexidade


Agora, vamos relembrar brevemente as formas ou ferramentas clássicas de lidar com a complexidade no estágio de design. Existem alguns deles: abstração, decomposição, hierarquia e decomposição hierárquica.


  • Abstração - um método que permite destacar a função principal de um sistema ou subsistema e ocultar o conteúdo
  • Decomposição - uma maneira de dividir o sistema em blocos ou componentes menores
  • Hierarquia é uma maneira de dividir o sistema em níveis, onde os níveis têm um certo lugar na estrutura e estão localizados um acima do outro
  • Decomposição hierárquica - um método que combina hierarquia e decomposição

Todas essas ferramentas foram projetadas para simplificar os subsistemas individuais de nosso sistema, de modo que, ao trabalhar com cada unidade, ela "se encaixe na cabeça" como um todo.


O que é isso tudo


O que todas essas coisas nos dão? Simplificando, a idéia é, usando vários métodos, converter um conjunto não estruturado de componentes do sistema em um tipo de forma estrutural. Além disso, lembrando a mágica sete, podemos dizer que cada bloco na decomposição não deve conter mais de sete mais / menos dois elementos. Caso contrário, com um exame detalhado de tal bloco, será difícil de controlar.


Por outro lado, se tivermos um sistema com um grande número de blocos, dividido em níveis hierárquicos, o número desses níveis, de preferência, não deverá exceder sete (mais / menos dois). Como ilustração, quero trazer um slide de Fundamentos de engenharia de sistemas . Como você pode ver no slide, a complexidade do sistema aumenta com o número de níveis de decomposição.


complexidadeCálculos


Assim, o processo correto de design do sistema pode ser descrito aproximadamente pela seguinte tese:


Não construa sistemas complexos. Crie sistemas com o nível necessário de complexidade.

Literatura


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


All Articles