Olá a todos. Costumo aplicar princípios de engenharia de sistemas no meu trabalho e gostaria de compartilhar essa abordagem com a comunidade.
A engenharia de sistemas — sem padrões — é, em termos simples, o processo de desenvolvimento de um sistema como componentes relativamente abstratos, sem referência a modelos de dispositivos específicos. Durante esse processo, as propriedades dos componentes do sistema e as relações entre eles são estabelecidas. Além disso, é necessário garantir que o sistema seja consistente e otimizado, e que atenda aos requisitos. Neste tutorial, demonstrarei técnicas de engenharia de sistemas usando o exemplo do projeto de um sistema de controle de acesso (ACS) bastante simples.
Formando a arquitetura inicial
Quando um sistema, seja ele qual for, está apenas começando a ser desenvolvido, retângulos com setas aparecem em nossas mentes ou no papel. Esses retângulos são componentes sistemas. E as setas são Conexões entre componentes. E, muitas vezes, não temos tempo para sentar e pensar em como todos os componentes que definimos funcionarão juntos, então acabamos criando um monte de gambiarras, inventando projetos redundantes.
É importante lembrar que, da perspectiva de um sistema e sua arquitetura, um componente é uma entidade bastante abstrata. Por exemplo, se nosso sistema possui um microcontrolador, no nível arquitetural, nos interessa apenas o fato de ser um microcontrolador, e não se é um STM32, Arduino ou Milandr. Além disso, muitas vezes nem sequer entendemos exatamente o que o sistema conterá, então recorremos à engenharia de sistemas para desenvolver os requisitos de hardware, software e assim por diante.
Para o nosso exemplo com o ACS, vamos tentar formular sua finalidade. Isso nos ajudará a identificar seus componentes. Então, a finalidade do ACS é permitir a entrada de um número limitado de pessoas em uma sala. Em outras palavras, é uma fechadura inteligente. Portanto, temos nosso primeiro componente — um dispositivo que tranca e destranca a porta! Vamos chamá-lo de [nome do componente]. Fechadura da porta
Como saber quando uma pessoa pode entrar? Não queremos que um segurança verifique seus passaportes, certo? Vamos fornecer cartões especiais com etiquetas RFID que registram IDs exclusivos ou outros dados que nos permitam identificá-las com precisão. Depois, precisaremos de algum tipo de dispositivo que possa ler essas etiquetas. Ótimo, temos mais um componente. Leitor RFID
Vamos dar mais uma olhada no que temos. Leitor RFID O sistema lê alguns dados, o sistema de controle de acesso processa essas informações e, com base nisso, algo é controlado. Fechadura da portaVamos à próxima pergunta: onde devemos armazenar a lista de pessoas com direitos de acesso? Um banco de dados é a melhor opção. Portanto, nosso sistema deve ser capaz de enviar solicitações e processar respostas do banco de dados. Assim, temos mais um componente – DBHandlerPortanto, temos uma descrição muito abstrata, mas suficiente, do sistema. Entendemos o que ele deve fazer e como funciona.
Em vez de uma folha de papel, usarei o System Composer, uma ferramenta dedicada à modelagem de arquiteturas de sistemas no Simulink, e criarei três componentes. Já descrevi as conexões entre esses componentes acima, então vamos conectá-los imediatamente:

Expandindo a arquitetura
Vamos analisar nosso diagrama. Parece bom, mas não é. Pense neste sistema da perspectiva do usuário: o usuário aproxima o cartão do leitor e...? Como o usuário sabe se o acesso foi permitido ou negado? Ele precisa ser notificado de alguma forma! Então, vamos adicionar mais um componente: uma notificação ao usuário. Notificação ao usuário:

Agora, vamos descer um nível de abstração. Vamos tentar descrever alguns componentes com um pouco mais de detalhes. Vamos começar com o componente. Leitor RFIDEm nosso sistema, este componente é responsável pela leitura de tags RFID. Sua saída deve conter alguns dados (UID, dados do usuário, etc.). Mas espere, RFID, assim como NFC, é essencialmente hardware, não software! Portanto, podemos assumir que temos um chip RFID separado que transmite dados brutos para algum pré-processador. Assim, temos um hardware abstrato que pode ler tags RFID e um software abstrato que pode converter os dados para o formato que precisamos. Vamos chamá-los de hardware e software. Sensor RFID и RFIDParser De acordo com isso, como posso exibir isso no System Composer? O componente pode ser removido? Leitor RFID E substituí-lo por dois componentes, mas é melhor não fazer isso, pois tornará a arquitetura menos legível. Em vez disso, vamos entrar no RFIDReader e adicionar dois novos componentes:

Ótimo, agora vamos passar para as notificações do usuário. Como o sistema notificará o usuário quando o acesso à sala for permitido ou negado? Os humanos percebem melhor sons e luzes piscantes. Portanto, podemos emitir um sinal sonoro para alertar o usuário e piscar um LED. Vamos adicionar os componentes apropriados para Notificação ao usuário:

Criamos a arquitetura do nosso sistema, mas algo está errado. O que está errado? Vamos analisar os nomes das conexões. Ônibus и OutBus — Esses não são nomes muito comuns que ajudariam o desenvolvedor. Eles precisam ser renomeados:

Então, analisamos a forma mais rudimentar de como os métodos de engenharia de sistemas são aplicados. Surge então a questão: por que usá-los? O sistema é primitivo e o trabalho parece desnecessário. Poderiam simplesmente ter começado a programar, projetar um banco de dados, escrever consultas ou soldar os componentes. O problema é que, sem pensar no sistema como um todo e entender como seus componentes se relacionam, a integração desses componentes será um processo longo e trabalhoso.
A principal conclusão desta seção é:
A utilização de métodos de engenharia de sistemas e modelagem de arquitetura no desenvolvimento de sistemas permite reduzir os custos de integração de componentes e melhorar a qualidade do sistema em desenvolvimento.
Fonte: habr.com
