Samferdselsdepartementet
1 Samferdselsdepartementets budsjett og regnskap for 205 (tall i mill. kroner)*
O esforço colectivo só pode ser bem sucedido se houver uma eficaz coordenação dos diversos esforços individuais. A coordenação consiste na orientação dos esforços individuais, para a realização de um conjunto explícito de objectivos comuns e na integração e interligação entre as diferentes partes de uma organização com o intuito de executar um conjunto de tarefas [Kraul95].
Como já se referiu anteriormente, desenvolver software é um trabalho colectivo, executado por uma equipa de profissionais com competências diversas. Para assegurar a eficácia da equipa de desenvolvimento de software e para garantir a qualidade do software final, é essencial uma coordenação eficaz das várias tarefas.
Segundo Kraul, as várias pessoas que a trabalham num projecto de software devem concordar numa descrição comum do que estão a construir, partilhar a informação e interligar as suas actividades [Kraul95]. Os membros da equipa de desenvolvimento de software, devem possuir uma visão comum das funcionalidades requeridas do software, da sua organização e da forma como esse sistema interligar-se-á com outros sistemas.
Desenvolver software de qualidade, exige uma coordenação apurada dos vários esforços envolvidos [Kraul95]. No entanto, este nível de coordenação é difícil de atingir, como demonstra o estudo de Curtis, Krasner e Iscoe [Curtis88].
Existem algumas características do desenvolvimento de software que dificultam e geram problemas de coordenação nas equipas [Kraul95]:
Dimensão das aplicações
Inúmeras aplicações informáticas são de grande dimensão, tornando inviável a compreensão e o seu desenvolvimento por uma única pessoa ou por um grupo pequeno de pessoas. Se os projectos de software fossem pequenos, a coordenação seria facilitada, porque a pessoa ou a pequena equipa responsável pelo seu desenvolvimento, possuiria uma consciência constante do trabalho executado e do trabalho futuro.
No entanto, esta situação não é viável para a maioria dos sistemas informáticos actuais que se medem em milhões de linhas de código. O esforço de desenvolvimento de software desta escala implica inevitavelmente a necessidade de especialização e de divisão do trabalho.
A divisão do trabalho em equipas cria barreiras à troca de informação entre os grupos, gera o aparecimento de sentimentos de pertença ao grupo em que se trabalha, mas reduz a coesão da equipa como um todo e facilita o aparecimento de visões diferentes do
software. Barreiras geográficas, organizacionais ou sociais limitam as oportunidades de partilha de informação e de aprendizagem colectiva.
Incerteza nas especificações
A incerteza que afecta um projecto de software, consiste na incapacidade de prever as funções que o software e os engenheiros de software devem realizar. Ao contrário de uma linha de produção, o desenvolvimento de software é um esforço não rotineiro. Muitos projectos são únicos por si só, pois não existem sistemas anteriores para modificar ou evoluir, nem existem protótipos que facilitem a sua compreensão.
A volatilidade das especificações dos requisitos do software é a principal fonte de incerteza. As alterações dos requisitos ocorrem porque o mundo exterior, que o software deve representar, não é estático. Os requisitos modificam-se devido a transformações dos requisitos de negócio, das necessidades e desejos dos utilizadores ou das tecnologias de informação e comunicação.
Frequentemente os utilizadores apenas se apercebem das capacidades e limitações do software quando começam a utilizá-lo. Este facto leva a alterações dos requisitos já em fases muito avançadas do processo, em que se torna mais dispendioso modificar o software.
A incerteza no desenvolvimento de software também resulta da natureza incompleta das especificações. As especificações são incompletas porque os engenheiros de software possuem um conhecimento limitado do domínio do software. Durante a fase de levantamento dos requisitos, os utilizadores são entrevistados por engenheiros com diferentes níveis de conhecimento do negócio. Algumas das necessidades dos utilizadores não serão descobertas pelos engenheiros e algumas descobertas dos engenheiros de software não serão reflectidas nas suas especificações.
Um dos problemas de coordenação num projecto de software é a necessidade de arquitectos de software e programadores tomarem decisões baseadas em informação que não lhes está disponível nos documentos de especificações, mas que os analistas, utilizadores ou outros membros da equipa podem possuir.
Um último factor gerador de incerteza num projecto de software, são as diferentes concepções que as diversas equipas possuem sobre o software a construir. Os vários grupos participantes no processo podem representar e entender o software e a sua organização de formas muito distintas, este facto torna a reconciliação das várias visões difícil mas necessária.
Interdependência entre módulos
Um sistema de software implica uma precisa interligação entre os seus diversos componentes. O software moderno é composto por inúmeros módulos que devem interligar-se perfeitamente para que o software cumpra a sua missão.
Uma deficiente coordenação entre os diversos subgrupos encarregues do desenvolvimento dos módulos, pode ter consequências desastrosas nas interligações entre os módulos [Kraul95].
Comunicação informal
Kraul e Streeter defendem que, a prática e a teoria organizacional sugerem que os esforços da engenharia de software, não foram suficientes para eliminar todos os problemas de coordenação em projectos de grande dimensão [Kraul95].
A combinação da grande dimensão, incerteza e interdependência entre os módulos, levanta desafios de coordenação que não existem em tarefas mais rotineiras. As técnicas sugeridas pela engenharia de software: ferramentas técnicas, modularização e procedimentos formais, embora tenham contribuído para um incremento da produtividade, apenas resolveram parte dos problemas de coordenação das equipas de software.
Num projecto de desenvolvimento de software, existem comunicações formais e informais. Qualquer um dos tipos de comunicação é adequado a uma certa classe de actividades.
Embora a comunicação formal seja necessária num projecto de software, uma grande fatia da comunicação, ocorrida no seio de uma equipa, é informal. A comunicação informal é o principal meio de partilha de informação, num ambiente de desenvolvimento de software. A facilidade de aquisição de informação é tão importante como a qualidade da informação na determinação das fontes de informação usadas. A distância física é uma barreira à troca de informação entre as pessoas. A obtenção de informação de coordenação, através de comunicações informais é vital para o desempenho das pessoas e das organizações em ambientes de incerteza.
Os factores dimensão, incerteza, interdependência e comunicação informal determinam fortemente a eficácia da coordenação num grande projecto de software. O sucesso de um projecto de software depende da precisa coordenação dos seus vários elementos.
Um sistema de suporte ao desenvolvimento de software deve ter em consideração estes factores e proporcionar funcionalidades que potenciem a eficácia da equipa, facilitando a comunicação directa entre os seus membros, a troca de conhecimento e documentos.
Capítulo 4
4 Requisitos do desenvolvimento de software em
equipa
Este capítulo assenta no conhecimento descrito nos dois capítulos anteriores. O capítulo dois descreveu a forma como se deve organizar o esforço de desenvolvimento de software. Defendeu-se, nesse capítulo, a utilização de um processo, mais ou menos formal, que oriente o trabalho. No capítulo 3, descreveu-se a dinâmica de trabalho de uma equipa de desenvolvimento de software.
Este capítulo consolida um conjunto de requisitos importantes para um eficiente desenvolvimento de software. Estes requisitos servirão de base para a definição de uma arquitectura de um sistema de suporte ao desenvolvimento de software. Este sistema de suporte ao desenvolvimento de software terá duas grandes vertentes: workflow e groupware.