• Nenhum resultado encontrado

A.1 Estudos primários versus ciclo de controle autônomo MAPE-K

4.5 Critérios Gerais de Projeto

4.5.1 Atributos de Qualidade

Durante o projeto de DSPLs, diversos atributos de qualidade podem ser considerados, sendo que doze foram analisados no contexto desta tese, detalhados a seguir.

Q1. Dinamicidade. A dinamicidade é a capacidade do sistema de sofrer alterações e se adaptar em tempo de execução. A dinamicidade pode ser medida como o grau de um sistema para se autoadaptar em tempo de execução, reagindo às mudanças previstas, previsíveis e imprevisíveis da maneira mais autônoma possível.

Figura 4.3: Atributos de qualidade dos subsistemas gestor e gerenciado.

Q2. Autonomia. A autonomia é o nível de intervenção externa durante a adaptação [13]. Os sistemas autônomos operam sem a intervenção direta de seres humanos ou de outros sistemas, além de possuir algum tipo de controle sobre as suas ações e sobre o seu estado interno [98].

Q3. Flexibilidade. A facilidade com que um sistema ou componente pode ser modifi- cado para uso em aplicações ou ambientes diferentes daqueles para os quais foi projetado especificamente é denominada de flexibilidade [103]. A flexibilidade pode ser considerada como um sinônimo de adaptabilidade [103], que é a medida em que um sistema de software se adapta às mudanças em seu ambiente [173].

Q4. Desempenho. O desempenho é o nível em que um sistema ou componente realiza suas funções designadas dentro de restrições específicas, como velocidade, precisão ou uso de memória [103]. O desempenho pode ser uma medida da capacidade de um sistema para executar suas funções, incluindo o tempo de resposta, a taxa de transferência e o número de transações por segundo [101]. Também é uma indicação da capacidade de resposta de um sistema para executar qualquer ação dentro de um determinado intervalo de tempo, podendo ser medido em termos de latência ou de taxa de transferência. A latência é o tempo necessário para responder a qualquer evento, enquanto que a taxa de transferência é o número de eventos que ocorrem em um determinado período de tempo.

Q5. Complexidade. A complexidade estabelece o nível de dificuldade de compreensão do projeto ou do código-fonte de um sistema, devido a numerosos componentes ou aos relacionamentos entre eles [103]. A complexidade está relacionada à exigência de recursos computacionais necessários para a solução de um problema, a medida que o problema cresce em número de variáveis [101]. O ciclo de controle autônomo e o padrão de adaptação são exemplos de técnicas para gerenciar a complexidade de sistemas dinâmicos [131].

Q6. Transparência. A transparência está relacionada ao fato de uma aplicação ou um sistema ter conhecimento da infraestrutura necessária para recomposição [126]. Di- ferentes graus de transparência determinam tanto a portabilidade da solução proposta em plataformas, quanto a facilidade com que é possível adicionar novos comportamentos adaptativos aos programas existentes [126].

Q7. Separação de Interesses. O princípio da “separação de interesses” tem sido utilizado por vários estilos arquiteturais para lidar com as complexidades que existem na definição e no uso de sistemas de software [182]. A separação de interesses pode ser entendida como o princípio de projeto de software em que o código-fonte é dividido em camadas e componentes, sendo que cada componente possui uma funcionalidade distinta com o mínimo de sobreposição possível.

Q8. Modularidade. A modularidade está relacionada ao nível em que um sistema ou programa de computador é composto de componentes discretos, de modo que uma mu- dança para um determinado componente tenha um impacto mínimo em outros componen- tes [103]. A modularidade é a capacidade de um sistema ser composto de componentes separados, intercambiáveis, sendo que cada um deles realiza uma determinada função, contendo tudo o que é necessário para tal. A modularidade aumenta a coesão, reduz o acoplamento, facilitando a ampliação da funcionalidade (modificação) e da manutenibi- lidade do sistema (capacidade de manutenção). A coesão é a maneira e o grau em que as tarefas realizadas por um único módulo de software estão relacionadas entre si [103]. Já o acoplamento é a maneira e o grau de interdependência entre os módulos de software [103].

Q9. Modificabilidade. A modificabilidade de um software refere-se ao nível de facili- dade para mudar o aplicativo para atender a novos requisitos funcionais e não funcionais [91]. A modificabilidade de um sistema está diretamente relacionada com sua modula- ridade e pode ser entendida como um atributo de qualidade de projeto que compõe a capacidade de manutenção.

Q10. Reusabilidade. O grau em que um artefato pode ser usado em mais de um sistema de software ou na construção de outros artefatos é chamado de reusabilidade [103]. Reusabilidade de software é o uso de artefatos de software existentes de alguma forma, durante o desenvolvimento de produtos de software. Reutilizar o código-fonte da lógica de adaptação deve ser possível, pois, ideologicamente, a lógica de adaptação deve ser definida independentemente da lógica do aplicativo, de modo que seus componentes possam ser reutilizados em domínios distintos.

Q11. Testabilidade. A testabilidade é o esforço necessário para testar um software [103]. A testabilidade refere-se à facilidade com que o software possa ser desenvolvido para demonstrar suas falhas através de testes (geralmente baseados em execução) [29]. Em geral, a testabilidade está relacionada com vários problemas estruturais do software, como [29]: a separação de interesses, o nível de documentação e o grau em que o sistema

usa informações internas. No mundo ideal, não deve ser difícil testar todos os cenários de adaptação de forma sistemática, porém a testabilidade é diretamente afetada pelo dina- mismo do sistema autoadaptativo, aumentando o grau de imprevisibilidade. Os sistemas não dinâmicos podem ser testados em tempo de projeto para reduzir a ocorrência de situ- ações imprevistas. Já os sistemas dinâmicos estão preparados para antecipar as mudanças que podem ocorrer em tempo de execução, que podem ter diferentes graus de antecipação [51]: previsto (tratado), previsível (planejado) e imprevisível (não planejado).

Q12. Confiabilidade. A confiabilidade é a capacidade do software de se manter em um nível esperado de desempenho, quando utilizado em determinadas condições [103]. A confiabilidade também está relacionada à habilidade de um sistema de permanecer em operação ao longo do tempo, além de como o sistema se comporta em circunstâncias vari- adas. A execução de testes e a correção de falhas resultam no aumento da confiabilidade do software.