5.7 Redes Semiônicas
6.1.2 Processos de desenvolvimento de software
Processo de desenvolvimento de software é uma sequência de atividades que transforma requisitos de usuário em um sistema computacional (Jacobson et al., 1999b), como mostra a figura 6.1.
Fig. 6.1: Processo de desenvolvimento de software
As atividades de um processo formam fluxos de trabalho, que possuem diferentes tipos de papéis. Um pessoa que realiza um processo pode assumir mais de um papel, em uma série de atividades. Os fluxos de trabalho também identificam artefatos que são necessários (artefatos de entrada) e que são produzidos (artefatos de saída) em cada uma das atividades. Portanto, um processo identifica fluxos de trabalho como papéis associados a atividades, que exigem e produzem determinados artefatos.
O processo de software de uma organização é, portanto, o conjunto de atividades que as pessoas da organização realizam para desenvolver, manter e melhorar software e produtos associados (a descri- ção dessas atividades, não a execução delas). Há quatro atividades de processo que são fundamentais e comuns a grande parte dos processos existentes:
• Desenvolvimento do software: o software é construído de acordo com as especificações;
• Validação do software: o software é validado para garantir que realiza as funções e objetivos especificados;
• Evolução do software: o software é evoluído para se adaptar às mudanças e novas necessidades.
Os diferentes processos organizam essas atividades de diferentes maneiras, não havendo uma maneira considerada ideal. Com efeito, a diversidade de processos é potencialmente infinita, e di- ferentes organizações desenvolveram diferentes abordagens para desenvolvimento de software, em parte devido ao fato dessas organizações abordarem problemas e aplicações completamente diferen- tes. Assim, os processos podem ser especializados, quando aplicados em um determinado contexto, escolhendo um conjunto das atividades existentes, ou estendidos, quando necessitam de fluxos de tra- balho a mais para resolver problemas específicos. Os principais fatores que causam a especialização ou a extensão dos processos são (Jacobson et al., 1999b):
• Fatores organizacionais: cultura, estrutura, habilidades de gerenciamento, experiências anteri- ores e sistemas de software existentes em uma organização;
• Fatores do domínio: domínio da aplicação, processos do negócio e a comunidade de usuários;
• Fatores do ciclo de vida: tempo disponível para construir o sistema, tempo de vida estimado do sistema, tecnologia e habilidade das pessoas que produzem o sistema;
• Fatores técnicos: linguagem de programação utilizada, ferramentas de desenvolvimento, pa- drões de arquitetura, comunicações e distribuição.
A partir desses fatores, pode-se decidir por remover determinadas atividades, papéis e artefatos dos fluxos de trabalho de um determinado processo aplicado a um tipo de projeto.
Processos de desenvolvimento de software efetivos capturam as melhores práticas do estado da arte do desenvolvimento de software, reduzindo os riscos e aumentando a previsibilidade. Além disso, eles fornecem uma cultura e uma visão comum para uma comunidade que desenvolve software, tanto para os desenvolvedores como para clientes, usuários e gerentes executivos. Um processo deve ser capaz de evoluir ao longo do tempo. Ao criar um processo, os engenheiros de processo precisam equilibrar quatro pontos importantes (Jacobson et al., 1999b):
• Tecnologias: o processo deve utilizar tecnologias factíveis no presente;
• Ferramentas: processos e suas ferramentas evoluem em conjunto;
• Pessoas: a habilidade necessária para executar o processo deve ser compatível com a habilidade do seu público-alvo, para que este possa ser rapidamente treinado para utilizá-lo;
• Padrões da organização: o processo deve estar adaptado aos padrões atuais da organização onde é utilizado.
Um processo precisa amadurecer durante um certo tempo antes de atingir a estabilidade e ma- turidade necessárias para criar produtos comerciais de qualidade. Desenvolver produtos novos já é arriscado, utilizar um processo instável para fazê-lo torna essa atividade ainda mais arriscada.
Um processo de software comum utilizado por uma comunidade de desenvolvimento traz uma série de benefícios (Jacobson et al., 1999b):
• Todos os desenvolvedores entendem o que eles precisam fazer para desenvolver o produto;
• Desenvolvedores entendem o que os outros desenvolvedores estão fazendo;
• Gerentes entendem o que os desenvolvedores estão fazendo, mesmo que não possam ler código;
• Desenvolvedores, supervisores e gerentes podem mudar de projeto dentro de uma organização sem precisar aprender outro processo;
• Treinamentos podem ser padronizados em uma organização, podendo ser ministrados pelos próprios desenvolvedores em mini-cursos;
• O desenvolvimento de sistemas torna-se um processo que pode ser repetido, o que significa que pode ser bem estimado com relação a esforço e custo com precisão suficiente para gerenciar bem as expectativas do cliente e da equipe de desenvolvimento.
Uma organização pode ter mais de um processo, já que muitas vezes há tipos de sistemas e pro- jetos diferentes dentro de uma mesma organização. O esperado é que uma organização possua uma espécie de "biblioteca de processos", possuindo uma série de atividades que representam técnicas de engenharia de software e um manual com regras para a escolha de um conjunto de atividades dessa biblioteca para compor um processo único para realizar um determinado projeto, de acordo com as características específicas daquele projeto.
Modelos de processo de desenvolvimento de software
Modelos de processo de software são representações simplificadas de um processo de software, apresentadas a partir de uma perspectiva específica (Sommerville, 2003). Entre os diferentes tipos de modelos, vale citar:
• Modelos de processo genéricos: modelos abstratos de processos de software, representando ciclo de vida, papéis, atividades e artefatos produzidos. Um exemplo de um modelo de processo genérico é o Processo Unificado (PU) (Jacobson et al., 1999b).
• Modelo de processo da organização: representação abstrata do processo de uma organização. Esse modelo é geralmente baseado em um modelo de processo genérico, e procura documentar o processo da organização, com o objetivo de guiar as pessoas nos desenvolvimentos, treinar novos membros da equipe ou gerenciar e melhorar continuamente o próprio processo. O ideal é que o processo descrito no documento seja igual ao praticado na organização, e utilizado para treinamento. Esse modelo de processo deve ser flexível, apropriado à cultura da organização, medido, controlado e melhorado constantemente.
• Modelos de capacidade de processo: são modelos de processo que podem ser utilizados para avaliar a qualidade do processo de software de uma organização e para estabelecer um processo de melhoria. Esses modelos são como repositórios de melhores práticas de processos de soft- ware, acumulados e desenvolvidos. Alguns exemplos mais conhecidos são os modelos CMMI, COBIT e o brasileiro MPS-br.
A figura 6.2 ilustra o relacionamento entre os tipos de modelo abordados anteriormente. O pro- cesso de software de uma organização, que são as atividades que as pessoas de uma organização realizam para produzir, manter e melhorar o software, são descritos pelo modelo de processo da orga- nização, que costuma incorporar atividades e práticas de modelos genéricos de processo. Os modelos de capacidade de processo, verdadeiros repositórios de melhores práticas, são utilizados para avaliar o modelo do processo da organização, estabelecendo um perfil de capacidade que é utilizado para gerar uma processo de melhoria contínua do processo. A seta bi-direcional entre o processo de software da organização e o modelo de processo da organização evidencia que o modelo descreve o processo da organização, que é determinado pelo modelo. Isso significa que o modelo deve ser flexível para acompanhar as mudanças do processo da organização, que está atrelado à sua cultura, e muda cons- tantemente. Algumas vezes, essa mudança pode até mesmo ser drástica, como acontece no caso de uma organização mudar as suas áreas de atuação no mercado. No entanto, algumas vezes pode-se querer mudar o modelo da organização para que este influencie a cultura e o processo da organiza- ção, como quando deseja-se adequar o modelo a melhores práticas de modelos de capacidade, como o CMMI ou o MPS-br, a fim de conseguir melhorias e certificações para o modelo e o processo da organização.
Fig. 6.2: Tipos de modelo de processo de desenvolvimento de software
No caso de sistemas de amplificação de inteligência, não há nenhum processo de desenvolvimento de software existente adequado à sua construção, pois os processos existentes não garantem que o SAI será construído com seus atributos necessários, devido ao fato de nenhum processo de software levar em consideração uma modelagem de como a tomada de decisão na solução de um problema é al- cançada em termos de processos cognitivos humanos e como um sistema computacional pode ajudar
na melhoria desse processo de tomada de decisão. Dessa maneira, processos de desenvolvimento tradicionais, utilizando técnicas tradicionais como "casos de uso", são necessários mas não suficien- tes. Antes de aplicar as atividades tradicionais, faz-se necessário atividades capazes de modelar o processo cognitivo humano na tomada de decisão e a inserção de um sistema computacional neste processo, capaz de melhorá-lo.