Title: Desenvolvimento Colaborativo de Software
1Desenvolvimento Colaborativo de Software
- Cleidson de Souza
- Departamento de Informática
- Universidade Federal do Pará
- cdesouza_at_ufpa.br
2Roteiro
- Desenvolvimento Colaborativo de Software
- Colaboração em Engenharia de Software
- A Importância da Arquitetura de Software
- O Estudo de Caso MCW e BSC
- Desenvolvimento Global de Software
- Definição
- Motivação
- Problemas
- Soluções
3Desenvolvimento de Software
- Desenvolvimento de software é uma tarefa
inerentemente colaborativa - Diferentes habilidades são necessárias
- Analistas tem de compreender o cliente,
projetistas precisam verificar diferentes
aspectos (tolerância a falhas, segurança,
escalabilidade, flexibilidade, etc) e assim por
diante - Diferentes reuniões para a coordenação das
atividades - Interação com outros sistemas (sociais,
culturais, e organizacionais)
4Evidências Empíricas
- Comunicação formal e informal formal exige mais
de 50 do tempo dos engenheiros de software
(Perry et. al, 1994) - Atividades colaborativas de uma maneira geral
correspondem a 70 do tempo dos desenvolvedores
de software (Vessey and Sravanapudi, 1995) - Problemas de comunicação e coordenação são um dos
3 principais problemas em desenvolvimento de
software(Curtis et al. 1988).
5Evidências Empíricas (2)
- Utilização de ferramentas de GCS para coordenação
(1995) - Reuso de software (1999)
- Reuso de arquiteturas de software
- Utilização de PowerPoint pelos arquitetos de
software - Necessidade de convencer times de
desenvolvimento, clientes e outros a implementar
uma arquitetura - Necessidade de disponibilizar arquiteturas
através da Web - Entre outros.
6Ferramentas de Apoio a Colaboração
- Gerência de configuração
- CVS, Subversion, ClearCase Vários engenheiros de
software podem fazer modificações no software em
paralelo - Processo de software
- RUP, WebAPSEE Estabelece papéis, prazos,
artefatos a serem empregados na atividade de
desenvolvimento de software
7Jazz (IBM)
8Ariadne
9Práticas colaborativas
- Programação em Pares, da programação extrema
- Decomposição modular e separação entre
especificação das interfaces e sua implementação - Inspeção de software
- Etc.
10O caso MCW
- Um projeto MCW
- 5 sub-times arquitetos, testes, cliente,
servidor e infra-estrutura - A separação entre os times era feita através de
APIs (interfaces) - O time servidor implementava as APIs necessárias
ao time cliente - O time de infra-estrutura implementava serviços
comuns à todos
11O caso MCW (2)
- Ferramentas
- Sistema de gerência de configuração (Grinter,
1995) - Quem está alterando que partes do código
- Quem alterou que partes do código
- Lista de emails
- Notificação de modificações nas interfaces
(APIs) - Procura de experts em determinados componentes
12O caso MCW (3)
- A organização adotou um modelo de reuso de
componentes, portanto os vários subtimes do
projeto MCW tinham de re-utilizar componentes da
organização - Como conseqüência, diversas problemas de
comunicação - Times que não estavam cientes de seus clientes,
dos times que iriam utilizar suas APIs - Time que não estavam cientes de seus servidores,
do times que iriam implementar as APIs que eles
precisavam
13O caso MCW (4)
- Lição a ser lembrada
- Interação entre os aspectos técnicos (APIs,
modularidade, arquiteturas de software, etc) e os
aspectos não-técnicos (organizacionais, sociais,
etc) necessários a qualquer sistema computacional
14A Importância da Arquitetura
- Dependências
- Entre os artefatos produzidos durante o processo
de desenvolvimento e - Entre as atividades do processo de
desenvolvimento - Coordenação pode ser definida como a gerência de
dependências (Malone e Crowston, 1995).
15A Importância da Arquitetura (2)
- Modularidade
- a divisão de um sistema em partes para que
possamos tratar estas partes isoladamente. - Um mecanismo para lidar com a complexidade no
desenvolvimento de produtos, não apenas software. - Um sistema deve ser dividido em módulos para
facilitar sua construção - Parnas propôs o princípio de ocultamento da
informação como um critério indicando como os
módulos devem ser separados.
16A Importância da Arquitetura (3)
- Módulos não devem expor as suas partes que podem
mudar (seus detalhes de implementação) para que
eles não afetem seus clientes - Este princípio também facilita a coordenação do
desenvolvimento de software, porque minimiza a
necessidade de comunicação entre os
desenvolvedores
17A Importância da Arquitetura (4)
- A arquitetura do software define então, não
somente os aspectos técnicos do software, mas
também define como a coordenação do software será
feita - Se um componente interage com diversos outros
componentes isto significa que o time que
implementa este componente terá de interagir com
diversos outros times - Times que interagem com freqüência ou que estão
colocados deveriam implementar módulos que estão
conectados.
18A Importância da Arquitetura (5)
- Lição a ser lembrada
- A definição da arquitetura de um software também
define os padrões de interação e colaboração
entre os engenheiros de software - Isto se torna mais importante em projetos
distribuídos de software
19Desenvolvimento Distribuído de Software
- Significa que o desenvolvimento de software está
distribuído em diversos sítios diferentes
localizados em cidades diferentes - Porque é interessante?
- Pela dificuldade da coordenação das atividades
- O caso SERPRO
- Clientes em Brasília
- Desenvolvimento em Belém
20Desenvolvimento Global de Software
- Significa que o desenvolvimento de software está
distribuído em diversos sítios localizados em
países diferentes e até mesmo diferentes
continentes. - Exemplo
- Lucent tem desenvolvimento nos EUA, Alemanha,
Inglaterra, Índia e Brasil - IBM desenvolve nos EUA, Irlanda e Canadá, e testa
na China - Motorola desenvolve nos EUA e testa no Brasil
(Recife) - Dell desenvolve software nos EUA e no Brasil
(POA) - Siemens desenvolve software na Alemanha, Brasil,
EUA, Polônia, e vários outros países
21Desenvolvimento Global de Software - Motivação
- Compra de empresas e união (merge) de empresas
para complementar produtos desenvolvidos por
companhias - Para a participação em determinados mercados,
certas leis requerem o desenvolvimento de certas
operações localmente - Partes da organização devem estar perto de onde o
mercado para elas existe - Competição por profissionais competentes
22Desenvolvimento Global de Software - Motivação
- Organizações acreditam que a distribuição possa
levar a desenvolvimento de software em tempo
integral (round-the-clock development), o que
levaria a redução de custos - Quando alguém pára de desenvolver na California,
outra pessoa começa a desenvolver na Índia - Chamado de siga o sol (follow-the-sun)
- Em teoria diminui o tempo de desenvolvimento em
50
23Desenvolvimento Global de Software - Problemas
24Desenvolvimento Global de Software - Problemas
- Diferença em Fusos Horários
- Comunicação
- Informal
- Linguagem
- Coordenação
- Cultura
- Confiança
- Encontrar pessoas (experts)
25Efeitos da Distância
- Dificuldade na comunicação, através de email ou
em horários inadequados devido ao fuso horário - Perda da comunicação informal, que é essencial
para a coordenação do projeto - Dificuldade de saber quando contactar uma
determinada pessoa - Dificuldade de saber quem é responsável por um
determinado componente (quem projetou ou
implementou) para resolver um problema.
26Desenvolvimento Global de Software - Problemas de
Cultura
- Culturas diferentes geralmente tem comportamento
diferente - Alemães ligam para um desenvolvedor e dizem Tem
um problema no seu código. - Os ingleses esperam uma abordagem mais educada
onde uma pessoa sugere problemas no código da
outra - Diferenças no idioma e na forma de utilização do
idioma - Feriados e normas religiosas são diferentes
27Desenvolvimento Global de Software - Problemas
- Em resumo
- Desenvolvimento de software distribuído é mais
lento que desenvolvimento quando colocado
(Herbsleb e colegas, 2000) - Mas, é necessário!
28Desenvolvimento Global de Software - GSP
- Global Software Project (GSP)
- Projeto de desenvolvimento distribuído realizado
por estudantes de mestrado - Siemens testa tecnologias, práticas, etc
- Casos de sucesso são replicados na organização
29Desenvolvimento Global de Software - Soluções
(Carmel)
- Tecnologias Colaborativas e Infra-Estrutura de
Tele-Comunicações - Dinâmicas de Grupo para Motivação de Times (team
building) - Pessoas que viajam para outros sites com certa
frequência para servem como ponte para a
facilitar a colaboração entre os sites - Ajuda a estabelecer confiança entre os times
30Desenvolvimento Global de Software - Soluções
(Carmel)
- Lideranças
- Arquitetura do Software e Alocação de Tarefas
- Utilização de Metodologias de Desenvolvimento de
Software (Processo de Software)
31Desenvolvimento Global de Software - Soluções
32Conclusões
- Desenvolvimento de software é uma atividade
colaborativa que requer ferramentas, abordagens,
e técnicas para seu sucesso - Como treinar profissionais?
- Desenvolvimento de software é hoje uma tarefa
globalizada - Problemas difíceis, mas as soluções estão sendo
encontradas - Excelente Oportunidade de Negócios!
33Desenvolvimento Global de Software - Para saber
mais
- IEEE Software, vol. 18, Issue 2, March/April
2001, Special Issue in Global Software
Development. - Car, 1999 Carmel, Erran. The explosion of
global software teams. Computerworld magazine,
Dec 08, 1997. - Car, 2001 Carmel, E. Global Software Teams a
framework for managerial problems and solutions.
To appear as chapter for the book Global
Information Technology And Electronic Commerce
Issues for the New Millenium. Edited by P.
Palvia, S. Palvia and E. Roche. To be published
by Ivy League Publishing. - Conferência sobre o tema http//www.icgse.org
34Cronograma Atualizado
- 30/01/06 - Considerações Finais
- 01/02/06 - Avaliação. Assunto Todo material
visto em sala de aula - Início dos Seminários em 06/02
- Apresentação?