Agradecimentos
Este livro não seria possível sem a colaboração das seguintes pessoas e
organização:
Professor Antônio Loureiro Gil, cuja comunhão de idéias e abordagens validaram
muitos dos conceitos introduzidos no texto;
David Card, Diretor de Métricas e Processos da CSC, cujos ensinamentos
constituiram-se no grande incentivo para o meu auto-aperfeiçoamento;
Jaime Roberto Perez Herrera, Gerente Técnico de Projetos da UNPROJETOS -
SP da CTIS -Informática e Sistemas Ltda, cuja apurada capacidade de análise
crítica e lógica foi decisiva para a organização final do texto;
Murilo Maia Alves, Gerente de Garantia da Qualidade da CTIS - Informática e
Sistemas Ltda, cujo conhecimento linguístico, que não é o meu forte, foi também
decisivo para a arrumação semântica e gramatical do texto;
Tereza Cristina Maia Fernandes, minha esposa, amiga , companheira e
colaboradora, cujo profundo conhecimento matemático, avalizou muitos dos
algoritmos colocados neste texto;
CTIS-Informática e Sistemas Ltda pelo apoio material dado para a elaboração
desta obra.
Capítulo
1
COMPREENDENDO A DIMENSÃO DO
SOFTWARE E DE SUA GESTÃO
Apesar da disciplina de software já contar com pelo menos cinquenta anos de progresso ,
a abordagem para o seu desenvolvimento ainda tem se fundamentado em métodos e
práticas artesanais . Ao contrário dos que pregam que o desenvolvimento de software
deve ser encarado como um esforço de engenharia, infelizmente não há correspondência
com a realidade, talvez com raríssimas exceções e principalmente em organizações cuja
finalidade ou negócio é o software.
No Brasil em especial, mesmo com o acesso ao que há de mais atual em termos
de ferramentas de desenvolvimento , vivemos eternamente a crise do software, isto é:
baixa qualidade, prazos e orçamentos ultrapassados e métodos gerenciais
igualmente empíricos.
A nosso ver a crise do software é uma crise eminentemente gerencial, que
muitas vezes transcende as responsabilidades dos gerentes de software, pois sem o
patrocínio à mudanças, vindo da alta administração da empresa, dificilmente uma
inovação ou implantação de métodos de gestão eficazes, é bem sucedida.
Entretanto com a importância econômica cada vez maior atribuída ao software
pelas organizações, visto ser um dos principais insumos para a competitividade
empresarial e até mesmo de nações, as condições para tratar seu desenvolvimento com
um enfoque de engenharia, começam a ser estabelecidas. Outro aspecto a contribuir
para isto é a rápida disseminação dos conceitos de qualidade, qualidade total e sistemas
da qualidade que se observa pelo mundo , cuja filosofia preconiza o controle dos custos
de não conformidade do processo e do produto.
De acordo com Arthur 1 , na área de software, os custos da má qualidade
podem atingir 50% dos custos totais do desenvolvimento.
Mesmo sem empregar abordagens mais científicas para o desenvolvimento de
software temos tido sucesso?
É óbvio que sim , mesmo com as imperfeições introduzidas e entregues aos
usuários temos tido sucesso, porém com um processo cuja tônica é apagar incêndios ,
a um altíssimo custo ( infelizmente não mensurado), considerando todo o ciclo de vida do
software , e a um timing inaceitável dada a dinâmica dos negócios e do mercado.
Toda e qualquer disciplina de engenharia é fundamentada em medições. É
impossível imaginar como a Engenharia Civil, Elétrica, a Física, a Química teriam
progredido sem medições. Elas são a base de qualquer ciência.
Há uma famosa frase de Tom de Marco 2 que diz: You cannot control what
you cannot measure , ou seja, não gerenciamos nada sem as medições necessárias,
até mesmo projetos de software.
Para começarmos a tratar o software sob uma abordagem de engenharia, é
necessário entendermos as características de sua dimensão e a importância da medição
para a sua gestão.
1.1 - A Dimensão do Software
Todo e qualquer software é desenvolvido, independente de plataforma e
tecnologia, segundo uma sequência básica de grandes atividades, denominada de Ciclo
de Vida.
PROJETO PRODUTO
Análise do Definição Projeto Projeto Construção Teste e Manutenção
Negócio dos Lógico do Físico do do Sistema Implantação /Melhoria/
Requisi- Sistema Sistema do Sistema Descarte
PROCESSO
Figura 1-1
O desenvolvimento do software ocorre no contexto de um projeto , o qual é
executado de acordo com um processo, gerando produtos intermediários e um
produto final ( release do software ) , o qual deve ser mantido a fim de corrigir defeitos
introduzidos durante o projeto, deve ser melhorado com a incorporação de novas
features e por fim , deve ser desativado, substituído ou descartado, ao final de sua vida
útil.
Projetos de Software
Um projeto de software é um esforço no sentido de construir um produto , dentro
de determinadas especificações, que atenda necessidades dos usuários (clientes) para
que executem processos operacionais e gerenciais de negócios.
Na verdade, um projeto de software é a junção de Objetivos + Atividades +
Prazos + Recursos Envolvidos + Riscos e Incertezas.
É uma forma de organização do trabalho que apresenta as seguintes
características:
É um esforço finito, com início e fim e a cujo término pretende-se a entrega,
geração ou finalização de um determinado produto, definido a priori;
É um esforço que pode ser subdividido em unidades de trabalho (
fases,etapas, atividades ) que ocorrem em uma sequência pré-
determinada;
O objetivo, a alocação de recursos e o progresso realizado podem ser
monitorados e avaliados.
Podemos considerar como projetos de software:
Desenvolvimento de Software sob medida ou encomenda
Desenvolvimento de Software - Produto
Desenvolvimento de novas releases do software
Não consideramos serviços de manutenção esporádicos como remover defeitos ,
realizar pequenas adaptações e adicionar pequenas funcionalidades, projetos de
software, apesar de que os mesmos também devem ser gerenciados.
Processo de Software
O processo de software é um conjunto de atividades , (numa sequência pré-
determinada ), métodos e práticas que são utilizados na produção e evolução do software.
O processo compreende:
Políticas de desenvolvimento
Procedimentos para o desenvolvimento
Diversas técnicas e padrões para a construção de produtos
Padrões de apresentação de produtos intermediários
O processo define a forma como o projeto é executado e, consequentemente,
gerenciado.
O conjunto de atividades , numa sequência pré-determinada, compõem o que se
denomina a arquitetura do processo de software.
A arquitetura do processo , no jargão mais comumente utilizado na área de
informática, é o que chamamos de metodologia de desenvolvimento.
O processo de software existe em qualquer organização, independente de seu
nível de organização e padronização. Pode ser um processo sem formalização ou
altamente padronizado.
Produto de Software
O processo de software tem como resultado um produto (release) que contém
uma série de atributos derivados dos requisitos e especificações a fim de atender
necessidades implícitas e explícitas dos usuários (clientes). Estes atributos definem as
características do produto em termos de desempenho, confiabilidade, eficiência,
usabilidade, nível de manutenibilidade, nível de portabilidade e nível de reutilização.
O software enquanto produto sofre alterações, caracterizadas como:
Manutenção corretiva, que compreende:
remoção de defeitos introduzidos pelo projeto
remoção de defeitos introduzidos por manutenções adaptativas
remoção de defeitos introduzidos por melhorias
Manutenção adaptativa, que compreende:
a alteração de determinadas funções do software visando adequá-lo
a requisitos regulatórios ou de legislação
Melhorias no software, que compreendem:
introdução de novas features no software em função de novos
requisitos dos negócios
introdução de novas features no software em função de mudança
de tecnologia
Uma nova release do software é o somatório de manutenções adaptativas e de
melhorias.
O desenvolvimento de uma nova release pode ser realizado sob a filosofia de
projeto, ao passo que manutenções corretivas geralmente não.
1.2 - A Dimensão da Gestão do Software
A gestão do software consiste nas ações necessárias para a gestão do projeto, do
ambiente de desenvolvimento, e do produto (release) visando atingir objetivos
previamente estabelecidos no que concerne a produtividade e qualidade e quanto ao
atendimento das necessidades dos usuários ( clientes ).
Gestão do Projeto
As ações necessárias para a gestão do projeto podem ser categorizadas em:
Planejamento do Projeto, que compreende:
Elaborar o escopo preliminar do produto a ser desenvolvido
Elaborar estimativas de prazos, recursos, esforço, custos e
tamanho do produto
Definir o processo de desenvolvimento a ser adotado pelo projeto
Definir a estrutura de organização do projeto