Desenvolvimento Global de Software Mestrado de Informática / UFPB Francilene Procópio Garcia, D.Sc. [email protected] Desenv. Global Software - Parte I Introdução: A economia do software global Na entrada do século XXI, em todo o mundo, soam questões como: Quais países são os que mais dependem da tecnologia? Quem está seguro? A infraestrutura básica de componentes caminha na direção correta? Se as questões fossem sobre finanças - e não sistemas de software - talvez a resposta emergisse mais facilmente (qual país tem o mercado financeiro mais estável? Qual país tem infraestrutura financeira mais robusta?) Vamos levantar alguns aspectos da economia do software global (ou da TI) Introdução: Alguns números Qual país tem a maioria dos profissionais de engenharia de software? Fácil … Estados Unidos Qual país tem os engenheiros de software mais produtivos? Indía? Errado… Canadá Os EUA estão perdendo ou ganhando em termos de MIPshare a nível mundial? Em 2000, os EUA decresceram de 37% para 30% Qual país melhor suporta o desenvolvimento de negócios em TI? Nova Zelândia, é a resposta hoje Introdução: A nova realidade global (24x7) O desenvolvimento de software hoje acontece em todo o mundo, 24 horas por dia e 7 dias por semana A dinâmica de negócios em software em termos do fluxo de trabalho, movimento de produtos e mobilidade de profissionais é verdadeiramente global Se considerarmos que a engenharia de software seja a competência central da era da informação, um aspecto importante para os países medirem sua competitividade é dispor deste tipo de informação desempenho dos engenheiros de software em termos de: produtividade, qualidade e capacidade para projetos locais e entre países Introdução: Nova forma de gestão de competências e competitividade Gestão remota: a habilidade de gerenciar atividades geograficamente distribuídas Gestão de consumidores: desenvolvimento de relacionamentos mais refinados Gestão do processo: eficiência na implementação de estratégias globais Gestão da cadeia de valor: a habilidade de desenvolver parcerias Gestão de tecnologias: a habilidade de explorar o potencial disponível e ser produtivo Gestão de custos: a habilidade de maximizar os lucros a partir da gestão de custos Introdução: Variações são evidentes Enquanto os EUA exibem um misto de gestão e competências, na Europa percebe-se uma alto grau de especialização (Irlanda e França), e no Oriente fortes indícios de terceirização (India) Não importa que plataforma ou ambiente se utilize - qualidade é uma peça chave Qualidade de código e de produto é uma manifestação clara do processo de software e dos hábitos dos indivíduos Quando se expressa qualidade em termos de defeitos por linhas de código as diferenças são significativas de país para país (EUA - 1,6; Japão - 1,8; Alemanha - 2,2; Israel - 2,3; França - 2,5; India - 2,6; Irlanda - 3,7; Canadá - 3,9) Do ponto de vista global, as variações em produtividade, custo, desempenho, e capacidade de trabalho são indicadores claros dos avanços da economia global de software Introdução: É possível atingir o desenvolvimento global de software? Não importa o quanto avance a automação do processo de criação de software ou o quanto se desenvolvam novas tecnologias e ferramentas de suporte ao processo de software - o futuro é claro: as pessoas continuaram desenvolvendo software A única coisa padrão até hoje em TI é o tamanho de um byte. No contexto da eng. de software existem pelo menos 5 padrões e 3 modelos de de capacidade de engenharia de sistemas No âmbito do desenv. global, as diferenças culturais podem causar variações na semântica de algumas definições entre países Tais diferenças devem resultar em estágios no mesmo projeto sendo implementados de forma variada para as diferentes culturas Introdução: É possível atingir o desenvolvimento global de software? Alguns fatores devem ser mantidos nas nossas mentes: O tipo de software a ser implementado. O desenvolvimento de um grande sistema é um bom exemplo de um processo distribuído. O sistema e as ferramentas podem ser distribuídos entre parceiros segundo a mesma especificação técnica Gestão de projeto. Um processo de gestão flexível e distribuído o suficiente assegura uma cooperação salutar entre os diversos grupos. Idealmente, todas as partes envolvidas devem fazer uso dos mesmos métodos e ferramentas, seguindo as mesmas regras de controle e qualidade. Na medida do possível, decisões sobre o produto, seus algorítmos, desempenho, funcionalidades, e/ou interface necessitam serem tomadas nas fases iniciais do processo e, nas fases finais elas devem ser revistas e aceitas Introdução: É possível atingir o desenvolvimento global de software? Alguns fatores devem ser mantidos nas nossas mentes: Qualidade. A qualidade dos componentes é essencial ao processo de criação num ambiente virtual assíncrono. Os resultados obtidos com o processo de software, a sua aderência às necessidades do mercado, o treinamento dos usuários, e a melhoria contínua do processo de gestão e do próprio software possuem uma grande influência sobre a utilidade da solução e satisfação do cliente Formalismos. Padrões, métodos e tecnologias apropriados devem ser escolhidos por pessoas que gerenciam o projeto e devem ser adaptados conforme a as demandas do projeto. Não devem ser vistos como uma religião Tecnologia. As plataformas de comunicação e cooperação entre grupos não estão maduras ainda. Video conferências serão importantes. Contatos face-a-face ainda serão importantes como suporte às tecnologias formais Posição da indústria Por quê a indústria de software está mudando? Oferta e demanda - a demanda por serviços de software tem sido maior que a oferta Número de Número de profissionais de s/w disponíveis micros disponíveis 1970 1980 Demanda por software 1990 Hoje, muitas empresas já consideram economicamente atrativo fazer outsourcing ou desenvolver software de forma cooperativa em outros países Posição da indústria Por quê a indústria de software está mudando? Mercado global - o que se vê hoje é um deslocamento crescente de um mercado predominantemente Americano para um mercado global A Microsoft, por exemplo, já possui 55% de sua produção centrada nas vendas fora dos EUA Resposta do Mercado Mercado do vendedor Mercado do comprador Expectativas do Consumidor Os clientes cada vez mais vão demandar software para suas necessidades... Posição do mercado O desenvolvimento global de software também ocorre devido aos novos arranjos de negócios - parcerias estratégicas e joint ventures Uma parceria estratégica, ou aliança, traz situações onde um produto existente seja modificado ou suportado por empresas que não fizeram parte do desenvolvimento original Em geral, as interfaces entre clientes e o feedback do mercado são compartilhados entre parceiros Um dos parceiros pode ser o responsável pelo desenvolvimento e manutenção; outro pelo relacionamento com clientes … As joint ventures resulta da união de empresas diferentes que passam a assumir responsabilidades fiscais conjuntas São dependentes das legislações de cada país - um parceiro deve trazer a tecnologia, outro o capital, um outro pode prover recursos humanos... Posição do mercado Parceiro Desenvolvimento de subsistemas Geração da documentação Colocação do produto no mercado local Parceiro Controle de versões Suporte on-site Manutenção Localização do produto Geração de documentação Desenvolvimento de subsistemas Colocação do produto fora do mercado local Aliança estratégica Parceiro da joint venture • Retorno financeiro • Tecnologia • Estratégia • Investimento capital • Investimento RH Empresa criada joint venture Parceiro da joint venture Joint Venture • Retorno financeiro • Tecnologia Produção global de software Ciclos de Localização Entrada: Linha de produção Valor/Preço Necessidades e Valores de um Mercado Global Saída: Desempenho do produto Entrada: Info sobre Clientes e Concorrentes Time to Market Produção Global de Software Tecnologia Entrada: Componentes reusáveis, ferramentas, etc. Capacidade de Inovação Saída: Impacto do produto Saída: Plano de evolução Mudanças à vista Parcerias estratégicas - não requerem muito investimento em capital, porém a integração de estruturas e práticas é fundamental Joint ventures - vão exigir alguns ajustes culturais - todos devem entender o que cada parceiro traz e espera da nova empresa Empresas globais - num ambiente diverso (gestão, práticas de desenvolvimento, ferramentas, etc) a gestão conjunta do processo será um diferencial importante, inclusive com a superação de barreiras culturais Desenvolvimento in-house - devem se manter, sempre uma opção para projetos de software específicos - porém as empresas devem se manter competitivas e manter-se em dia com as mudanças tecnológicas Organização do esforço de desenvolvimento Fazer uso de práticas de desenvolvimento cooperativo é uma estratégia em alta nos dias hoje. Porém, as empresas devem saber que componentes ou atividades do desenvolvimento podem ser realizadas por terceiros Como decidir? Fatores técnicos e não técnicos devem ser considerados Dependendo do projeto, a divisão de esforços pode ser definida segundo uma combinação de elementos: parcerias de negócios fases do desenvolvimento de software aspectos da arquitetura do produto experiência das equipes investimentos de capital Organização do esforço de desenvolvimento Bases para a divisão de esforços Prós Contras Comentários Parcerias de negócios Percentagem de esforços/orçamento Motivada pela experiência técnica Definida pelo potencial de investimentos e seu ROI Boas chances de sucesso se existe alguma liderança técnica O potencial do desenvolvimento é fortalecido se as empresas encontramse alinhadas com o processo É frequente; muitas empresas preferem este formato de atuação Pode não estar alinhada com a área foco da empresa - um risco a ser considerado Pode não alcançar os objetivos financeiros Um investimento de risco vs. Retornos vs. Custo da oportunidade A necessidade de mais comunicação pode retardar o projeto É típico entre empresas menores e grandes contratos envolvendo o Governo Dificuldades de gestão se a parte terceirizada for muito grande (funcionalidades) Muito usado na indústria Fases de Desenvolvimento Aspectos arquiteturais Organização do esforço de desenvolvimento Bases para a divisão de esforços Prós Contras Comentários Conhecimento e Experiência Baixo risco técnico, alta eficiência É melhor gerenciado quando implementado para subsistemas maiores e críticos É muito comum o seu uso para fixação de áreas de responsabilidade Liderança Bons líderes agregam valor A liderança pode não estar alinhada com as habilidades técnicas da organização É recomendada quando grandes investimentos são realizados Pessoal Oferece bons resultados nas fases iniciais do projeto Quando o grupo é inexperiente pode haver uma longa curva de aprendizagem É mais comum em projetos com cronogramas muito fechados Tools e Recursos de Capital Durante o desenvolvimento do software, tools e capital não são limitantes Algumas vezes a empresa que detém as tools e o capital é inexperiente Dependente da parceira de negócio e da fixação dos investimentos Organização do esforço: Fases de desenvolvimento É muito comum dividir os esforços segundo as fases de desenvolvimento do ciclo de vida do processo em uso: Algumas empresas parceiras são mais experientes em certas áreas (projeto do sistema, integração e teste, suporte ao cliente) Contrato Requisitos Arquit. Projeto e Projeto baixo nível alto nível Empresa com experiência em projeto Codif. Teste Teste integração unidade Empresa com experiência em codificação Teste Instalação e aceitação suporte Empresa com experiência em teste Empresa com experiência em suporte Organização do esforço: Aspectos arquiteturais É o formato mais comum usado para divisão de esforços em projetos terceirizados (outsourcing): Pratica-se um princípio já bem conhecido - “Divida e conquiste” Executivo Escalonador Lista Atividades Gerente Tarefas Prioridades Empresa B Gerente Pacote Comunicação Eventos Empresa A Organização do esforço: Conhecimento e experiência Também é popular. É aplicado quando as empresas demandam por alguns serviços que são dificéis de obter: Em geral, um esquema arquitetural é usado para melhor definição da parceria Executivo Escalonador Lista Atividades Tarefas do Disco Ótico Gerente Tarefas Prioridades [L] [P] Empresa Terceira Gerente Pacote Comunicação Eventos [A] [X] [X] [X] [X] Com base na experiência Organização do esforço: Liderança Embora não muito frequente, esta abordagem parq divisão de esforços é muito visível em empresas com alta experiência no mercado e grupos competentes Recomenda-se a discussão de três questões chaves: A empresa detém conhecimento sobre o domínio do problema? Possui uma visão acerca de sua solução? A empresa possui recursos para viabilizar o projeto? A empresa enconta-se comprometida com as fases do projeto? Desenvolvimento Global: Comunicação Comunicação é um aspecto determinante quando se gerencia projetos de software desenvolvidos em diferentes locais Existem duas dimensões para se determinar se um método de comunicação é efetivo: os envolvidos devem ter meios para receber e transmitir mensagens verbais ou textuais Tempo - o quanto oportuna é a informação recebida Conteúdo - o volume de informação escrita ou verbal comunicada e o que pode ser lido junto com ela (expressões faciais e tons de vozes em casos verbais; nível de formalidade em casos escritos) Alguns métodos de comunicação combinam conteúdos verbais e não-verbais Desenvolvimento Global: Comunicação Conteúdo Alto Face a face Conferência telefone Video conferência Correio e-Mail e-Mail de Voz Baixo Tempo Baixo Alto Desenvolvimento Global: Comunicação Gerador Receptor Próxima ao tempo real Modelo face a face Gerador Receptor Modelo conferência por telefone Gerador Receptor Modelo video conferência Gerador Receptor Modelo comunicação eletrônica Muito atraso no tempo de recepção Pouco conteúdo Muito conteúdo Comunicação fuzzy Desenvolvimento Global: Comunicação eletrônica O meio mais popular em organizações virtuais: WEB e Internet - muito útil, este tipo de estrutura custa relativamente pouco se comparado ao seu uso relativo. Em geral, as empresas organizam um ambiente específico para troca de informações sobre o projeto. A segurança é um aspecto chave a ser considerado Redes dedicadas (WANs e LANs) - o modelo de comunicação de uma rede dedicada possui muitas das características da Web e Internet, porém neste caso o controle de acesso é mais eficaz. Porém, para algumas empresas os custos com equipamentos, linhas de comunicação, software e manutenção são proibitivos Outros aspectos a serem considerados: Diferenças culturais Fuso horário Desenvolvimento Global: Integração Em qualquer situação de projetos desenvolvidos por várias “cabeças”, os grupos virtuais devem dispor de métodos de comunicação, algum plano de gestão de configuração deve ser estruturado e ferramentas de apoio são disponibilizadas ALERTA! A integração de tudo isto é o mais difícil em projetos deste tipo Será necessária a criação de uma estratégia para integração sem maiores riscos aquisição das ferramentas mais adequadas uso correto de produtos para testes definição de critérios de aceitação definição do nível de documentação definição do nível de suporte necessário Desenvolvimento Global: Estratégias para Integração Local Virtual 1 Local Virtual 3 Local Virtual 1 Main site Feature Feature completa Local Virtual 3 Local Virtual 1 Local Virtual 3 Main site Updates Updates Feature Main site Updates Local Virtual 2 Local Virtual 4 Descentralizado • Pequenos grupos • Ciclos curtos Local Virtual 2 Local Virtual 4 Centralizado • Ciclos longos • % pequeno do s/w sofre mudanças Local Virtual 2 Local Virtual 4 Just-in-time • Projetos incrementais • Ciclos curtos centrados em funcionalidades Desenvolvimento Global: Tools para Integração Algumas ferramentas são relevantes na integração do projeto virtual: Gestão de versões, gerenciando as versões em todas os locais de desenvolvimento e suportando o desenvolvimento distribuído. Tais ferramentas devem permitir a entrada de arquivos de fora de seu ambiente host Integração, ferramentas de integração são úteis para junção dos n componentes do software. Podem gerar releases com módulos ainda não fechados e com erros; resolvem problemas de referência não definidas; e acionam versões iniciais de módulos via um linker. Tais ferramentas devem se capaz de recuperar componentes externos Depurador, ferramentas de depuração devem ser capazes de rastrear os múltiplos módulos distribuídos entre os ambientes Desenvolvimento Global: Testes para Integração Dois tipos de testes devem ser praticados Testes nos módulos desenvolvidos num dado local, Testes para os módulos já terminados Os testes devem apresentar alguma forma de documentação que indique o que foi testado e o que ainda estar para ser testado Desenvolvimento Global: Critérios de aceitação para Integração Definem uma lista de critérios que determinam quando um dado componente do software é aceitável para ser integrado ao produto Devem ser definidos antes do início da tarefa de integração e são vitais por três razões chaves: Diferenças culturais (diferentes formas de integração) Os parceiros necessitam de alguma forma de evento (milestones) que definam a disponibilização do produto Em geral, existem algumas dúvidas ou indefinições quanto aos requisitos levantados para o produto Requisitos do software Codificação Critérios de aceitação Planos de Testes Testes Entrega Desenvolvimento Global: Critérios de aceitação para Integração Os critérios de aceitação, em geral, dependem: Das expectativas do consumidor/mercado Do tempo disponível Do capital disponível Do estágio do software Desenvolvimento Global: Documentação para Integração É extremamente importante para auxílio à integração, deve incluir: Uma matriz de rastreamento. Define as funções o software deve atender Descrição do ambiente de integração. Descreve as ferramentas, processos e versões dos suítes de testes, arquivos de configuração, e outras ferramentas de suporte à integração Matriz de versões dos módulos. Identifica cada módulo do software e a versão da configuração usada para construir a release. Este tipo de matriz pode ser encontrada num linker ou num ambiente de SCM Discussão sobre artigo WHAT CHARACTERIZES DISTRIBUTED DEVELOPMENT? – 1 aluno WHAT HAVE COMPANIES LEARNED FROM DSD? – 2 alunos DECISION CRITERIA FOR A DISTRIBUTED ENVIRONMENT – 1 aluno METHODOLOGIES AND TECHNIQUES IN DSD – 1 aluno OVERVIEW OF TOOLS AND TECHNOLOGY - 1 aluno