# PSEE

Um ambiente de engenharia de software orientado a processos (PSEE) pode ser representado como uma nova visão do SEE. Um PSEE complementa o suporte a descrição e execução dos processos de um SEE, auxiliando e controlando atividades envolvidas no ciclo de vida do software, mais precisamente na produção e manutenção do software.
Os estudos de PSEE, levaram a construção dos ambientes ExPSEE e WebAPSEE.
No ExPSEE, existem os objetos de software e os operadores de software. Este último é o responsável pela criação e transformação dos objetos de software. Para um melhor entendimento, os objetos de software são tratados como variáveis do processo, enquanto os operadores representam as ferramentas e procedimentos pertencentes ao ambiente.
O WebAPSEE permite a integração de vários serviços de gerência de processos, incluindo modelagem, execução, visualização, instanciação e resposta a eventos da execução. Através do Manager Console o Gerente do Processo de Desenvolvimento de software pode Modelar Processos, Gerenciar Execução de Processos, Visualizar Relatórios do Processo e Gerenciar informações da organização, como artefatos, pessoas e recursos, através de um Editor Gráfico.
Considerando PSSE, devemos considerar que ele é direcionado a uma descrição explícita de um processo,definida utilizando uma linguagem de modelagem de processo “Process Modelling Language” (PML). Estas linguagens oferecem recursos poderosos para descrever papéis, procedimentos manuais ou automáticos, interações entre usuários, produtos e restrições. A execução do modelo do processo (“ enactment”) em um PSEE apóia as atividades que agentes do processo (participantes do processo: indivíduos ou autômatos) devem executar. Por exemplo, este auxílio às atividades é propiciado através de orientações à execução ou através da automatização de partes do processo. Um PSEE pode ser visto como sendo composto de três partes:
* Um ambiente computacional para permitir a execução de processo,
* Um ambiente de interação com o usuário, composto de ferramentas como compiladores, editores, etc., para apoiar o trabalho do usuário e sua interação com o PSEE.
* Um repositório para armazenar os produtos do processo.
No ambiente de execução é executado o processo. A execução opera sobre os artefatos armazenados em um repositório e coordena as operações para a efetivação do processo. A execução do processo pode invocar operações que afetam a operação do usuário com o ambiente, como por exemplo, a execução automática de uma determinada ferramenta (compilação e linkedição automática).
PSEEs relacionam-se com o problema de como sistemas computadorizados podem ser utilizados no desenvolvimento de software, ou seja, software para ajudar a construir software. Sua finalidade principal é atender requisitos organizacionais para auxiliar na coordenação das atividades de desenvolvimento de software. No núcleo do domínio destas aplicações, devem no mínimo ser providos serviços para caracterização e armazenamento dos dados relacionados a uma organização de software, envolvendo elementos relacionados com a modelagem de processos, definição de artefatos e seus gabaritos, descrição das atividades a serem desempenhadas, descrição das ferramentas de software usadas no processo, e enumeração dos profissionais, seus cargos, papéis e responsabilidades. A crescente exigência das organizações de desenvolvimento de software e o mercado consumidor influenciam decisivamente no gerenciamento de projetos. O desenvolvimento de PSEEs atuais requer a integração de diversas ferramentas voltadas para: auxílio à modelagem de processos segundo múltiplas perspectivas diferentes; auxílio a alocação de pessoas e recursos a processos; auxílio à monitoração da execução de processos (por exemplo, monitoração por eventos e visualização adequada do estado do processo); simulação de processos; distribuição de informações para suportes novas estruturas de terceirização do mercado; e também para integração do ambiente com outras ferramentas de apoio ao desenvolvimento de software.

## A tecnologia de Processo de Software

A tecnologia de processo de desenvolvimento de software é uma importante área de estudo e pesquisas na Engenharia de Software que tem exigido inúmeros esforços em busca de técnicas e modelos capazes de viabilizar melhorias na qualidade do processo de desenvolvimento de software. Essa tecnologia baseia-se na descrição formal do processo, a fim de propiciar a sua automação, verificação, aperfeiçoamento, e reutilização. Suas origens estão relacionadas com as primeiras propostas de um ciclo de vida para o software, isto é, a definição de um conjunto bem definido de estágios que forneçam uma referência para o acompanhamento do desenvolvimento. Um processo de software e seu modelo têm uma natureza evolucionária, ou seja, ele está sujeito a sucessivas correções e melhorias impostas pela instabilidade do ambiente operacional. Ele possui um ciclo de vida para processos de software análogo ao ciclo de vida de produtos de software. As atividades deste ciclo de vida são chamadas de meta-atividades, e o processo de desenvolvimento e evolução de processos de software é denominado de meta-processo. As principais atividades do meta-processo são:
(a) Análise de Requisitos do Processo: identifica os requisitos para a atividade de projeto de um novo processo;
(b) Projeto (ou Modelagem) do Processo: provê a arquitetura geral e detalhada do processo. Nessa etapa as linguagens de modelagem do processo são utilizadas com o objetivo de descrever os elementos básicos do desenvolvimento de software;
(c) Instanciação do Processo: gera um modelo de processo instanciado, contendo informações detalhadas sobre os prazos, agentes e recursos utilizados por cada atividade definida no processo;
(d) Simulação do Processo: ocupa um papel chave na verificação e validação dos processos definidos;
(e) Execução do modelo de processo: o modelo de processo instanciado é executado através da invocação de ferramentas para guiar e assistir a realização do processo no mundo real; e
(f) Avaliação do Processo: provê informação quantitativa e qualitativa descrevendo o desempenho de todo o processo em execução.
Outras fases podem fazer parte do ciclo-de-vida de processos de software. Normalmente cada PSEE propõe o seu ciclo-de-vida de acordo com as ferramentas providas . Permitir visualização do processo durante a interação com usuários de PSEEs é um aspecto central que requer mais investimento em pesquisa. As pessoas envolvidas no processo de software devem receber orientação e assistência na realização de suas atividades, sem interferência no processo criativo. Entretanto, o alvo das pesquisas na área tem sido tradicionalmente voltado para melhores linguagens de modelagem de processos e mecanismos de execução de processos de software, enquanto que os requisitos de interação com os seus usuários têm sido bem menos explorados. Um modelo de processo de software é uma estrutura complexa que interrelaciona elementos gerenciáveis que constituem o processo de software, incluindo os artefatos produzidos, agentes envolvidos e atividades prescritas. Esta complexidade dificulta a percepção do processo como um todo por parte dos profissionais envolvidos, os quais necessitam possuir visões, apresentadas de forma adequada e orientadas ao seu papel no processo. Acredita-se que a maneira pela qual estas informações são apresentadas pode influenciar no sucesso ou não do processo de desenvolvimento de software.

## Modelos de PSEEs

A literatura especializada define três tipos principais de modelos:
* Modelos Abstratos (patterns ou templates) fornecem moldes de solução para um problema comum, em um nível de detalhe que idealmente não está associado a uma organização específica. Um processo abstrato é um modelo de alto nível que é projetado para regular a funcionalidade e interação entre os papéis de desenvolvedores, gerentes, usuários e ferramentas em um PSEE.
* Modelos Instanciados (ou executáveis) são modelos prontos para a execução, podendo ser submetidos à execução por uma máquina de processo. O modelo instanciado é considerado uma instância de um modelo abstrato, com objetivos e restrições específicos, envolvendo agentes, prazos, orçamentos, recursos e um processo de desenvolvimento.
* Modelos em Execução ou Executados registram o passado histórico da execução de um processo incluindo os eventos e modificações realizadas no modelo associado.
Modelagem de Processos
O modelo de um processo de software representa formalmente os itens envolvidos neste processo onde cada elemento pode ser executado por pessoas ou máquinas. As descrições de ciclo de vida representam, em sua maioria, um modelo abstrato de desenvolvimento de software, não fornecendo informações sobre como integrar os diversos passos do processo que são realizados pelas pessoas envolvidas. Um dos objetivos da modelagem de processo é detalhar o suficiente estas descrições para orientar a execução do processo. Podem-se modelar diferentes elementos de um processo como, por exemplo: atividades, produtos (artefatos), atores e papéis.
* Atividade: é o estágio que produz mudanças visíveis de estado no produto de software. Pode ter uma entrada, uma saída e alguns resultados intermediários, normalmente chamados de produtos. A atividade inclui e implementa procedimentos, regras, políticas e objetivos para gerar e modificar um conjunto de determinados artefatos. As atividades podem ser divididas em atividades mais simples; isto é, existem atividades simples e compostas.
* Artefato ou Produto: é o produto ou subproduto de um processo ou atividade. Um artefato produzido por um processo pode ser usado como fonte de material para o mesmo ou algum outro processo produzir outro artefato. Um artefato ou produto de software é desenvolvido ou mantido por um processo. Os (sub) produtos podem ser criados, acessados ou modificados durante o processo. Um conjunto de artefatos de software a ser entregue a um usuário é chamado produto de software.
* Ator: é a entidade que executa o processo. Atores podem ser divididos em dois grupos: atores humanos ou atores de sistema. Um ator é caracterizado pela descrição do seu papel e pode desempenhar diversos papéis.
* Papel: define o conjunto de atores ou de responsabilidades, deveres e conhecimento necessário para se executar uma atividade.
Modelar o processo de software permite entender e apoiar o desenvolvimento de sistemas de software. A modelagem de processos de software não se resume apenas na escrita de programas que automatizem o processo de desenvolvimento de software, nem em descrever tudo o que os envolvidos no processo devam fazer. Enquanto os programas de computador são escritos para definir o comportamento de uma máquina determinística, os programas de processo são escritos para definir possíveis padrões de comportamento entre elementos não-determinísticos (pessoas) e ferramentas automatizadas. Principais objetivos da modelagem de processo de software:
* Facilita a comunicação e entendimento entre as pessoas: ocorre o compartilhamento do objeto de desenvolvimento pelo grupo todo;
* Facilita o aperfeiçoamento do processo: através desse modelo, é possível identificar pontos de melhora.
* Reutilização: Suas descrições podem ser armazenadas e reutilizadas quando necessário;
* Fornecer gerência do processo: com um processo definido, é possível realizar estimativas e planejamentos. Desta forma, o efeito de algumas decisões pode ser simulado e o processo definido pode ser comparado ao processo em andamento, permitindo a efetiva tomada de decisões;
* Prover orientação automatizada do processo: um processo definido permite que ferramentas automatizem algumas partes do modelo e orientem os usuários no andamento do processo;
* Prover execução automatizada: um ambiente automatizado pode controlar o comportamento do processo definido, coletar métricas e reforçar as regras para garantir a integridade do processo.
Instanciação
É a fase do ciclo de vida do processo aonde se apresentam características específicas relacionadas ao contexto da organização de desenvolvimento de software envolvida e aos prazos reais do projeto. Descrição de prazos das atividades, alocação de recursos, e definição de ferramentas são exemplos de informações necessárias para instanciação de processos. Modelos Instanciados, são modelos prontos para execução, podendo ser submetidos à execução por uma máquina de processo. O modelo instanciado é considerado uma instância de um modelo abstrato, já com parâmetros definidos. Na instanciação de processos de software, se faz necessário o conhecimento acerca do estado da organização, o contexto da execução do processo e informações de projetos anteriores (histórico). Considerando o nível de complexidade e são inter-relacionadas, a falta de atenção e suporte a essa fase pode ter como conseqüência, por exemplo, uma alocação inadequada de recursos. Estas informações são bastante específicas, não só por organização, mas por projetos dentro da organização. Por isso, é importante que a partir de um mesmo processo abstrato seja possível criar vários processos instanciados. Visando garantir as possíveis discordâncias é necessário que haja uma forma de modificar e reorganizar o processo de forma que ele passe a traduzir de fato a realidade.
Execução
Já a execução de processos de software é uma fase do ciclo de vida de processos de software, onde de fato as atividades modeladas são realizadas pelos desenvolvedores e também automaticamente. Portanto, esta fase envolve questões importantes sobre planejamento, controle, monitoramento, conformidade com o processo modelado, treinamento e segurança. A fase de execução de um processo de software utiliza o modelo obtido da instanciação dos conceitos abstratos do modelo de processo de software construído na fase de modelagem e pode ser caracterizada como a realização automatizada da construção de um software. Ainda na modelagem, é necessário prever as possíveis dependências entre as atividades para que se seja possível gerenciar suas dependências. Assim, o mecanismo de execução é influenciado pelo paradigma de modelagem utilizado. Por isso, a classificação de paradigmas de modelagem de processos de software também poderia ser adotada na execução. As diferenças entre um mecanismo de execução e outro utilizando o mesmo paradigma de modelagem geralmente estão na abordagem de interação com o usuário, o tratamento de segurança e autorização, a ênfase em monitoramento do processo através de métricas e a forma de interação com as outras ferramentas. A instabilidade do sistema operacional leva o processo de desenvolvimento de software a estar sempre se adequando no ambiente inserido.
Mecanismos de Execução
São necessários ferramentas para manipular a descrição de um processo e tornar o gerenciamento de execução de processos de software automatizado. Um mecanismo de execução de processo é responsável pela coordenação das atividades a se realizar por pessoas e outras ferramentas automatizadas. O Mecanismo de Execução de processos executa o modelo do processo instanciado, gerenciando as informações e guiando os atores conforme a definição do modelo do processo. o foco desse mecanismo é garantir a consistencia entre o estado consistente e a realização real da tarefa. No modelo de execução é importante observar:
* Automação de Processo: Ajudar a coordenação de atividades e habilitar automaticamente as atividades que podem ser executadas sem intervenção humana, através de uma integração entre as ferramentas do ambiente;
* Trabalho Cooperativo: Apoiar o cooperativismo humano trabalhando em um projeto de software através da orientação e assistência durante todo o ciclo de desenvolvimento;
* Monitoração: Define várias visões do estado da execução do processo, possibilitando maior cobertura gerencial sobre os projetos e suas informações sobre o andamento real das atividades.