A ISO/IEC 12207 é a norma ISO/IEC que define processo de Engenharia de Software, atividades e tarefas que são associados com os processos do ciclo de vida do software desde sua concepção até a retirada/descontinuação do software.ISO/IEC 12207:2008 Systems and software engineering – Software life cycle processes

A norma internacional ISO/IEC 12207 tem como objetivo principal estabelecer uma estrutura comum para os processos de ciclo de vida e de desenvolvimento de softwares visando ajudar as organizações a compreenderem todos os componentes presentes na aquisição, desenvolvimento e fornecimento de software e, assim, conseguirem firmar contratos e executarem projetos de forma mais eficaz. Para isso é necessário que compradores, fornecedores, desenvolvedores, mantenedores, operadores, gerentes e técnicos envolvidos no desenvolvimento de software usem uma linguagem/framework comum.

Visa ser o padrão que define as tarefas necessárias para o desenvolvimento e manutenção de software.

Introdução O padrão ISO/IEC 12207 define ao todo 25 processos, 95 atividades e 325 tarefas.

Uma tarefa é uma ação com entradas e saídas. Pode ser um requisito (deve, shall), recomendação (deveria, should) ou permissão (pode, may).

Uma atividade é um conjunto de tarefas.

Um processo é um conjunto de atividades relacionadas. É uma sequência de passos realizados para um determinado propósito/resultado [IEEE 610.12, 1690]; o processo de software envolve métodos, técnicas, ferramentas e pessoas. Um processo pode ser descrito de duas formas: por propósito ou resultado e por atividade.

A descrição por propósito ou resultado é utilizada quando não há necessidade de detalhar o processo, apenas indicar o objetivo e o resultado. Essa abordagem poderá ser utilizada na avaliação do processo em relação aos modelos de maturidade de software como, por exemplo, o modelo CMMI e o modelo da ISO/IEC 15504.

A descrição por atividade é a abordagem mais conhecida e intuitiva. Nela são descritas as atividades com as inter-relações e o algoritmo de execução de cada atividade. As atividades devem atingir o propósito do processo. Para isso deve adotar as premissas:

Que procedimentos e métodos serão usados para a execução das atividades; Que ferramentas e equipamentos suportarão a realização das atividades, de forma a simplificar e automatizar o trabalho; Qual o perfil adequado de quem irá executar as atividades e qual o treinamento requerido nos procedimentos, métodos, ferramentas para que se possam realizar as atividades de forma adequada; Quais as métricas de processo que poderão ser empregadas para que a execução do processo possa ter a qualidade avaliada.

A norma ISO/IEC 12207 estabelece uma arquitetura de alto nível do ciclo de vida de software que é construída a partir de um conjunto de processos e seus inter-relacionamentos. Os processos são descritos tanto em nível de propósito/saídas como em termos de atividades.

A ISO/IEC 12207 não possui nenhuma ligação com métodos, ferramentas, treinamentos, métricas ou tecnologias empregadas. Esta determinação é útil para permitir que a norma seja utilizada mundialmente e possa acompanhar a evolução da Engenharia de Software nas diversas culturas organizacionais. Ela pode ser utilizada com qualquer modelo de ciclo de vida, método ou técnica de Engenharia de Software e linguagem de programação. Sua flexibilidade é uma característica importante, as atividades e tarefas do processo de ciclo de vida do software especificam "o que fazer" e não "como fazer".

Os processos da ISO/IEC 12207 são modulares, ou seja, são fortemente coesos e fracamente acoplados. Isto significa que todas as partes de um processo são fortemente relacionadas, mas a quantidade de interfaces entre os processos é mínima.

As regras listadas a seguir são fundamentais para identificação, escopo e estruturação dos processos.

Um processo deve ser modular, isto é, convém que um processo execute uma e somente uma função dentro do ciclo de vida e é conveniente que as interfaces entre dois processos quaisquer sejam mínimas; Cada processo é invocado na arquitetura; Se um processo A é invocado por um processo B e somente por ele, então A pertence a B; Se uma função é invocada por mais de um processo, então esta função torna-se um processo; Deve ser possível verificar qualquer função dentro do modelo de ciclo de vida; Convém que cada processo tenha uma estrutura interna suficientemente definida para que possa ser executável.

Estrutura Os processos, atividades e tarefas da ISO/IEC 12207 foram projetados para serem adaptados de acordo com cada projeto de software. Essa adaptação consiste no mapeamento de processos/atividades/tarefas relevantes/adequados ao projeto e, ao mesmo tempo, à supressão de processos/atividades/tarefas não aplicáveis.

Os processos são agrupados/categorizados, por uma questão de organização, de acordo com a sua natureza, ou seja, o seu objetivo principal no ciclo de vida de software. Esse agrupamento resultou em 4 diferentes classes de processos, que são:

Processos fundamentais; Processo de apoio; Processos organizacionais; Processos de adaptação.

Processos Fundamentais Os processos fundamentais são necessários para que um software seja executado. Eles iniciam o ciclo de vida e comandam outros processos. São eles:

Aquisição: obter o produto e/ou serviço que satisfaça suas necessidades; Fornecimento: prover um produto e/ou serviço; Desenvolvimento: transformar um conjunto de requisitos em um produto ou sistema de software; Operação: operar o produto no seu ambiente e prover suporte aos usuários; Manutenção: modificar o produto de software e depois liberá-lo para uso.

Processos de Apoio Os processos de apoio auxiliam outros processos. Eles são usados para garantir a qualidade, mas não são fundamentais. São eles:

Documentação: prover e manter registros de informações do software; Gerência de Configuração: estabelecer e manter a integridade de todos os produtos de trabalho (artefato) de um processo do projeto; Garantia da Qualidade: prover garantia de que os produtos e processos estão em conformidade com o requisitos (padrões/normas) pré-definidos; Verificação: confirmar que os produtos e/ou serviços refletem os requisitos especificados; Validação: confirmar que os requisitos para o uso específico de um produto e/ou serviço são atendidos; Revisão Conjunta: manter o entendimento (gerencial comum com os stakeholders); Auditoria: determinar independentemente a conformidade dos produtos e processos contra os requisitos definidos; Resolução de Problema: assegurar que todos os problemas levantados sejam analisados e resolvidos; Usabilidade: aumentar a facilidade do uso dos produtos e/ou serviços; Gerência de Solicitação de Mudanças: Prover e manter processos de gerencia de mudanças; Avaliação do Produto: garantir, através de exame e medição sistemáticos, que o produto e/ou serviços atende às necessidades especificadas (explícitas) e implícitas dos usuários.

Processos Organizacionais Os processos organizacionais auxiliam a organização e gerência geral dos processos e podem ser empregados fora do domínio de projetos e contratos específicos, servindo para toda a organização. São eles:

Gerência: organizar, monitorar e controlar a iniciação e o desempenho dos processos; Infraestrutura: manter uma infraestrutura estável e confiável; Melhoria: estabelecer, avaliar, controlar e melhorar um processo de ciclo de vida de software; Recursos Humanos: prover e manter recursos humanos adequados mantendo as suas capacitações consistentes com o negócio.

Processos de Reúso de Software São os processos específicos no desenvolvimento de software, processos estes da atualização da ISO/IEC 12207 - 2008. Gestão de Ativos: gerenciar a vida dos ativos (reusáveis) desde a concepção até a desativação; Gestão de Programa de Reúso: planejar, estabelecer, controlar, monitorar os programas de reúso; Engenharia de Domínio: desenvolver e manter modelos, arquiteturas e ativos deste domínio.

Processos de Adaptação Definem as atividades básicas necessárias para executar as adaptações.

Os processos são adaptáveis a: Projeto; Organização; Cultura; Modelo de ciclo de vida, métodos e técnicas, e linguagens.

Atividades do Desenvolvimento Algumas atividades importantes para o desenvolvimento de software serão descritas a seguir. São elas:

Elicitação de requisitos; Análise dos requisitos do software; Projeto da arquitetura do software; Projeto detalhado do software; Implementação; Codificação e testes do software; Integração do software; Teste de qualificação do software; Instalação do software; Testagem e aprovação do software. Elas foram descritas com base na norma ISO/IEC 12207.

Elicitação dos requisitos A elicitação dos requisitos consiste em entender os requisitos e solicitações do sistema; obter e definir os requisitos e solicitações do cliente através de sua solicitação direta ou através de outras entradas como revisão da proposta de negócio, objetivos operacionais, ambiente de hardware e outros documentos.

É imprescindível entender as expectativas do cliente e assegurar que tanto o cliente quanto o fornecedor entendam os requisitos da mesma forma. Isso pode ser feito através do processo de apoio "Revisão Conjunta" descrito na norma ISO/IEC 12207. É necessário acordar os requisitos e obter um acordo entre as equipes que desenvolverão o trabalho em relação aos requisitos do cliente.

É importante gerenciar todas as mudanças feitas nos requisitos do cliente em relação à linha-base definida assegurando que o resultado de mudanças tecnológicas e de necessidades do cliente são identificados e os impactos de introdução dessas mudanças são avaliados.

Análise dos requisitos do sistema Após a elicitação, segue para a especificação dos requisitos do sistema. Esta especificação deve descrever:

Funções e capacidades do sistema; Requisitos de negócio, organizacionais e de usuários; Requisitos de proteção, de segurança, de engenharia de fatores humanos (ergonomia), de interface, de operações e de manutenção; Restrições de projeto e requisitos de qualificação.

Os requisitos precisam ser avaliados. Por isso, para formalizar e facilitar a avaliação, os critérios listados a seguir devem ser seguidos:

Rastreabilidade com os requisitos do cliente e necessidades de aquisição; Consistência com as necessidades de aquisição e com a elicitação dos requisitos; Testabilidade; Viabilidade do projeto da arquitetura do sistema; Viabilidade da operação e manutenção.

Após a avaliação é importante estabelecer mecanismos de comunicação para disseminar os requisitos do sistema e suas atualizações para todas as partes interessadas.

Projeto da arquitetura do sistema Com os requisitos elaborados e validados, pode-se estabelecer uma arquitetura de alto nível para o sistema. A arquitetura deve identificar itens de hardware, software e operações manuais. Após a arquitetura ser estabelecida, é necessário avaliá-la, considerando os critérios listados a seguir:

Rastreabilidade para os requisitos do sistema; Consistência com os requisitos do sistema; Adequação dos métodos e padrões de projeto utilizados; Viabilidade dos itens de software atenderem seus requisitos alocados; Viabilidade da operação e da manutenção.

Análise dos requisitos do software Para garantir a qualidade do produto entregue, as características de qualidade descritas a seguir devem ser observadas nos requisitos de software:

Especificações funcionais e de capacidade, incluindo desempenho, características físicas e condições do ambiente sob o qual o item de software será executado; Interfaces externas ao item de software; Requisitos de qualificação; Especificações de proteção, incluindo aquelas relacionadas aos métodos de operação e manutenção, influências do ambiente e danos pessoais; Especificações de segurança, incluindo aquelas relacionadas com o comprometimento de informações sigilosas;