Alexandre Bartie Quinta-feira, 26 de janeiro de 2006

Inovação do Processo de Software

Um processo de engenharia de software pode ser caracterizado como um modelo que estabelece como sistematizar e controlar todas as atividades relacionadas à construção de softwares. Um bom processo deve ser estruturado em disciplinas que possibilitem o gerenciamento dos aspectos mais críticos de um projeto de software. Cada disciplina focaliza uma determinada complexidade do processo e define uma abordagem de como organizar, conduzir e avaliar os procedimentos relacionados a estes aspectos críticos, minimizando os riscos associados a um projeto de software.

Porém, um processo de engenharia de software é um modelo estático, que reflete como uma organização deve lidar com seus projetos de softwares. À medida que novas técnicas e ferramentas são criadas, novas tecnologias são disponibilizadas e novos paradigmas são superados, nosso processo de engenharia de software fica defasado, pois não consegue acompanhar as mudanças introduzidas no mercado.


Figura 1 - Disciplinas do Processo de Engenharia de Software

Foi o que aconteceu com a maioria das organizações que produzem softwares ou necessitam destes para suportar suas operações e ganhar eficiência operacional. Estas empresas empregam processos de software que baseiam-se em premissas de construção de software de décadas passadas, onde existia um cenário tecnológico e comportamental muito diferente do atual. Não somente a tecnologia mudou, mas a maneira de como são realizados negócios também foi afetada de forma significativa. Hoje, clientes e fornecedores estão cada mais interligados, as empresas cada vez mais estão empregando tecnologia intensiva para ganhar produtividade e aumentar a qualidade de seus produtos e processos, nosso dia a dia esta cada vez mais dependente de softwares que funcionem de forma segura e precisa. Em contrapartida, o mercado esta cada vez mais exigente, quer softwares melhores e mais baratos, prazos mais curtos e orçamentos mais reduzidos, requerendo equipes menores e mais produtivas.

Apesar destes novos cenários, nosso processo de engenharia de software continuou estático, indiferente das mudanças internas e externas da organização, pois ele foi construído para ser seguido, mas todos se esquecerem de que ele necessitava ser melhorado. Portanto, necessitamos criar um modelo organizacional que possibilite melhorar continuamente nosso processo de software, de forma a assimilar as inovações e realizar ajustes ao longo do tempo, evitando que este processo envelheça e perca eficiência com o passar dos anos.  

Software Process Improvement (SPI)

Promover mudanças em organizações sempre é um desafio complexo e que envolve uma grande dose de risco. A inovação do processo de engenharia de software requer uma ruptura do atual modelo com uma nova abordagem de trabalho, que atenderá uma nova gama de exigências que queremos adquirir nos nossos projetos de softwares. Toda mudança de processos afeta diretamente a forma de como conduzimos nossas atividades e como organizamos nosso projeto de software.

A área de TI deverá definir quais inovações serão priorizadas, estabelecendo um plano de inovação conhecido como SPI - Software Process Improvement, que detalha toda a estratégia de como introduzir as inovações dentro da organização. Este processo deverá ser conduzido da forma mais transparente, sempre com um forte patrocínio da alta diretoria da organização, estabelecendo metas e objetivos bem claros a todas as equipes envolvidas no processo. Sem este apoio, praticamente um processo de melhoria de software não vingaria nas empresas.

Como sabemos, o processo de mudança gera um natural desconforto na organização, pois faz com que equipes abandonem suas atuais abordagens e adotem uma eventual “melhor prática” de trabalho. Um bom SPI deve ter um eficiente mecanismo de comunicação com todos os envolvidos neste processo, de forma a minimizar as resistências à mudanças que sempre estarão presentes. O máximo que poderemos fazer é minimizar estes sintomas, através de treinamentos intensivos, uma boa documentação e principalmente, um caso de sucesso real dentro da organização. Este talvez seja o ponto chave para o sucesso de processos de inovação que estejam alterando substancialmente as estruturas dos projetos de softwares. Será muito mais simples introduzir um processo de mudança se existir um processo eficiente de comunicação e uma fonte de informações contínuas sobre como será conduzido este processo de melhorias.

Software Engineering Process Group (SEPG)

Uma organização que busca um aperfeiçoamento contínuo nos projetos de software, deverá criar um grupo conhecido como SEPG (Software Engineering Process Group), que estará encarregado em alinhar os principais objetivos e expectativas da organização com as mais modernas metodologias existentes, construindo uma cultura de inovação contínua nos processos de engenharia de software.

É conveniente que este grupo possuam profissionais bem heterogêneos, para que possam ter conhecimentos e habilidades complementares, uma vez que várias disciplinas deverão ser aperfeiçoadas continuamente. Esta equipe deverá contar com profissionais muito experientes, que já aplicaram seus conhecimentos na prática, e que adquiriram uma larga experiência na disciplina que estarão atuando. Suas práticas anteriores servirão como base de sustentação para suas mudanças, uma vez que conhecem profundamente as dificuldades da disciplina, levando esta experiência aos outros profissionais da organização.

Cada integrante, independente de sua especialização, deverá conhecer as complexidades envolvidas em todas as disciplinas que integram o processo de engenharia de software, de forma a integrar seus trabalhos com as demais disciplinas existentes, possibilitando a criação de um modelo consistente e unificado. Deveríamos evitar concentrar muitas disciplinas na mão de um único recurso, colocando em risco o fato de nenhuma destas serem bem atendidas – se o número de profissionais não for suficiente, é melhor deixar algumas disciplinas e concentrar-se nas mais prioritárias para a organização.

Porém, ao contrário do que se imagina, o maior desafio deste grupo não esta simplesmente no aperfeiçoamento deste processo, mas sim em como introduzir estas inovações para toda a organização. A primeira barreira esta em conseguir romper a cultura que esta impregnada em décadas de informalidade do processo de software, o que dificulta qualquer idéia de formalização do processo ou padronização de procedimentos e documentação. Desta forma, o grupo SPI deverá ter o compromisso em levar estas inovações a toda a organização, na forma de treinamentos, acompanhamentos, debates, materiais, documentos, referências entre outras técnicas que podem ser aplicadas. Se os processos que estão sendo modelados por esta equipe não conseguirem alcançar os projetos de softwares que estão sendo construídos, então podemos entender que esta equipe fracassou com seu maior objetivo, que é tornar levar as inovações à toda organização.

- Teremos um “Processo de Inovação” melhorado e validado;
- Um maior nível de detalhamento e conhecimento sobre o que estamos inovando;
- Um caso de sucesso a ser divulgado e empregado como referência;
- Eliminado ou minimizado eventuais riscos no processo de melhoria;
- Projeções de tempo e esforços do trabalho serão mais realistas;
- Benefícios reais já estão sendo colhidos com a nova mudança;

Planejando a Evolução dos Processos de Software

Uma mudança deve ser planejada de forma progressiva, inicialmente atacando uma área específica e sendo progressivamente ampliada, até que alcançarmos toda a organização. Isto significa que não conseguiremos fazer com que todos os projetos corporativos estejam, ao mesmo tempo, no mesmo patamar metodológico, mas que cada grupo esteja numa iteração de inovação diferente.

O planejamento da evolução dos processos de software deve identificar etapas que garantam uma condução controlada de como estas inovações serão implantadas na organização como um todo, de forma a minimizar os riscos envolvidos num processo de mudanças.


Figura 2 - Planejamento de um SPI - Software Process Improvement

Cada onda de inovação tem um objetivo diferente. A primeira fase contemplará todos os projetos-piloto que validarão as inovações que estão sendo introduzidas em cada disciplina. Se o nível de mudanças for muito elevado, recomenda-se que o projeto-piloto contemple apenas uma única disciplina, eliminando eventuais riscos de interferência com outras disciplinas que possam ter dificuldades em implantar suas melhorias. Nesta etapa, o SEPG participa efetivamente do processo e está comprometido diretamente com os resultados deste trabalho.

Após a execução dos projetos-piloto, podemos avaliar os resultados alcançados e iniciar um processo de implantação destas inovações de forma integrada. Nesta nova etapa do SPI, alguns participantes da etapa anterior serão selecionados para serem multiplicadores e atuarem como consultores destes trabalhos, fornecendo sua experiência adquirida do projeto-piloto. Neste momento, a atuação do SEPG restringe-se a apenas acompanhar e dar suporte a eventuais dúvidas e dificuldades do grupo, intervindo apenas quando existir o risco destas melhorias não serem adequadamente implantadas. Os riscos envolvidos nesta fase do SPI está na condução simultânea de mudanças em várias disciplinas, o que torna o processo de assimilação das melhorias muito mais difícil.

A etapa final do processo de inovação tem como objetivo tornar corporativo todas as mudanças que foram validadas nas duas etapas anteriores do processo. Nesta etapa, os riscos estão mais voltados em função do número acentuado de células de desenvolvimento existentes na organização. Quando estamos nesta etapa, somente 20% das células de desenvolvimento já absorveram o novo processo de engenharia de software, restante a maior parte das células da organização. Como este processo evolutivo envolve muitos grupos simultaneamente, é possível dividir esta etapa em 2 ou mais estágios, evitando um acumulo acentuado de células, o que exigiria um grande esforço de apoio a estas equipes, o que poderia comprometer o processo de implantação destas melhorias.

Nesta etapa, é muito comum a existência de grupos que utilizam-se de métodos e tecnologias mais antigas, o que dificulta ainda mais os trabalhos de introdução nestes conceitos. Como será impossível ter um acompanhamento efetivo para todos estes grupos, recomenda-se, neste estágio, uma forte estrutura de treinamento, debates e apresentações, possibilitando que vários grupos recebam suporte e informações ao mesmo tempo. Neste estágio, o SEPG estará totalmente envolvido no planejamento de outro SPI, sendo pouco envolvido nesta etapa. Cabe a cada liderança das células de desenvolvimento o compromisso de assimilar estes novos processos.

Planejando Novas “Ondas de Inovação”

Como sabemos, introduzir mudanças em processos de softwares é um desafio que envolve vários riscos. É impossível dar um grande salto de inovação à medida que precisamos viabilizar a implantação destas melhorias em toda a organização.

Seguindo o mesmo princípio do desenvolvimento iterativo, as inovações a serem introduzidas no processo de engenharia de software podem e devem ser disponibilizadas em iterações de inovação, fazendo com que gradualmente toda a organização assimile todas as melhorias que estão sendo propostas em cada disciplina.


Figura 3 - Evoluções Contínuas do Processo de Engenharia de Software

Este artigo é protegido pelas leis de direiro autoral, pois trata-se de parte integrante de uma Metodologia de Inovação de Processos de Software de propriedade do autor.