# SysML

A linguagem SysML (Systems Modeling Language) é uma linguagem de modelagem de propósito geral para aplicação em engenharia de sistemas. SysML suporta a especificação, análise, design, verificação e validação de um amplo espectro de sistemas e sistemas de sistemas. SysML foi originalmente desenvolvida por um projeto de desenvolvimento de código aberto (open source), e inclui uma licença "open source" para utilização e distribuição. SysML é definido como uma extensão de um subconjunto da Unified Modeling Language (UML) usando o mecanismo de perfis do UML.

## Introdução

SysML oferece aos engenheiros de sistemas algumas melhorias dignas de referência, face ao UML, o qual tende a ser centrado no software. Estas melhorias incluem:
* A semântica do SysML é mais flexível e expressiva. SysML reduz as restrições do UML centradas no software e adiciona dois novos tipos de diagramas, diagrama de requisitos e paramétrico. O primeiro pode ser usado para engenharia de requisitos, enquanto o segundo pode ser usado para performance analysis e análise quantitativa. Como resultado destas melhorias, SysML é capaz de modelar uma grande variedade de sistemas, que podem incluir hardware, software, informação, processos, pessoal e instalações.
* SysML é uma linguagem menor e é mais fácil de aprender e aplicar. Como o SysML remove muitos dos construtores centrados no software do UML, a linguagem é globalmente menor tanto em tipos de diagramas como no total de construtores.
* As tabelas de alocação do SysML suportam vários tipos de alocação. Enquanto o UML fornece apenas suporte limitado para notações tabulares, o SysML fornece tabelas de alocação flexível que irão suportar alocação de requisitos, alocação funcional e alocação estrutural. Estas capacidades permitem automatizar a verificação e validação (V&V) e a "gap analysis".
* Os construtores de gestão de modelos do SysML suportam modelos, visualizações ("views"), e pontos de vista ("viewpoints"). Estes construtores expandem as capacidades do UML e estão arquitecturalmente alinhados com o IEEE-Std-1471-2000 (IEEE Recommended Practice for Architectural Description of Software Intensive Systems).
SysML reutiliza sete dos treze diagramas do UML 2 , e adiciona-lhe dois novos diagramas (diagramas de requisitos e paramétrico) para um total de nove tipos de diagramas. SysML também suporta tabelas de alocação, um formato tabular que pode ser dinamicamente derivado dos relacionamentos de alocação do SysML. Uma tabela que compara os diagramas do SysML e do UML 2 está disponível em SysML FAQ.
As vantagens do SysML sobre o UML para engenharia de sistemas torna-se óbvia se considerarmos um exemplo concreto, tal como a modelagem de um sistema automóvel. Com o SysML podemos usar o diagrama de Requisitos para capturar de modo eficiente os requisitos funcionais, de performance e de interface, enquanto com o UML estamos sujeitos às limitações dos diagramas de casos de uso para definir requisitos funcionais de alto nível. De igual modo, com o SysML pode-se usar diagramas paramétricos para de forma precisa definir as restrições quantitativas e de performance, tais como aceleração máxima, capacidade total do ar condicionado, etc.. O UML não fornece mecanismo direto para capturar este tipo de requisitos de performance essencial ou informação quantitativa.
Quanto ao resto do sistema automóvel, os melhorados diagrama de atividades e diagrama de máquina de estados, do SysML, podem ser usados para especificar a lógica de controle do software embutido (embedded software) e os fluxos de informação para os computadores de bordo dos automóveis. Outros diagramas estruturais e comportamentais do SysML podem ser usados para modelar fábricas que fabricam os automóveis, assim como as interfaces entre as organizações que trabalham nas fábricas.

## História

Em Janeiro de 2001, a iniciativa SysML originou uma decisão pelo Conselho Internacional de Engenharia de Sistema (INCOSE), grupo de trabalho de Desenho de Sistemas Guiados por Modelos, para customizar o UML para aplicações de engenharia de sistemas. Após esta decisão, o INCOSE e o Object Management Group (OMG), que mantém a especificação UML, conjuntamente criaram o grupo especial de interesse de Domínio de Engenharia de Sistemas (OMG Systems Engineering Domain Special Interest Group (SE DSIG)), em Julho de 2001. O 'SE DSIG', com o suporte do INCOSE e do grupo de trabalho ISO AP 233, desenvolveu os requisitos para a linguagem de modelação, a qual foi depois usada pela OMG como parte do Request for Proposal para o UML para Sistemas de Engenharia (UML for SE RFP; OMG document ad/3 de março de 1941) em Março de 2003.
Em 2003 Cris Kobryn e Sanford Friedenthal organizaram e co-chaired o Parceiros SysML (SysML Partners), uma associação informal de líderes da indústria e vendedores de ferramentas, que iniciou um projecto de especificação open source para desenvolver o SysML em resposta ao RFP para o UML for Systems Engineering. Os SysML Partners distribuiram os seus primeiros rascunhos com a especificação do SysML open source em 2004, e submeteram o SysML 1.0a à OMG para adopção da tecnologia em Novembro de 2005.

### OMG SysML

Após uma série de propostas concorrentes de especificações SysML, a SysML Merge Team foi proposta à OMG em Abril de 2006. Esta proposta foi votada e adoptada pela OMG em Julho de 2006 como OMG SysML, para a diferenciar da proposta open source original da qual foi derivada. Devido a ter sido derivadda de uma proposta open source (SysML), o OMG SysML também inclui uma licença open source para utilização e distribuição.
A especificação OMG SysML v. 1.0 foi emitida pela OMG como uma Available Specification em Setembro de 2007. A versão actual do OMG SysML é a v. 1.2, a qual foi publicada em Junho de 2010.

## Ferramentas

Há várias ferramentas de modelação disponíveis no mercado que suportam SysML. Outras estão em processo de actualização para ficarem de acordo com a especificação SysML da OMG. Listas de ferramentas cujos vendedores têm anunciado suporte a SysML ou à especificação SysML da OMG podem ser encontradas em SysML Forum ou OMG SysML, respectively.