1.9 BAĞIMSIZ DENETİMLE İLGİLİ AMERİKA BİRLEŞİK DEVLETLERİN’DE
1.9.4 Amerikan Sertifikalı Serbest Muhasebeciler Birliği’nin (American Institute
1.9.4.1 Genel Kabul Görmüş Denetim Standartları
De acordo com Sangwan et al. [SAN06], o desenvolvimento distribuído de software tem ganho espaço nos últimos anos, causando um grande impacto em todo o ciclo de vida do desenvolvimento do software, incluindo as práticas de gerenciamento. Os autores abordam que o desenvolvimento distribuído de software global ou desenvolvimento de software global (GSD – Global Software Development) apresentam muitos prós e contras, que devem ser cuidadosamente gerenciados, principalmente com os aspectos de agilidade e disciplina dos processos.
Sangwan et al. [SAN06] em uma versão simplificada, definem o desenvolvimento de software global como uma maneira de desenvolver software que usa equipes de múltiplas localizações geográficas. Essas equipes podem ser tanto da mesma organização, como colaboradores ou terceiros de outras organizações, podendo os mesmos estarem localizados em um país ou em diversos países. Nestas situações existe a distância física entre os times que estão trabalhando juntos no desenvolvimento de um sistema de informação incorporando complexidade e desafios interessantes que começam a ser estudados. Segundo os autores, muitos fatores tecnológicos, organizacionais e econômicos tem incrementado a globalização dos projetos de desenvolvimento. Entretanto, os autores destacam a inerente dificuldade para coordenar projetos onde os times estão distantes fisicamente, uma vez que existem evidências que o compartilhamento do conhecimento, em times colocalizados, ocorre por seus membros estarem trabalhando próximos uns dos outros.
Conforme Sangwan et al. [SAN06], os projetos de desenvolvimento de software global apresentam diferentes estruturas e tamanhos, podendo envolver múltiplas divisões, organizações, culturas, e idiomas em um único projeto. Muitas vezes, os participantes nunca se encontraram anteriormente, possuem diferentes níveis de conhecimento e experiências e podem ter motivações que conflitam com os objetivos do projeto. Algumas dificuldades, apontadas pelos autores, se referem a visibilidade das atividades dos outros membros da equipe, falta de informação disponíveis, causando suposições conflitantes com os requisitos ou que introduzem problemas no software, diferentes senso de urgência entre membros, divergências culturais e de idioma, e algumas questões de logística.
Com relação as dificuldades apontadas acima, os autores sugerem como solução ações de socialização e considerações com relação a infraestrutura técnica, práticas de gerenciamento e processos organizacionais. Para isto, os autores apresentam uma
framework com papéis e responsabilidades claramente definidas, uma infraestrutura bem-
definida para facilitar a coordenação e colaboração, e muitos outros aspectos. Os autores também apresentam alguns fatores críticos de sucesso para o desenvolvimento global de software, são eles:
Redução da ambiguidade Maximizar a estabilidade
Entendimento das dependências Facilitar a coordenação
Balancear flexibilidade e rigidez
Para Karolak [KAR98], o desenvolvimento de software colocalizados está ficando cada vez mais difícil de justificar. Com a comunidade de software começando a apreciar a economia de mesclar diferentes habilidades e domínios de conhecimento, e a sofisticação dos meios de comunicação, as pressões de custo e tecnologia estão levando as organizações a adotarem projetos virtuais, pois os mesmos estão apresentando custos mais adequados ou competitivos do que desenvolver um produto de software no mesmo local, na mesma organização ou até no mesmo país. Alguns obstáculos, como a falta de processos maduros, prevalência de linguagens de desenvolvimento não padronizadas, comunicações instáveis, e ferramentas com capacidades pequenas de integração estão sendo resolvidos e estão diminuído de importância. Esse fato está permitindo que grupos de diferentes localizações e culturas, e com diferentes expectativas e objetivos se unam como um time global de desenvolvimento de software.
Karolak [KAR98] aponta algumas questões específicas do ambiente de projetos virtuais que os gerentes de projetos estão enfrentando, entre elas, negligenciar os
aspectos de integração do projeto, falhas no gerenciamento das diferentes expectativas culturais, na definição clara dos papéis e responsabilidades, e na definição das atribuições de propriedade sobre os processos e produtos. A essas questões são adicionadas as súbitas mudanças nos usuais custos, prazos, e qualidade que todo o gerente de projeto convive na tentativa de entregar o produto para o cliente. Segundo o autor, o desenvolvimento virtual de produtos é consideravelmente mais complexo que o gerenciamento do mais complexo projeto colocalizado (“in house”).
O desenvolvimento de produtos globais significa utilizar recursos corporativos independente de sua localização. Isso gera novas oportunidades, como explorar o potencial de utilização de conhecimento externo, diminuir os custos de desenvolvimento, reduzir o cronograma, atingir altos níveis de qualidade, e acessar mercados até então não disponíveis. Essas oportunidades estão sendo geradas devido a um crescimento da demanda de mercado maior que o de fornecedores, expansão do mercado global, necessidade de parcerias estratégicas para atingir alguns mercados e crescimento das organizações globais. Para tirar proveito dessas oportunidades, especial atenção deve ser dada a alguns aspectos críticos, como infraestrutura de comunicação, gerenciamento da configuração do software, e papéis e responsabilidades.
Karolak [KAR98] expõe que o desenvolvimento virtual de software pode assumir muitas formas. Membros de um mesmo time podem trabalhar em casa ou em escritórios localizados em diferentes locais. Diferentes times de software podem desenvolver diferentes partes de um produto em diferentes localizações ou o time de desenvolvimento pode estar em uma localização e o time de manutenção em outra. Em muitos casos, organizações virtuais podem utilizar a terceirização como parte de seu projeto de software, seja utilizando recursos de outras área da mesma organização ou de outras empresas.
A figura 6, adaptada de Karolak [KAR98], mostra o contraste existente entre os times virtuais e não virtuais (colocalizados) de desenvolvimento. Em times não virtuais todas as atividades são conduzidas em uma mesma localização com interações entre os envolvidos realizadas em um mesmo momento. Em times virtuais os membros dos times não estão colocalizados, desta forma a comunicação pode não existir em um mesmo momento, fazendo com que reuniões, troca de idéias, e resultados sejam realizadas de forma independente entre os membros. Essas diferenças geram riscos relativos a perda da comunicação face a face, diminuição da moral da equipe e perda de confiança.
Figura 6 – Estrutura de projetos não virtuais x virtuais [KAR98].
De acordo com Karolak [KAR98], uma vez identificada a necessidade de um time distribuído é necessário aplicar tecnologia virtual para propiciar a formação e o conjunto da equipe, bem como, gerenciar os riscos constantemente. O autor aborda vários aspectos importantes para o sucesso de um projeto distribuído, entre eles os citados a seguir:
Necessidade de uma infraestrutura que permita a integração das equipes distribuídas, considerando as necessidades de comunicação e colaboração de cada equipe e dos membros distribuídos, e que a infraestrutura de comunicação possibilite a integração das equipes provendo alternativas quando da dificuldade de comunicação face a face, ou queda da moral e da confiança entre as equipes.
Times não virtuais (colocalizados)
Gerente do Projeto
Mesma localização física
Gerente do Projeto
Sede do projeto
Locais
em outros países Locais em outras cidades
A divisão do esforço do projeto deve levar em consideração questões como a percentagem de esforço/orçamento de cada parte interessada, fases do desenvolvimento, arquitetura da solução, conhecimento e experiência, liderança, disponibilidade da equipe distribuída, ferramentas e recursos.
O projeto deve ter documentada a sua estrutura organizacional com a definição das responsabilidades e hierarquia de prestação de contas para cronograma, custo, qualidade, ferramentas e métodos, gerenciamento da configuração, controle da qualidade e resolução de conflitos.
As diferenças culturais das partes interessadas no projeto devem ser pesquisadas e levadas em consideração na formação e integração do time do projeto.
Na formação da equipe, pessoas que são confiáveis e respeitadas pelos demais membros devem ser colocadas em posições de gerenciamento, buscando manter uma estrutura de gerenciamento simples, que facilite a comunicação e a tomada de decisão em cada unidade do projeto.
Deve existir um processo de gerenciamento da configuração com representantes de todas as partes funcionais e organizacionais interessadas, para revisão, aprovação ou rejeição de mudanças no software, garantindo a execução dos processos, uso de ferramentas padronizadas, controle da documentação necessária e comunicação aos demais membros do projeto.
Deve existir um plano de integração e manutenção definindo a estratégia, tipos de ferramentas, mecanismos de testes, critérios de aceitação, documentação e suporte remoto necessário, dos membros das diferentes unidades distribuídas do projeto, para integrar e realizar a manutenção dos componentes do software desenvolvido.