UNIVERSIDADE FEDERAL DE PERNAMBUCO PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO CENTRO DE INFORMÁTICA Oberdan Alves de Almeida Junior Engenharia de Requisitos para Sistemas AutoAdaptativos Recife 2013 2 Oberdan Alves de Almeida Junior Engenharia de Requisitos para Sistemas AutoAdaptativos Monografia apresentada ao curso de Pós-Graduação em Ciência da Computação do Centro de Informática da UFPE. Orientador: Prof. Dr. Jaelson Castro. Recife 2013 3 Resumo Como consequência da continua evolução dos softwares é exigido que eles sejam mais versáteis, resilientes, robustos, recuperáveis, customizáveis, configuráveis e ainda auto-adaptáveis para se adequarem as mudanças de contexto, ambiente ou características do próprio sistema. Portanto, um sistema que é capaz de adaptar seu comportamento em resposta a alterações do ambiente e do próprio sistema tem se tornado um importante tópico de pesquisa na Engenharia de Requisitos. Este trabalho tem por objetivo fornecer ao leitor um panorama atual sobre algumas abordagens propostas por pesquisadores para a especificação e modelagem dos sistemas auto-adaptativos que estão sendo atualmente trabalhados no Brasil e no mundo. Palavras-chave: Sistemas auto-adaptativos, Monitoramento de requisitos, Engenharia de Requisitos. 4 Abstract As a result of the continuous evolution of the software is required for them to be more versatile, resilient, robust, recoverable, customizable, configurable and even self-adaptable to suit the changing context, environment or characteristics of the system itself. Therefore, a system that is able to adapt their behavior in response to changes in the environment and the system itself has become an important research topic in Requirements Engineering. This work aims to provide to the reader with a current overview of some approaches proposed by researchers for specifying and modeling self-adaptive systems that are currently being worked in Brazil and worldwide. Keywords: Self-adaptive systems, Requirements monitoring, Requirements Engineering. 5 Índice 1. Introdução .................................................................................... 7 1.1 Estrutura do trabalho...................................................................8 2. Sistemas Auto-Adaptativos............................................................... 9 3. Linha Base para o Desenvolvimento de Sistemas Auto-Adaptativos ........ 12 3.1 3.2 3.3 3.4 3.5 3.6 4. Engenharia de Requisitos Orientada a Objetivos – GORE .................... 12 Feedback Control Loop .............................................................. 14 Awareness Requirements ........................................................... 17 3.3.1 Padrões e Representação Gráfica ...................................... 22 Uncertainty ............................................................................ 23 Self-Explanations ..................................................................... 25 RELAX ................................................................................. 28 3.6.1 RELAX Vocabulary ........................................................ 29 Modelos para o Desenvolvimento de Sistemas Auto-Adaptativos ............ 32 4.1 4.2 4.3 Modelos Orientados a Requisitos.................................................. 32 4.1.1 Zanshin ...................................................................... 32 Modelos Orientados a Arquitetura ................................................. 34 4.2.1 Rainbow ..................................................................... 34 Derivação de Modelos ............................................................... 36 4.3.1 Derivação de Statecharts................................................. 37 5. Considerações Finais .................................................................... 39 6. Referências ................................................................................. 40 6 Índice de Figuras Figura 1: Exemplo modelo orientado a objetivos usando a abordagem i* (i-star). ....................................................................................................... 14 Figura 2: Controle do processo humano, exemplo de feedback loop. ............... 15 Figura 3: Modelo MAPE-Loop. ..................................................................... 16 Figura 4: Estados assumidos pelos requisitos. .............................................. 17 Figura 5: Exemplo de um sistema de Despacho de Ambulância. ..................... 18 Figura 6: Representação gráfica dos AwReqs................................................ 23 Figura 7: Exemplo de um modelo utilizando os AwReqs. ................................ 23 Figura 8: Modelo em i* (i-estrela) para um robô aspirador de pó. ................... 26 Figura 9: inclusão de uma claim “No Tripping Hazard" para quebrar o impasse entre os softgoals. ............................................................................. 26 Figura 10: Modelo de refinamento (CRM) para o robô aspirador de pó. ............ 27 Figura 11: Visão Geral da abordagem Zanshin.............................................. 33 Figura 12: Componentes do Framework Rainbow. ......................................... 35 Figura 13: Passos necessários para derivação do statechart. .......................... 38 Índice de Tabelas Tabela 1: Os diferentes tipos de AwReqs. .................................................... 19 Tabela 2: Operadores da Linguagem RELAX. ................................................ 30 7 1. Introdução Sistemas adaptativos são sistemas capazes de alterar o seu comportamento em resposta a mudanças de contexto, ambiente e em características do próprio sistema com o objetivo de cumprir a tarefa para qual foi designado. Esses sistemas conseguem mudar o seu comportamento em tempo de execução com o mínimo ou sem nenhuma intervenção humana, mesmo em ambientes dinâmicos. Os objetivos do sistema são monitorados e as falhas são tratadas com compensações ou atividades de recuperação. O sistema deve manter um conjunto de objetivos de alto nível que será satisfeito de acordo com o que foi definido pelas partes interessadas (stakeholders), os objetivos definidos deve, claro, respeitar as condições do ambiente em execução. Alguns objetivos não críticos podem ser “relaxados”, assim permitindo ao sistema um certo grau de flexibilidade durante ou após a adaptação [1]. Os requisitos para softwares auto-adaptativos devem refletir a incerteza sobre as condições do ambiente onde o software será implementado e também sobre a variabilidade do contexto operacional e as necessidades dos usuários. Os requisitos adaptativos envolvem a noção de variabilidade associada às funcionalidades ou restrição de qualidade do sistema [3]. A engenharia de requisitos para sistema auto-adaptativos é preocupada com o que um sistema deve fazer e dentro de que condições ele deve fazer o que se propõe, portanto a engenharia de requisitos deve endereçar que adaptações são possíveis e em que condições tais adaptações são percebidas. Algumas questões podem ser endereçadas pela engenharia de requisitos, como: Que aspectos do ambiente são importantes para adaptação? Quais requisitos são permitidos variar ou ser envolvidos em tempo de execução e quais devem ser mantidos? Em resumo, a engenharia de requisitos para sistemas auto-adaptativos deve estar preparada para enfrentar as incertezas, porque as informações sobre a futura execução no ambiente 8 estão incompletas e, portanto, os requisitos para o comportamento do sistema pode ser alterado em resposta as mudanças do ambiente. Várias abordagens foram e estão sendo propostas por pesquisadores da área de Engenharia de Software para o desenvolvimento de sistemas auto-adaptativos. Neste trabalho discutiremos algumas destas abordagens dando um foco na especificação e modelagem destes sistemas. 1.1 Estrutura do trabalho Este trabalho está dividido em seis capítulos. O primeiro é capítulo introdutório sobre sistema auto-adaptativo. No capítulo 2 definiremos o que é um sistema auto-adaptativo e discutiremos um pouco sobre o porquê e como desenvolver este tipo de sistema. No capítulo 3 abordaremos sobre a linha base para o desenvolvimento de sistemas auto-adaptativos, neste capítulo discutiremos os aspectos mais comuns e comentados sobre os sistemas auto-adaptativos aqui no Brasil e no mundo. No capítulo 4 abordaremos sobre os modelos orientados a requisitos e a arquitetura para auxiliar o desenvolvimento dos sistemas auto-adaptativos e como derivar os modelos (de requisitos para o de arquitetura), em seguida discutiremos o modelo de derivação de statecharts. No capítulo 5 apresentaremos as considerações finais e para finalizar, no capítulo 6 as referências bibliográficas deste trabalho. 9 2. Sistemas Auto-Adaptativos Um dos motivadores para o surgimento de uma nova abordagem da computação é o avanço tecnológico. Diferentes plataformas de hardware, dispositivos móveis e ambientes operacionais fizeram com o que os softwares se tornassem mais versáteis e pudessem reconhecer estas diferentes plataformas e ambientes. Os softwares tiveram que desenvolver as chamadas propriedades “auto*”, ou seja, auto-configuração, auto-recuperação, auto-otimização, auto-proteção e auto-gestão. Uma propriedade que é considerada transversal a estas é a autoadaptação. O sistema deve manter ainda a maior parte de sua complexidade escondida do usuário e administrador [3]. Uma decisão importante a ser tomada no momento da concepção de um software é se ele possui ou não características adaptativas, se estas características não forem detectadas, indicam fortemente que um sistema convencional e estático proverá uma solução mais adequada. A adaptação é uma estratégia que deve ser adotada pelo analista quando ele reconhece que seu modelo do ambiente não está totalmente “completo”, e isto pode não acontecer pela falta de conhecimento do ambiente onde o software será usado, e sim por causa da grande variabilidade encontrada no ambiente. Por exemplo, o desenvolvimento de um software para dispositivos móveis, inúmeros modelos de celular poderiam fazer uso do software sem que o analista precisasse conhecer todos os modelos. Algumas perguntas podem ajudar o analista a identificar os requisitos a ser implantado no sistema, como por exemplo: O quê (What) o sistema deve fazer e Como (How) deve ser feito. Por que (Why) o usuário precisa disso? E por que deste modo? Estas perguntas ajudam o analista a identificar os requisitos funcionais do sistema, as restrições de qualidade e as preferências, mas para desenvolver um software auto-adaptativo é preciso explicitar as alternativas na realização do objetivo, ou seja, a variabilidade em “O quê” e “Como”, o que pode ser reforçada 10 também por “Onde” (Where) e “Quando” (When) devido às características do ambiente operacional [3]. Existem duas classes não exclusivas de ambiente que ajuda o analista a identificar que o software tem características de um sistema auto-adaptativo. A primeira classe é onde os requisitos são uma consequência das mudanças do ambiente. Como por exemplo, um dispositivo móvel necessita de habilidade para adaptar de uma forma que consiga vantagens de novos serviços à medida que eles ficam disponíveis. A segunda classe é quando “as perdas e ganhos” (trade-offs) entre os requisitos não-funcionais (NFRs) variam de acordo com o contexto. A hipótese é que a segunda classe seja mais comum, mas também mais repentina e difícil de reconhecer. Por exemplo, no caso de dispositivo móvel, a escolha do serviço a ser utilizado pode ser minimizada pela preferência por certos provedores que talvez não estejam sempre disponíveis. Os trade-offs entre NFRs é uma chave importante que pode significar que a adaptação é necessária [11]. Um dos principais desafios que um sistema auto-adaptativo enfrenta é que quando desenhado não podemos assumir que todas as adaptações são conhecidas até o momento, e isto é difícil de antecipar, os requisitos para todo conjunto possível das condições do ambiente e sua respectiva especificação de adaptação. Como exemplo uma especificação pra prevenir cyber attacks, sempre estão especificando novos tipos de ataques e seria impossível prever todas as possibilidades [1]. Já Berry et al. [21] defende que um software que deve lidar com ambientes totalmente desconhecidos são o extremo na abordagem de sistemas autoadaptativos. O mais comum é a situação onde o ambiente é volátil, mas conhecido suficientemente bem para permitir que o analista possa antecipar como ele irá mudar (tarefa esta não muito trivial). Aqui, a abordagem defendida é para caracterizar o ambiente como um conjunto de domínios onde os objetivos do software podem transitar entre esses domínios. O trabalho do analista é então especificar cada alvo do sistema e a adaptação para cada cenário. Pimentel et al. em [15] discute os métodos de previsão propostos por vários autores, entre eles está o “Futures Wheel” que é um método de previsão que fornece 11 um modelo do futuro com base nas consequências de um evento ou uma tendência. É um método subjetivo e qualitativo, este método conta com a experiência e o conhecimento dos participantes. O método em si é constituído por duas etapas, o primeiro passo é identificar as tendências ou eventos que possam vir a ocorrer em um futuro próximo e que estejam relacionados com o domínio do problema. A tendência é algo que já começou e está cada vez mais forte, como "Uso de carro elétrico" ou "fluxo de vídeos ao vivo na Internet". Um evento futuro é simplesmente algo que se espera que aconteça - por exemplo, "Toda a população do País X terá acesso à Internet". O segundo passo é refinar o evento, acrescentando as suas consequências. Para cada evento, vamos perguntar: "Quais são os impactos ou consequências do evento?”. Então, para cada consequência devemos identificar as consequências secundárias, ou seja, as consequências das consequências, em seguida as consequências terciárias, e assim por diante. Sistemas auto-adaptativos é um tema muito pesquisado e provê vários benefícios, como por exemplo: redução de custo pela menor quantidade de manutenções; requer menos intervenção humana, pois de acordo com o que foi especificado o software pode alterar automaticamente seu comportamento; transparência em seu funcionamento, já que a sua complexidade é escondida para o usuário. Algumas características estão mais consolidadas e outras estão sendo propostas pela comunidade da Engenharia de Software, a seguir veremos algumas delas. 12 3. Linha Base para o Desenvolvimento de Sistemas AutoAdaptativos Existem alguns conceitos propostos ou defendidos pela comunidade da engenharia de requisitos que podemos ver comumente em vários artigos científicos [1] [3] [7] [8] [16] [18] escritos para sistemas auto-adaptativos. Vários desses conceitos formam a base para algumas das abordagens dos sistemas auto-adaptativos que estão sendo fortemente difundidas. Algumas destas abordagens já são bem consolidadas, como é o caso do GORE (a abordagem GORE não foi criada para sistemas auto-adaptativos, porém foi adotada pela comunidade por que ela oferece recursos importantes para o desenvolvimento de qualquer software) e do Feedback Control Loop, existem outras que estão sendo discutidas, como é o caso do Self-Explanation. Discutiremos a seguir algumas dessas abordagens. 3.1 Engenharia de Requisitos Orientada a Objetivos – GORE Engenharia de Requisitos Orientada a Objetivos (Goal-Oriented Requirements Engineering - GORE). GORE foi proposta e sua popularidade cresceu devido à inadequação das abordagens anteriores ao lidar com sistemas muito complexos. Estas abordagens não capturavam a lógica por trás dos requisitos que estavam sendo modelados, tornando-os, assim, difíceis para entender no que diz respeito às características de alto nível no domínio do problema [19] [22]. A maioria das técnicas se concentrava apenas na modelagem e especificação do software. Portanto, elas não tinham o suporte para a lógica sobre a composição do sistema, que compreende o sistema a ser construído e o seu ambiente. No entanto, suposições incorretas sobre o ambiente de um sistema são conhecidas por ser responsáveis por muitos erros nas especificações dos requisitos. Os requisitos não-funcionais também são, em geral, deixado de fora das especificações de um software. Além disso, 13 técnicas de modelagem e análise tradicionais não permitem configurações alternativas do sistema. É importante notar que o processo de elaboração de requisitos orientado a objetivos termina onde a maioria das técnicas de especificação tradicionais começaria. Em geral, GORE é focado nas atividades que antecedem a formulação de requisitos do sistema. As seguintes atividades principais estão normalmente presentes na abordagem GORE: elicitação de objetivo, refinamento de objetivos e vários tipos de análise de objetivos, e a atribuição de responsabilidade dos objetivos para os agentes. Um modelo de organização humana que vê os seres humanos e as organizações como entidades em busca do objetivo pode ser visto como a base para a modelagem de objetivo. Há várias definições de Objetivos na literatura da Engenharia de Requisitos. Por exemplo, Anton afirma que os “objetivos” são metas de alto nível da empresa, organização ou sistema; eles capturam as razões pelas quais é necessário um sistema e guia as decisões por vários níveis dentro da empresa [22]. Um aspecto importante da engenharia de requisitos é a análise de requisitos (qualidade) não-funcionais (NFRs). NFRs geralmente são representados em modelos da engenharia de requisitos por softgoals. Não há nenhuma condição de satisfação clara para um softgoal. Softgoals estão relacionados com a noção de satisfação, ao contrário de objetivos comuns, softgoals raramente podem ser ditos como realizáveis ou satisfeitos, para os softgoals é preciso encontrar soluções que sejam “suficientemente boas". Requisitos não-funcionais de alto nível são abundantes nas organizações e com bastante frequência o sucesso dos sistemas depende da satisfação destes requisitos. Os softgoals possuem links de contribuição qualitativos que pode ser de satisfação ou negação e possui quatro níveis de contribuição: quebra “break” (--), fere “hurt” (-), ajuda “help” (+) e faz “make” (++). 14 Engenharia de requisitos orientada a objetivos vê o sistema a ser construído e o seu ambiente como um conjunto de componentes ativos chamados agentes. Figura 1: Exemplo modelo orientado a objetivos usando a abordagem i* (i-star). 3.2 Feedback Control Loop Feedback control loop (iremos traduzir como ciclo de controle de retorno) considera os aspectos dinâmicos de um sistema, ele verifica a saída do sistema controlado e permite ajustar as operações de acordo com as diferenças entre os resultados reais e a saída desejada. Em outras palavras feedback control loops são entidades que observam o sistema e iniciam a adaptação, portanto, os especialistas de pesquisa atuais afirmam que feedback loops são essenciais para a compreensão de todos os tipos de sistemas adaptativos. Como feedback loop desempenha um papel importante quando descreve o comportamento dinâmico de sistemas auto-adaptativo, eles precisam se tornar visível e ser tratado como uma entidade de primeira classe durante a fase de design. Por exemplo, múltiplos feedback loops com objetivos contrários podem interferir uns aos outros de uma forma negativa ao interagir no mesmo ambiente. Este e outros 15 problemas devem se tornar visível o mais cedo possível para serem tratados de forma apropriada. Várias abordagens atuais de desenvolvimento de software tendem a concentrar-se na estrutura estática em vez dos aspectos dinâmicos quando constroem softwares auto-adaptativos. Para tratar feedback loop como uma entidade de primeira classe é necessário entender os conceitos e os problemas associados que podem aparecer durante o tempo de execução de sistemas. Como mostrado na figura 2 as características do feedback loops podem ser explicadas imaginando uma pessoa enchendo um copo de água a partir de uma torneira. Visando encher o copo até determinado nível, uma pessoa abre a torneira até uma certa posição (Faucet Position) (amarelo). Isto impacta o fluxo de água (Water Flow), resultando em um controle da força e do nível de água correspondente que está sendo observado (vermelho). Será feita uma análise (azul) para constatar a força, fluxo e o nível de água dentro do copo (Current Water Level), uma decisão deverá ser tomada a fim de fechar ou ajustar a torneira ou deixá-la como está quando o nível de água desejado (Desired Water Level) em mente for comparado com o nível de água real (Perceived Gap) (verde). Então, o ajuste da posição da torneira depois da observação do fluxo de água corrente e a tomada de uma determinada decisão podem ser visto como um feedback loop. Figura 2: Controle do processo humano, exemplo de feedback loop. 16 De um ponto de vista técnico, a pessoa pode ser vista como um sistema autoadaptativo que está interagindo com o ambiente (torneira) para alcançar um determinado objetivo (nível de água desejado). Alguns componentes (os olhos humanos) capturam o estado atual do meio ambiente (nível e fluxo de água) e passam as informações para um gerenciador autônomo (o cérebro). Esta unidade central é responsável por coletar/monitorar as informações, analisar, tomar decisões e controlar alguns componentes do sistema (a mão), a fim de interagir com o meio ambiente de uma maneira adequada (abrir ou fechar a torneira). Portanto, coletar informações, analisar, decidir e agir leva a um modelo de feedback loop mais genérico, conforme apresentado na figura 3 e definido melhor a seguir. Figura 3: Modelo MAPE-Loop. Um Monitor computacional reúne informações do sistema gerenciado e, possivelmente, do ambiente, a fim de atualizar um conjunto de modelos relevantes, fornecendo os cálculos subsequentes ao control loop com os dados necessários. Um Analisador computacional examina os dados anteriormente recolhidos pelo monitor, e com base nos objetivos de adaptação, tira conclusões sobre que medidas devem ser tomadas pelo sistema auto-adaptativo. Um Plano reúne uma série de ações de adaptação para resolver o problema identificado pela análise. Esse conjunto de ações para o sistema gerenciado é então executado por uma Execução computacional. Uma sequência simples destas quatro ações computacionais – Monitorar – Analisar – Planejar – Executar (Monitor-Analisar-Plan-Executar - MAPE) é a maneira mais óbvia de formar o control loop em um sistema auto-adaptativo [24]. 17 3.3 Awareness Requirements Awareness Requirements (traduzido como “Requisitos de “Percepção” em [6]) são requisitos que atestam sobre o sucesso ou o fracasso de outros requisitos. Geralmente, Awareness Requirements (AwReqs) atesta sobre os estados que os requisitos podem assumir em tempo de execução. A figura 4 mostra esses estados que, no contexto da estrutura de modelagem desenvolvida no exemplo do Despacho de Ambulância que veremos mais a frente, podem ser assumidos por objetivos, tarefas, suposições de domínios (Domains Assumptions – DAs), restrições de qualidade (Quality Constraint – QCs) e os próprios AwReqs. Quando um ator começa a buscar um requisito seu resultado ainda não está decidido. Eventualmente, o requisito terá sucesso ou falha. Para objetivos e tarefas também há um estado cancelado. Figura 4: Estados assumidos pelos requisitos. Restrições de Qualidade (QCs) são derivações feitas dos softgoals de uma forma que possam ser traduzidas em entidades perceptíveis e mensuráveis. Suposições de Domínio (DAs) indicam os estados do mundo que assumimos ser verdade, a fim de que o sistema funcione. Por exemplo, vamos supor que as redes de comunicação (telefone, internet, etc.) são fornecidas e funcionam corretamente. Se isso não for verdade, eventualmente não poderemos realizar ligações telefônicas. Para facilitar o entendimento sobre os AwReqs, iremos utilizar o exemplo do Despacho de Ambulância usado em [18]. A figura 5 mostra o modelo que foi feito 18 para o sistema Despacho de Ambulância utilizando uma abordagem orientada a objetivos (GORE). O objetivo principal do sistema é apoiar o despacho de ambulância. Os objetivos do sistema foram decomposto em refinamentos E / OU. Por exemplo, para receber uma “chamada de emergência” (Receive emergency call), devemos dar “entrada na informação” (Input emergency information), determinar a sua unicidade (Determine uniqueness of call) (pode ter havido outras chamadas para o mesmo caso de emergência), e em seguida enviar uma mensagem para os despachantes (Send to Despatchers), tudo partindo do pressuposto que "as redes de comunicação estão funcionando” (Communication networks working). Por outro lado, a atualização periódica do status de uma ambulância pode ser feita automaticamente ou manualmente. Os objetivos são decompostos até atingirem um nível de granularidade onde existam apenas tarefas que um ator (sistema ou humano) possa realizar. Na figura 5, os objetivos são representados como círculos ovais e as tarefas como hexágonos. Figura 5: Exemplo de um sistema de Despacho de Ambulância. Os softgoals (oriundos da abordagem GORE) são tipos especiais de objetivos que não têm critérios de satisfação claros. No exemplo, os stakeholders gostariam que: O despacho das ambulâncias fosse rápido, as chamadas fossem priorizadas e não ambíguas, e a seleção das ambulâncias fosse pela proximidade do local da 19 emergência. A realização de um softgoal pode ser estimada por meio de links de contribuição qualitativos. Por exemplo, a atualização de status da ambulância usando o sistema de software contribui positivamente (+) para a proximidade da ambulância ao local da emergência, porém utilizar a opção manual, ao invés da automática, contribui negativamente (-) para o mesmo critério. Contribuições podem existir entre quaisquer dois objetivos. A tabela 1 mostra alguns dos AwReqs que foram elicitados durante a análise do Sistema de Despacho de Ambulâncias. Estes exemplos são apresentados para ilustrar os diferentes tipos de AwReqs que são discutidos nos parágrafos seguintes e também alguns padrões que podem facilitar o seu levantamento. Tabela 1: Os diferentes tipos de AwReqs. AwReq AR1 Descrição “Entrada de Informações de Emergência” Tipo Padrão Regular NuncaFalhar(T-InputInfo) Aggregate TaxaSucesso(D- Nunca devem falhar. AR2 A “rede de comunicação” deve ter 99% de taxa de sucesso. AR3 “Buscar a chamada no banco de dados” CommNetsWork, 99%) Aggregate deve ter uma taxa de sucesso de 95% em TaxaSucesso(GSearchCallDB, 95%, 7d) relação ao período de uma semana. AR4 “O despacho de ambulância” deve falhar no Aggregate máximo uma vez por semana. AR5 “Chegada da ambulância” em 10 minutos 7d) Aggregate @daily SuccessRate(Q- deve ter sucesso em 60%, enquanto a Amb10min,60%) and chegada da ambulância em 15 minutos deve SuccessRate(Q-Amb15min, ter 80% de sucesso, medido diariamente. AR6 MaxFailure(G-DispatchAmb, 1, “Atualização das tarefas automaticamente” 80%) Aggregate deve ter 100 vezes mais sucesso do que ComparableSuccess(TUpdAuto,T-UpdManual, 100) manualmente. AR7 A taxa de sucesso de “Nenhuma Ambulância Trend Extra Necessária” para o mês não deve not TrendDecrease(QNoExtraAmb,30d, 2) diminuir, comparado com o mês anterior, duas vezes consequentemente. AR8 “Atualização da chegada ao local” deve ser Delta ComparableDelta(T- executada com sucesso dentro de 10 UpdArrSite,T-InformDriver, minutos da execução de sucesso da tarefa time, 10m) 20 “Informar ao Motorista” para a mesma chamada de emergência. AR9 Marcar como único ou duplicado deve ser Delta decidido em 5 minutos. AR10 AR3 deve ter 75% de taxa de sucesso no StateDelta(T-MarkUnique, Undecided, *, 5m) Meta SuccessRate(AR3, 75%, 30d) Meta NeverFail(AR5) período de um mês. AR11 AR5 nunca deve falhar. Podemos identificar uma série de tipos de AwReq. AR1 mostra a forma mais simples de AwReq: o requisito a que se refere nunca deve falhar. Considerando um sistema de controle, a entrada de referência é satisfazer o requisito. Se a saída real está nos dizendo que o requisito falhou, então o sistema de controle deve agir (compensar, reconciliar), a fim de trazer o sistema de volta a um estado aceitável. AR1 considera todas as instâncias do requisito referido. Uma instância de uma tarefa é criada toda vez que ela é executada e a restrição “nunca falhar” é então verificada para cada uma das instâncias. Da mesma forma, existem instâncias de um objetivo sempre que o objetivo precisa ser executado, enquanto os DAs e QCs são criados sempre que a sua verdade / falsidade precisam ser verificados no contexto da realização de um objetivo. Um AwReq agregado (aggregate) se refere a instância de outro requisito e impõe restrições em suas taxas de sucessos/falhas. Isto é, AR2 é o AwReq agregado mais simples: Ele solicita que o referido DA seja verdadeiro 99% do tempo que o objetivo “Receber Chamada de Emergência” é tentado ser realizado. AwReq agregado pode também especificar o período de tempo para considerar quando está agregando instâncias de requisitos (exemplo AR3). A frequência com que o requisito deve ser verificado é um parâmetro opcional para AwReqs. AR5 é um exemplo de um AwReq com especificação de intervalo de verificação. Outro padrão para agregação AwReq é a especificação do mínimo/máximo e sucesso/falha que um requisito é permitido ter (exemplo AR4). AwReq pode combinar diferentes requisitos, como AR5, que integra dois QCs com diferentes taxas. Um pode até mesmo comparar a contagem de sucesso de dois requisitos 21 (AR6). Isto captura uma propriedade desejada de um procedimento de seleção alternativo quando decidido em tempo de execução como realizar um objetivo. AR7 é um exemplo de uma tendência (trend) que compara a taxa de sucesso sobre um período. A tendência de um AwReq pode ser usada para marcar problemas de como a taxa de sucesso/falha é avaliada sobre o tempo. Delta AwReqs, por outro lado, pode ser usado para especificar um limite aceitável para o cumprimento dos requisitos, como o tempo de realização. AR8 especifica que a tarefa “Atualização da chegada ao local” (Update arrival at site) deve ser executada (execução finalizada completamente com sucesso) dentro de 10 minutos da execução da tarefa “Informar ao motorista” (Inform Driver). Isto significa que uma vez que o despachante tem informado onde é a emergência para o motorista da ambulância ela deverá chegar dentro de 10 minutos. Outro Delta AwReq, AR9, mostra como não podemos falar somente sobre sucesso ou falha dos requisitos, mas também sobre mudanças dos estados. Na realidade, quando dizemos que um requisito “deve ter sucesso ou não (falha)” queremos dizer que ele “não deve transitar entre a indecisão de sucesso ou falha”. AR9 ilustra ainda outro caso: a tarefa “Marcar como único ou duplicado” (Mark as unique or duplicate) deve ser decidida, isto é, deve abandonar o estado de indecisão dentro de 5 minutos. Em outras palavras, independentemente se eles tiveram sucesso ou falha, os operadores devem não desperdiçar mais de 5 minutos decidindo se uma chamada é ambígua ou não. Finalmente, AR10 e AR11 são exemplos de meta-AwReqs: AwReqs que se referem a outros AwReqs. Uma motivação para meta-AwReqs é a aplicação de uma gradual ação de reconciliação/compensação. Este é o caso do AR10: Se AR3 falhar, AR10 deve marcar a chamada como “possivelmente ambígua” (reconciliando AR3), mas se a taxa de sucesso de AR3 considerando todo o mês for menor que 75%, uma profunda analise de procura de problemas no Banco de dados deve ser executada para verificar se o banco está em ordem (reconciliando AR10). Outro caso útil para meta-AwReqs é evitar a execução de ações específicas de reconciliação / compensação muitas vezes. Por exemplo, AR5 afirma que 60% 22 das ambulâncias deve chegar em até 10 minutos e 80% em até 15 minutos e para reconciliar devemos acionar mensagens para todos os usuários dos sistema. Para evitar o envio de mensagens repetidas em caso de falha novamente, AR11 monitora AR5 com a afirmação de que ela nunca deve falhar e, no caso de isso acontecer, sua reconciliação diminui os percentuais da AR5 por 10% (50% e 70%, respectivamente), o que significa que uma nova mensagem será enviada somente se o desempenho de resposta de emergência for pior. Se o envio da mensagem for evitado duas vezes por mês, a reconciliação da AR11 poderia ser, por exemplo, a desativação AR5 para o mês corrente. 3.3.1 Padrões e Representação Gráfica Formalizar AwReqs não é uma tarefa trivial. Por esta razão, foram propostos padrões AwReq para facilitar a sua elicitação e análise e uma representação gráfica que nos permita incluí-las no modelo de objetivo, melhorando a comunicação entre os analistas de sistemas e designers. A última coluna da tabela 1 mostra os padrões para cada um dos AwReqs considerados em nosso exemplo. A lista dos padrões mostrados na tabela não está de forma exaustiva e cada organização é livre para definir seus próprios padrões. Ao usar tais padrões criamos um vocabulário comum para os analistas e ferramentas de geração de código poderiam ser fornecidas para escrever automaticamente AwReqs na língua escolhida. Para o exemplo que trabalhamos a notação é exibida na figura 6 e 7. AwReqs são representados por círculos espessos com setas apontando para o elemento para o qual eles se referem e o padrão AwReq além dele. 23 Figura 6: Representação gráfica dos AwReqs. Figura 7: Exemplo de um modelo utilizando os AwReqs. 3.4 Uncertainty Em geral, no campo da engenharia de software, a incerteza (uncertainty) é considerada como um conceito de segunda ordem. Um equívoco comum é que, por um conjunto de práticas o efeito da incerteza pode ser removido para permitir focar no comportamento "normal". Embora, em geral, isso seja verdade, mais informações diminui a quantidade de incerteza, é tipicamente impossível eliminar completamente a incerteza uma vez que não é prático nem desejável coletar todas as informações sobre um sistema. A Engenharia de software auto-adaptativo não é exceção, enquanto o nível de incerteza pode variar, raramente é o caso de um sistema de software auto-adaptativo ser completamente livre de incerteza [25]. 24 A incerteza pode ser observada em todos os aspectos da adaptação, embora em graus variáveis. Por exemplo, uma das razões por trás da incerteza é o fato de que, o usuário, a lógica de adaptação e a lógica de negócios do sistema são fracamente acoplados, introduzindo inúmeras fontes de incerteza. Considere que os usuários muitas vezes tem dificuldade em expressar com precisão as suas preferências de qualidade. Acreditamos que, considerando a incerteza como um conceito de primeira classe melhora a qualidade ou, às vezes, até mesmo corrige as decisões de adaptação. Apesar do fato de que a incerteza está predominante em sistemas de software auto-adaptativo, muitas vezes ela é considerada de forma ad hoc (criada especificamente para cada caso). Uma razão para isso é que o termo incerteza é um conceito vagamente entendido na comunidade acadêmica, pois há muitas fontes de incerteza e nem todas as fontes têm características semelhantes. Algumas fontes de incerteza são externas, enquanto outras são internas. Incerteza externa surge a partir do ambiente ou domínio no qual o software é implantado. Por exemplo, a incerteza externa para um sistema de software implementado em um veículo não tripulado pode incluir a possibilidade de determinadas condições meteorológicas que ocorrem. Software auto-adaptativo é uma abordagem para lidar com efeitos da incerteza externa, por exemplo, em uma tempestade de neve o componente de navegação de um veículo pode ser alterado para navegar de uma forma mais conservadora para evitar uma colisão. Por outro lado, a incerteza interna está enraizada na dificuldade de determinar o impacto da adaptação sobre os objetivos de qualidade do sistema, por exemplo, determinar o impacto da substituição de um componente de software na capacidade de resposta do sistema, o uso da bateria, etc. Além disso, nem todas as fontes de incerteza têm características semelhantes. Às vezes, a incerteza é devido à falta de conhecimento, enquanto outras vezes é devido à variação em um parâmetro que afeta as decisões de adaptação (adaptação de parâmetros). As técnicas utilizadas para atenuar um tipo de incerteza podem ser diferentes de outras técnicas utilizadas para atenuar outros tipos. 25 A incerteza na natureza do meio ambiente operacional pode fazer com que o comportamento dos sistemas auto-adaptativos não seja previsto com precisão. Um sistema cujo comportamento não pode ser previsto com precisão pode trazer sérios problemas em termos de segurança e aceitação. O comportamento de um sistema auto-adaptativo é melhor explicado em termos de satisfação dos seus requisitos. 3.5 Self-Explanations Self-Explanations (Auto-Explicações) pode ser considerado um aspecto desejado em um sistema, ele fornece ao sistema a capacidade de registrar e explicar determinados comportamentos adotados. Self-Explanation compreensíveis são difíceis de produzir, com vários desafios para os desenvolvedores criarem facilmente tais funcionalidades: Em primeiro lugar, a habilidade de explicar o comportamento depende de uma capacidade de monitoramento, introspecção e de raciocínio sobre o comportamento atual e passado do sistema. Em segundo lugar, as explicações precisam ser criadas em um nível suficientemente elevado para ser compreensível pelos stakeholders. Em terceiro lugar, self-explanations para ser confiável, um sistema autoadaptativo deve ser capaz de rastrear a partir dos objetivos até o código para manter um link sincronizado entre requisitos e a arquitetura durante a execução. E por último, um sistema auto-adaptativo deve ser capaz de reproduzir a história de rastreamento das adaptações que tem sido realizada de uma maneira que seja clara para apoiar self-explanations. Considere o exemplo de um robô aspirador de pó que é utilizado para limpar apartamentos domésticos (Clean Apartment). O robô utiliza a auto-adaptação para equilibrar os requisitos não-funcionais conflitantes: “evitar causar acidente” (Avoid Tripping Hazard) para as pessoas dentro do apartamento e ser “econômico no consumo de energia” (Minimise Energy Costs). O robô suporta dois modos de 26 operação: “limpar durante a noite” (Clean at Night) e “limpar quando vazio” (Clean when Empty). Para ilustrar os requisitos não-funcionais é utilizada a abordagem i* (i-estrela). Figura 8: Modelo em i* (i-estrela) para um robô aspirador de pó. Como podemos notar na figura 8 há um impasse na realização dos objetivos “Clean at Night” e “Clean when Empty”, ambos contribuem negativamente (Hurt) e positivamente (Help) para a realização dos requisitos não-funcionais “Avoid Tripping Hazard” e “Minimise Energy Costs”. Para acabar com o impasse é feita uma suposição (claim) de que “não há risco de acidente” (No Tripping Hazard) como mostrado na figura 9. Figura 9: inclusão de uma claim “No Tripping Hazard" para quebrar o impasse entre os softgoals. 27 Embora admitindo que o risco de tropeço representa um risco real, a ação é uma maneira conveniente em quebrar o impasse no modelo de objetivos, a suposição é uma mera conjectura e seria difícil de verificar na fase de design. Assim, é fornecido para o robô um meio de verificar a suposição em tempo de execução usando monitoramento. A ampla natureza da suposição “No tripping hazard" torna difícil um mecanismo de acompanhamento adequado, por isso é utilizado um modelo de refinamento (Claim Refinement Model – CRM) para decompor a suposição hierarquicamente em suposições subjacentes. Há quatro sub-suposições organizadas em dois ramos com AND (“E”) (claims também podem ser OR - “OU”). Juntos, os ramos ilustram a razão por que a alegação raiz deve permanecer. Neste caso, "No tripping hazard" permanece verdadeira se “não há ninguém na sala” (empty room) em que o robô aspirador de pó estiver funcionando e “nenhum impacto externo” (no foot impact). Figura 10: Modelo de refinamento (CRM) para o robô aspirador de pó. As demais suposições do modelo CRM, “nível de luz constante" (light level constant) e "nenhum choque detectado" (no shock detected) devem ser diretamente monitorados via eventos ou dados estatísticos recolhidos pelo sistema. Se uma das suposições se tornar falsa, por exemplo, se o sensor do robô detectar um choque externo, então, a falsidade da suposição se propagaria em direção à suposição raiz (neste modelo CRM seria a suposição “sem risco de tropeço” - no tripping hazard), então a suposição se tornaria falsa. Do mesmo modo, um aumento repentino no nível de luz indica que uma luz foi acesa por um ocupante. 28 Com um meio de verificação em tempo de execução para a hipótese “No tripping hazard" ter sido satisfeita, o robô aspirador de pó pode usar a estratégia limpar durante a noite, a menos que um choque seja detectado ou uma luz é ligada, neste caso o robô deve auto-adaptar e usar a estratégia limpar quando estiver vazio. No entanto, depois de ter estado em funcionamento há algum tempo, os donos do robô notaram que ele está consumindo mais do que o esperado. A capacidade de self-explanation significaria que o aspirador de pó poderia explicar que foi necessário limpar durante o dia, porque os ocupantes frequentemente acordavam e acendiam as luzes durante a noite. Os donos entenderam a razão pela qual o robô tomou certa decisão, mas estão insatisfeitos porque o custo ficou muito alto. Então eles enviaram uma solicitação de mudança para o desenvolvedor para que o robô fosse alterado para que ele só adotasse a estratégia de limpar quando estiver vazio se a tentativa de limpeza de duas noites consecutivas fosse interrompida. Isoladamente, o pedido de mudança pode parecer sem importância para os desenvolvedores, especialmente se o pedido de alteração foi escasso de explicações. Para contextualizar o pedido, eles questionaram o aspirador de pó para determinar seu histórico de operação, com especial atenção à sua história de auto-adaptação A auto-explicação é importante porque fornece um meio para aumentar a confiança e resolver questões sobre o comportamento de um sistema autoadaptativo por seus usuários. A auto-explicação também pode ajudar os desenvolvedores no entendimento do comportamento de um sistema autoadaptativo, realizando um rastreamento do comportamento observado em tempo de execução para as suposições feitas em tempo de design [7]. 3.6 RELAX RELAX é uma linguagem natural estruturada que inclui operadores projetados especificamente para capturar a incerteza. O foco em RELAX é sobre os requisitos estruturados em linguagem natural. Normalmente, os requisitos textuais prescrevem o comportamento usando um verbo modal, como “SHALL” ou “Will” (deve) que define ações ou funcionalidades que um sistema deve sempre proporcionar. Para os 29 sistemas auto-adaptativos, no entanto, a incerteza do ambiente pode significar que nem sempre é possível atingir todas as declarações SHALL ou as incertezas comportamentais pode permitir trocas entre declarações SHALL para “relaxar” declarações não-críticas em favor de outras mais críticas. Os operadores RELAX são projetados para permitir que os engenheiros de requisitos possam identificar explicitamente os requisitos que nunca deve mudar (invariantes), bem como os requisitos que um sistema pode relaxar temporariamente sob certas condições. RELAX também pode ser usado para especificar restrições sobre a forma como esses requisitos podem ser relaxados. 3.6.1 RELAX Vocabulary A tabela 2 traz o conjunto de operadores RELAX, organizados em modal, temporal, operador ordinal e fatores de incerteza. Note que RELAX inclui operadores padrões da lógica temporal, como, “Eventualmente” (Eventually), e “Até” (Until). Cada um dos operadores RELAX definem restrições sobre como um requisito pode ser “relaxado” em tempo de execução. Além disso, é importante indicar que fatores de incerteza garante um abrandamento destas exigências, requerendo, assim, um comportamento adaptativo. Esta informação é especificada usando as palavras chaves: MON - Monitor (monitor), ENV - Environment (ambiente), REL Relationship (relacionamento) e DEP - Dependency (dependência). As propriedades do ambiente capturam o "estado do mundo", ou seja, as características do contexto de operação do sistema. Muitas vezes, no entanto, as propriedades ambientais não podem ser monitoradas diretamente porque elas não são observáveis. A palavra chave “MON” é usada para definir as propriedades que são diretamente observáveis e que podem contribuir para a informação no sentido de determinar o estado do ambiente. RELAX é utilizado na fase de requisitos do software, uma vez que as restrições de hardware já foram definidas. Em particular, os sensores físicos (denotados por MON) são assumidos como conhecido. 30 Tabela 2: Operadores da Linguagem RELAX. Operadores RELAX Descrição Operadores Modais SHALL Um requisito deve permanecer ativo MAY ... OR Um requisito especifica uma ou mais alternativas Operadores Temporais Eventually Um requisito deve permanecer eventualmente Until Um requisito deve permanecer até uma futura posição Um requisito deve permanecer antes ou após um evento Before, After particular Um requisito deve permanecer durante um particular intervalo In de tempo Um requisito especifica algo que deve permanecer o mais rápido As Early, Late as Possible possível ou deve ser atrasado tanto quanto possível As Close as Possible to Um requisito especifica algo que acontece repetidamente, mas a [frequência] frequência pode ser relaxada Operadores Ordinais As Close as Possible to Um requisito especifica uma quantidade contável, mas o [quantidade] número exato pode ser relaxado Um requisito especifica uma quantidade contável, mas o As Many, Few as Possible número exato pode ser relaxado Fatores de Incertezas Define um conjunto de propriedades que explicam o ambiente ENV do sistema Define um conjunto de propriedades que podem ser MON monitorados pelo sistema REL Define a relação entre as propriedades ENV e MON Identifica as dependências entre os requisitos (relaxados e DEP invariantes) A palavra chave “REL” é usada para especificar de que forma “os dados observáveis” (fornecidos pelo MON) podem ser utilizados para obter informações 31 sobre o ambiente (fornecidos por ENV). A distinção entre ENV e MON é explicado pela Teoria de controle na qual os parâmetros a serem estimados podem não necessariamente ser observados diretamente. “REL” é usado para definir a forma de calcular a posição das medições de distância. Finalmente requisitos de dependências são delimitados por “DEP”, pois são importantes para avaliar o impacto sobre os requisitos dependentes após o “relaxamento” de um determinado requisito. 32 4. Modelos para o Desenvolvimento de Sistemas AutoAdaptativos Entre as muitas propostas destinadas a orientar os analistas e desenvolvedores na construção de sistemas auto-adaptativos, algumas focam em modelos arquiteturais que capturam variabilidade da arquitetura e apoiam as reconfigurações arquiteturais propagando os efeitos para o sistema real em resposta a determinadas situações. Em vez disso, outras abordagens, defendem o uso de modelos de requisitos para capturar a variabilidade e o suporte de adaptação [16]. 4.1 Modelos Orientados a Requisitos Modelos baseados em requisitos estendem as técnicas da engenharia de requisitos, a fim de representar os requisitos de adaptação e/ou a incerteza inerente ao ambiente em que o sistema opera. Estas abordagens podem ou não incluir mecanismos de percepção (awareness), de tempo de execução e os frameworks que operacionalizam os requisitos de adaptação, uma vez que eles se concentram em capturar e analisar o problema em vez da implementação de soluções. 4.1.1 Zanshin Zanshin é um método e um framework baseado em Engenharia de Requisitos para a construção de sistemas que explora conceitos da Teoria de Controle (Control Theory) para projetar sistemas de software adaptativos. Uma visão geral da abordagem é mostrada na figura 11. 33 Figura 11: Visão Geral da abordagem Zanshin. A abordagem é dividida em duas etapas principais que estendem "Vanilla" a Engenharia de Requisitos Orientada a Objetivos (Goal-Oriented Requirements Engineering - GORE) com técnicas de Engenharia de Requisitos (ER) que são designadas especificamente com os requisitos de adaptação. Inspirado pela Teoria de Controle, Zanshin suporta Sistema de Identificação (System Identification) para o sistema de destino, a fim de identificar: (a) indicadores importantes e os respectivos valores que o sistema deve se esforçar para manter, (b) os parâmetros que podem ser ajustados em tempo de execução para mudar o comportamento do sistema; e (c) como a alteração de parâmetros afeta o valor dos indicadores [13]. Indicadores são limitados por requisitos de percepção (Awareness Requirements – AwReqs. AwReqs representam situações em que os stakeholders gostariam que o sistema se adaptasse. Dessa forma, eles constituem os requisitos para o componente de monitoramento (feedback loop) que implementa as capacidades adaptativas do sistema. Os parâmetros podem assumir dois estados: Pontos de Variação (Variation Points), que são refinamentos OU (OR) já presentes nos modelos orientados a objetivos, e Variáveis de Controle (Control Variables) que são abstrações sobre os refinamentos OU que são muito complexos ou entediantes para modelar. A Especificação da Estratégia (Strategy Specification) concentra-se na parte de adaptação do feedback loop. Seu objetivo é associar uma ou mais estratégias de 34 adaptação (por exemplo, "repetir / delegar uma tarefa", "relaxe um requisito", etc.) a cada AwReq, a fim de tê-los executados em caso de uma falha em tempo de execução. Estas estratégias devem também ser obtidas a partir dos stakeholders e são representados pela Evolução de Requisitos (Evolution Requirements EvoReqs). EvoReqs prescrevem como outros requisitos do modelo deve evoluir em resposta a uma falha AwReq, e são especificados usando um conjunto de operações primitivas, em que cada uma está associada a ações de aplicações específicas a serem implementadas no sistema. Uma estratégia em particular, a Estratégia de Reconfiguração (Reconfiguration Strategy) utiliza as informações solicitadas durante a Identificação do Sistema para reconfigurar o sistema, permitindo também que os designers especifiquem diferentes algoritmos de reconfiguração, dependendo da quantidade de informação disponível. 4.2 Modelos Orientados a Arquitetura Modelos baseados em arquitetura concentram-se em ajudar os designers a construir arquiteturas que suportam a adaptação. Eles costumam propor a utilização de um modelo de arquitetura que mostram os componentes do sistema e como eles se comunicam entre si através de conectores. Essas propostas incluem geralmente a infraestrutura do software em tempo de execução sobre a qual é construído o sistema adaptativo, com atenção nas regras de adaptação e como evoluir os modelos. 4.2.1 Rainbow O framework Rainbow é uma abordagem baseada em arquitetura para a construção de sistemas adaptativos. De acordo com a proposta, as regras de adaptação são usadas para monitorar as condições operacionais do sistema e definir ações a serem tomadas se as condições forem desfavoráveis. Por exemplo, dado um site de notícias, se os tempos de respostas medidos são muito altos, ações como ativar mais servidores ou mudar do modo multimídia para o modo textual pode ser executado para tentar melhorar o tempo de resposta. A figura 12 mostra elementos que compõe o framework Rainbow. 35 Figura 12: Componentes do Framework Rainbow. O monitoramento é feito com um conjunto de sondas (Probes) implantadas no sistema de destino (Target System), que enviam observações para os medidores (Gauges) que interpretam as medições das sondas em termos de modelos de alto nível. O Gerenciador de Modelo (Model Manager) é responsável por rastrear as mudanças dos estados do modelo e mantê-lo consistente com o sistema. Além disso, outros componentes consultam o gerenciador para obter informações sobre o estado atual do modelo. Outro componente é o Avaliador de Arquitetura (Architecture Evaluator) que detecta alterações das propriedades da arquitetura do sistema e do ambiente, validando tais modificações no que diz respeito às restrições indicadas no modelo. No caso de uma violação, ele aciona o Gerenciador de Adaptação (Adaptation Manager) para que ele possa selecionar a estratégia mais adequada, utilizando Teoria da Utilidade (Utility Theory) para a decisão. Finalmente, o Executor de Estratégia (Strategy Executor) coordena o processo de execução, decidindo quais os operadores devem ser aplicados através dos “Efetores” (Effectors) na camada do sistema (System Layer). 36 Para a parte final do ciclo de adaptação, Rainbow usa uma linguagem chamada Stitch, que captura o conhecimento da rotina de adaptação humana como políticas de adaptação explícitas. A linguagem permite que os designers especifique o quê, quando e como adaptar, automatizando assim o processo de adaptação. 4.3 Derivação de Modelos Através da realização de um estudo comparativo, os autores em [9] concluíram que as abordagens baseadas em requisitos e arquitetura para softwares adaptativos compartilham elementos comuns, tais como o uso de feedback loops e de mecanismos de controle. No entanto, existem diferenças que revelam vantagens e desvantagens das duas abordagens. Os autores propõe uma metodologia de orientação para derivar modelos de arquitetura a partir do modelo de requisitos. Este esforço resultaria em uma especificação mais apropriada para um sistema de software adaptativo, uma vez que todo o espectro da sua variabilidade operacional seria representado, portanto, o sistema teria a máxima variedade de alternativas quando tem que lidar com falhas ou alterações do ambiente. Derivação Arquitetural está preocupada com a geração de modelos de arquitetura, que podem incluir: componentes e modelos de conectores para descrever a estrutura do sistema; statecharts (diagramas de estados) para descrever o comportamento do sistema; modelo de features (características) para expressar a variabilidade do sistema, e assim por diante. Estes diferentes modelos são complementares, cada um captura uma visão particular do sistema que está sendo projetado. Assim, diferentes abordagens são requeridas a fim de derivar os diferentes modelos. Quando se considera a derivação de arquitetura e suas decisões de design para o caso particular de sistemas adaptativos, há três preocupações que devem ser consideradas: a) Variabilidade adicional - pode haver diferentes alternativas para realizar uma determinada tarefa. Por exemplo, algoritmos diferentes podem 37 ser utilizados para marcar uma reunião automaticamente, cada um com as suas diferentes vantagens e desvantagens. As alternativas identificadas durante a derivação da arquitetura irá expandir o espaço de possibilidades de adaptação. b) Elementos de controle adicionais - além de se referir aos conceitos de requisitos, elementos Zanshin (como AwReqs e Variáveis de controle) também podem referir-se e influenciar as elementos da arquitetura. Por exemplo, o intervalo de tempo cronometrado para uma transição pode ser definido como uma variável de controle, em vez de um pré-definido intervalo estático. c) Os recursos adicionais para apoiar a adaptação - o apoio da auto-adaptação pode exigir a inclusão de novas funcionalidades no sistema. Este é o caso, por exemplo, quando o sistema requer algum tipo de instrumentação de forma a monitorar a satisfação dos AwReqs. 4.3.1 Derivação de Statecharts O processo para derivar statecharts (gráfico de estados) de modelos de requisitos compreende seis passos, ilustrados na figura 13. O primeiro passo, “Delegar tarefas” (Delegate tasks), consiste em atribuir as tarefas que não serão executadas nem suportadas pelo sistema adequadamente - por exemplo, as tarefas que serão executadas por um agente externo (humanos ou não). Uma vez que estas funções não são realizadas pelo próprio sistema de software, elas não devem ser consideradas durante o restante do processo. No passo seguinte, “Definir fluxo básico” (Define basic flow), o arquiteto analisa todos os refinamentos do modelo de objetivos e define uma expressão de fluxo para cada um. Estas expressões de fluxo serão usadas no próximo passo, “Gerar base do statechart” (Generate base statechart), para criar um esqueleto. Uma vez que estas expressões não são tão significativas quanto statecharts (embora rico o suficiente para definir o fluxo básico), e podem ser incluídas como anotações em um modelo objetivo, elas são uma abstração intermediária útil entre os modelos de requisitos e statecharts. 38 Figura 13: Passos necessários para derivação do statechart. Nos passos restantes do statechart será refinado como se segue. Primeiro, durante o passo “Especificar transições” (Specify transitions) o arquiteto define os eventos e condições das transições derivadas. Em seguida, o statechart é “enriquecido para descrever o comportamento de adaptabilidade do sistema” (Improve requirements), incluindo a interação com um componente externo que fornece funcionalidade relacionada à adaptação. Isto ocorre durante a fase “Especificar o comportamento adaptativo” (Specify adaptive behavior). Como último passo, a fase “Realizar mais refinamentos” (Perform further refinements) permite ao arquiteto expandir o modelo para incluir detalhes técnicos e outros aspectos que podem não ter sido tratados anteriormente, explorando o conceito de sub-estados. 39 5. Considerações Finais A ideia e a necessidade de um sistema auto-adaptativo não é nova [12]. A grande diversidade de hardware e software dentro ou fora de uma empresa em que um sistema tem de interagir é enorme. Cada vez que um sistema se deparava com um cenário diferente (hardware de diferentes plataformas, software em diversas linguagens) os desenvolvedores tinham que customiza-lo para que ele pudesse funcionar naquele ambiente. Isso trazia e ainda traz grande custo para as empresas. A incerteza parece ser a chave principal da abordagem de sistemas autoadaptativos. O profissional que deseja desenvolver um sistema auto-adaptativo precisa trabalhar com a incerteza do ambiente no qual o software será implantado, desta forma ele pensará nos elementos que o software deve ter pra tentar atender um ambiente não completamente conhecido. A fase atual da abordagem de sistemas auto-adaptativo está bem avançada, mas ainda é preciso padronizar alguns aspectos e comprovar a eficácia de outros para que assim a abordagem seja utilizada por todos os profissionais que tenham a necessidade de um sistema com características auto-adaptativas. Neste trabalho discutimos sobre os sistemas auto-adaptativos, definimos o que seria um sistema auto-adaptativo e o porquê desenvolver este tipo de sistema. Em seguida abordamos os principais aspectos que foram e estão sendo amplamente discutidos e preconizados pela comunidade de Engenharia de Software aqui no Brasil e no mundo, entre estes aspectos podemos citar: feedback control loop, awareness requirement, uncertainty e etc. Outro importante tópico abordado foram os modelos de requisitos e de arquitetura que estão sendo propostos para auxiliar o desenvolvimento dos sistemas auto-adaptativos, discutimos sobre o Zanshin (modelo orientado a requisitos) e o Rainbow (modelo orientado a arquitetura). Para finalizar abordamos como realizar a derivação destes modelos através dos trabalhos propostos por pesquisadores da área [16] [17]. 40 6. Referências [1] B. H. C. Cheng et al., “Software Engineering for Self-Adaptive Systems: A Research Roadmap,” in Software Engineering for Self-Adaptive Systems, ser. Lecture Notes in Computer Science, B. H. C. Cheng, R. de Lemos, H. Giese,P. Inverardi, and J. Magee, Eds. Springer, 2009, vol. 5525,pp. 1–26. [2] Lemos, R.d., Giese, H., Muller, H.A., Shaw, M., Andersson, J., Baresi, L., Becker, B., Bencomo, N., Brun, Y., Cikic, B., Desmarais, R., Dustdar, S., Engels, G., Geihs, K., Goeschka, K.M., Gorla, A., Grassi, V., Inverardi, P., Karsai, G., Kramer, J., Litoiu, M., Lopes, A., Magee, J., Malek, S., Mankovskii, S., Mirandola, R., Mylopoulos, J., Nierstrasz, O., Pezze, M., Prehofer, C., Schafer, W., Schlichting, W., Schmerl, B., Smith, D.B., Sousa, J.P., Tamura, G., Tahvildari, L., Villegas, N.M., Vogel, T., Weyns, D., Wong, K., Wuttke, J.: “Software engineering for Self-Adpaptive systems: A second research roadmap”. In Lemos, R.d., Giese, H., Muller, H., Shaw, M., eds.: Software Engineering for Self-Adaptive Systems, Dagstuhl, Germany (2011). [3] Nauman A. Qureshi, Anna Perini: “Engineering adaptive requirements”. SEAMS 2009: 126131. [4] V. Silva Souza. “A requirements-based approach for the design of adaptive systems”. In 34th International Conference on Software Engineering. - ICSE, 1635–1637, 2012. [5] Silvia Ingolfo, Vítor Estêvão Silva Souza: “Law and adaptivity in requirements engineering.”,, In: Proc. of the 8th International Symposium on Software Engineering for Adaptive and Self-Managing Systems. (2013) 163-168. [6] Vítor Estêvão Silva Souza, Renata S. S. Guizzardi: “Usando Modelos de Requisito em Tempo de Execução: Potencial e Desafios.”, In 21st IEEE International Requirements Engineering Conference. ER@BR (2013). [7] Nelly Bencomo, Kristopher Welsh, Pete Sawyer, Jon Whittle: “Self-Explanation in Adaptive Systems.”, In 17th IEEE International Conference on Engineering of Complex Computer Systems ICECCS 2012: 157-166. [8] Kristopher Welsh, Peter Sawyer: “Understanding the Scope of Uncertainty in Dynamically Adaptive Systems.”, In The 16th International Working Conference on Requirements Engineering. REFSQ 2010: 2-16. 41 [9] João Pimentel, Jaelson Castro, Emanuel Santos, Monique Soares, Jéssyka Vilela, Gabriela Guedes: “Requirements and Architectures for Adaptive Systems.”, In 21st IEEE International Requirements Engineering Conference. ER@BR (2013). [10] João Pimentel, Konstantinos Angelopoulos, Vítor Estêvão Silva Souza, John Mylopoulos, Jaelson Castro, “From Requirements to Architectures for Better Adaptive Software Systems.”, iStar 2013: 91-96 [11] K. Welsh and P. Sawyer, “When to adapt? identification of problem domains for adaptive systems.”, In Requirements Engineering Foundations for Software Quality (REFSQ), 2008. [12] Markus Luckey, Gregor Engels: “High-quality specification of self-adaptive software systems.”, In: Proc. of the 8th International Symposium on Software Engineering for Adaptive and Self-Managing Systems. (2013) 143-152. [13] Peng, Qian., “Issues in Specifying Requirements for Adaptive Software Systems.”, Studente thesis of Växjö University. (2009). [14] J. Pimentel, J. Castro, X. Franch, “Specification of Failure-Handling Requirements as Policy Rules on Self-Adaptive Systems,” Proceedings of the 14th Workshop on Requirements Engineering (WER 2011),Brazil, 2011, in press. [15] Pimentel, J., Castro, J., Perrelli, H., Santos, E., Franch, X.: “Towards anticipating requirements changes through studies of the future.”, In: 5th International Conference on Research Challenges in Information Science, IEEE (May 2011) 1-11. [16] Tallabaci, G., Souza, V.E.S.: “Engineering Adaptation with Zanshin: an Experience Report.”, In: Proc. of the 8th International Symposium on Software Engineering for Adaptive and Self-Managing Systems. (2013). [17] Angelopoulos, K., Souza, V.E.S., Pimentel, J., “Requirements and Architectural Approaches to Adaptive Software Systems: A Comparative Study.”, In: Proc. of the 8th International Symposium on Software Engineering for Adaptive and Self-Managing Systems. (2013) [18] V. E. S. Souza, A. Lapouchnian, W. N. Robinson, and J. Mylopoulos, “Awareness Requirements for Adaptive Systems,” in Proc. of the 6th International Symposium on Software Engineering for Adaptive and Self-Managing Systems. ACM, 2011, pp. 60–69. [19] N. A. Qureshi and A. Perini, “Engineering Adaptive Requirements,” in Proc. of the 2009 ICSE Workshop on Software Engineering for Adaptive and Self-Managing Systems. IEEE, 2009, pp. 126–131. [20] J. Whittle, P. Sawyer, N. Bencomo, B. H. C. Cheng, and J.-M. Bruel, “RELAX: Incorporating Uncertainty into the Specification of Self-Adaptive Systems,” in Proc. of the 17th IEEE International Requirements Engineering Conference. IEEE, 2009, pp. 79–88. 42 [21] D. Berry, B. Cheng, and J. Zhang, “The four levels of requirements engineering for and in dynamic adaptive systems,” in 11th International Workshop on Requirements Engineering: Foundation for Software Quality (REFSQ’05), Porto, Portugal, 2005. [22] Lapouchnian, Alexei, "Goal-Oriented Requirements Engineering: An Overview of the Current Research", University Of Toronto. (2005). [23] Thanos, Christian, "Control Loops Current Trends for Self-* Systems", University of Paderborn. [24] Vromant, P., Weyns, D., Malek, S., Andersson, J., "On Interacting Control Loops in SelfAdaptive Systems", SEAMS (2011). [25] Esfahani, N., Malek, S., "Uncertainty in Self-Adaptive Software Systems", Software Engineering for Self-Adaptive Systems II (2013). 214-238.