Title: Desenvolvimento Global de Software
1Desenvolvimento Global de Software
- Mestrado de Informática / UFPB
- Francilene Procópio Garcia, D.Sc.
- francilene_at_ieee.org
Desenv. Global Software - Parte I
2Introduçã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)
3Introduçã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
4Introduçã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
5Introduçã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
6Introduçã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
7Introduçã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
8Introduçã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
9Introduçã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
10Posiçã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 - Hoje, muitas empresas já consideram
economicamente atrativo fazer outsourcing ou
desenvolver software de forma cooperativa em
outros países
11Posiçã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
Os clientes cada vez mais vão demandar software
para suas necessidades...
12Posiçã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...
13Posição do mercado
Parceiro
Parceiro
Aliança estratégica
Joint Venture
14Produçã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
Produção Global de Software
Time to Market
Entrada Info sobre Clientes e Concorrentes
Saída Plano de evolução
Tecnologia
Capacidade de Inovação
Entrada Componentes reusáveis, ferramentas, etc.
Saída Impacto do produto
15Mudanç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
16Organizaçã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
17Organização do esforço de desenvolvimento
18Organização do esforço de desenvolvimento
19Organizaçã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)
20Organizaçã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
Empresa B
Escalonador
Gerente Tarefas
Gerente Pacote
Comunicação
Lista Atividades
Prioridades
Eventos
Empresa A
21Organizaçã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
Tarefas do Disco Ótico L P A X
X X X
Com base na experiência
22Organizaçã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?
23Desenvolvimento Global Comunicação
- Comunicação é um aspecto determinante quando se
gerencia projetos de software desenvolvidos em
diferentes locais - os envolvidos devem ter meios para receber e
transmitir mensagens verbais ou textuais - Existem duas dimensões para se determinar se um
método de comunicação é efetivo - 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
24Desenvolvimento Global Comunicação
25Desenvolvimento Global Comunicação
26Desenvolvimento 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
27Desenvolvimento 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
28Desenvolvimento Global Estratégias para
Integração
Main site
Main site
Main site
29Desenvolvimento 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
30Desenvolvimento 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
31Desenvolvimento 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
32Desenvolvimento 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
33Desenvolvimento 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
34Discussã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