The Mythical Man-Month - Completo
The Mythical Man-Month - Completo
The Mythical Man-Month - Completo
com
Crédito da foto: © Jerry Markatos
CERCA DE O AUTOR
Frederick P. Brooks, Jr., é Kenan Professor de Ciência da Computação
na University of North Carolina em Chapel Hill. Ele é mais conhecido
como o "pai do IBM System / 360", tendo atuado como gerente de
projeto para seu desenvolvimento e posteriormente como gerente do
projeto de software Operating System / 360 durante sua fase de
design. Por esse trabalho, ele, Bob Evans e Erich Bloch receberam a
Medalha Nacional de Tecnologia em 1985. Anteriormente, ele foi
arquiteto dos computadores IBM Stretch e Harvest.
Anniversary Edition
ADDISON-WESLEY
Boston • São Francisco * Nova York «Toronto« Montreal
Londres «Munique * Paris e Madrid
Cidade do Cabo • Sydney • Tóquio • Cingapura • Cidade do México
Desenho da capa: CR Knight, Mural dos Poços de Alcatrão de La Brea.
Cortesia do Museu George C. Page de La Brea Discoveries, Museu de
História Natural do Condado de Los Angeles. Designer da capa: Diana Coe.
Muitas das designações usadas por fabricantes e vendedores para distinguir seus
produtos são reivindicadas como marcas registradas. Onde essas designações
aparecem neste livro, e Addison-Wesley estava ciente de uma reivindicação de marca
registrada, as designações foram impressas em maiúsculas iniciais ou todas em
maiúsculas.
ISBN 0201835959
17 1819202122 MA 05 04 03 02
17ª Impressão de agosto de 2002
Dedicação do 1975 edição
Para Nancy,
Um presente de Deus para mim.
Prefácio à edição
do 20º aniversário
Vll
viii Prefácio à edição do 20º aniversário
Depois de deixar a IBM em 1965 para vir para Chapel Hill, conforme
acordado originalmente quando assumi o OS / 360, comecei a analisar a
experiência do OS / 360 para ver quais lições técnicas e de gerenciamento
deveriam ser aprendidas. Em particular, eu queria explicar as experiências
de gerenciamento bastante diferentes encontradas no desenvolvimento de
hardware System / 360 e desenvolvimento de software OS / 360. Este livro é
uma resposta tardia às sondagens de Tom Watson sobre por que a
programação é difícil de gerenciar.
Nesta busca, tirei proveito de longas conversas com
RP Case, gerente assistente 1964-65, e F. M, Trapnell, gerente
1965-68.1 comparei as conclusões com outros gerentes de
projetos de programação jumbo, incluindo FJ Corbato de
MIT, John Harr e V. Vyssotsky da Bell Telephone Laboratories,
Charles Portman da International Computers Limited,
AP Ershov do Laboratório de Computação da Divisão Siberiana,
Academia de Ciências da URSS e AM Pietrasanta da IBM.
Xlll
1
O poço de alcatrão
1
TheTarPit
3
4 O poço de alcatrão
As alegrias da arte
Por que programar é divertido? Que delícias seu praticante pode esperar
como recompensa?
O primeiro é a pura alegria de fazer coisas. Assim como a criança
adora sua torta de lama, o adulto gosta de construir coisas,
especialmente as que ele mesmo criou. Acho que esse deleite deve ser
uma imagem do deleite de Deus em fazer as coisas, um deleite mostrado
na distinção e novidade de cada folha e cada floco de neve.
Em segundo lugar, está o prazer de fazer coisas que sejam úteis para
outras pessoas. No íntimo, queremos que outros usem nosso trabalho e o
considerem útil. Nesse aspecto, o sistema de programação não é
essencialmente diferente do primeiro porta-lápis de argila da criança "para o
escritório do papai".
Em terceiro lugar, está o fascínio de criar objetos semelhantes a
quebra-cabeças complexos de peças móveis interligadas e observá-las
trabalhar em ciclos sutis, desempenhando as consequências de
princípios construídos desde o início. O computador programado tem
todo o fascínio da máquina de pinball ou do mecanismo de jukebox,
levado ao máximo.
Em quarto lugar, está a alegria de aprender sempre, que surge
da natureza não repetitiva da tarefa. De uma forma ou de outra, o
problema é sempre novo e seu solucionador aprende algo: às vezes
prático, às vezes teórico e às vezes ambos.
Finalmente, há o prazer de trabalhar em um meio tão tratável. O
programador, como o poeta, trabalha apenas ligeiramente afastado do
puro material de pensamento. Ele constrói seus castelos no ar, do ar,
criando pelo esforço da imaginação. Poucos meios de criação são tão
flexíveis, tão fáceis de polir e retrabalhar, tão prontamente capazes de
realizar grandes estruturas conceituais. (Como veremos mais tarde, essa
mesma tratabilidade tem seus próprios problemas.)
No entanto, a construção do programa, ao contrário das palavras do
poeta, é real no sentido de que se move e funciona, produzindo saídas
visíveis separadas da própria construção. Imprime resultados, desenha,
produz sons, movimenta braços. A magia do mito e da lenda tem
8 o Poço de Piche
As desgraças do ofício
Uma boa cozinha finge tempo. Se você é feito para esperar, é para
servi-lo melhor e para agradá-lo.
13
14 O Mítico Homem-Mês
Mais projetos de software deram errado por falta de tempo no calendário do que
por todas as outras causas combinadas. Por que essa causa de desastre é tão
comum?
Primeiro, nossas técnicas de estimativa são mal desenvolvidas. Mais
seriamente, eles refletem uma suposição não expressa que é totalmente
falsa, isto é, que tudo correrá bem.
Em segundo lugar, nossas técnicas de estimativa confundem falaciosamente
esforço com progresso, escondendo a suposição de que homens e meses são
intercambiáveis.
Terceiro, como não temos certeza de nossas estimativas, os gerentes de
software geralmente carecem da teimosia cortês do chef de Antoine.
Quarto, o progresso do cronograma é mal monitorado. Técnicas
comprovadas e rotineiras em outras disciplinas da engenharia são
consideradas inovações radicais na engenharia de software.
Quinto, quando o atraso no cronograma é reconhecido, a resposta
natural (e tradicional) é adicionar mão de obra. Como apagar um
incêndio com gasolina, isso torna as coisas piores, muito piores. Mais
fogo requer mais gasolina e, portanto, começa um ciclo regenerativo que
termina em desastre.
O monitoramento do cronograma será objeto de um ensaio à parte.
Vamos considerar outros aspectos do problema com mais detalhes.
Otimismo
The'Man-Month
Cardápio
Cardápio
Fig. 2.3 Tempo versus número de trabalhadores - tarefa particionável que requer
comunicação
Cardápio
Sistemas Teste
eu / 6 codificação
Estimativa Gutless
1. Suponha que a tarefa deve ser realizada no prazo. Suponha que apenas a
primeira parte da tarefa foi mal avaliada, então a Fig. 2.6 conta a história com
precisão. Então, restam 9 homens-mês de esforço, e mais dois meses, de
modo que serão necessários 4 homens-mês. Adicione 2 homens aos 3
designados.
2. Suponha que a tarefa deve ser realizada no prazo. Suponha que toda a
estimativa foi uniformemente baixa, de modo que a Fig. 2.7 realmente
descreve a situação. Então, restam 18 homens-mês de esforço, e mais
dois meses, portanto, serão necessários 9 homens. Adicione 6 homens
aos 3 designados.
Figura 2.5
Cronograma Regenerativo Desastre 2,3
Figura 2.6
Figura 2.7
24 O Mítico Homem-Mês
Figura 2.8
29
30 A Equipe Cirúrgica
O problema
Os gerentes de programação há muito tempo reconhecem grandes
variações de produtividade entre bons e pobres programadores. Mas
as magnitudes reais medidas surpreenderam a todos nós. Em um de
seus estudos, Sackman, Erikson e Grant estavam medindo o
desempenho de um grupo de programadores experientes. Apenas
neste grupo, as relações entre o melhor e o pior desempenho foram
em média de cerca de 10: 1 nas medições de produtividade e incríveis
5: 1 nas medições de velocidade e espaço do programa! Resumindo,
o programador de $ 20.000 / ano pode muito bem ser 10 vezes mais
produtivo do que o de $ 10.000 / ano. O contrário também pode ser
verdade. Os dados não mostraram nenhuma correlação entre
experiência e desempenho.
Argumentei anteriormente que o grande número de mentes a serem
coordenadas afeta o custo do esforço, pois uma grande parte do custo é a
comunicação e a correção dos efeitos nocivos da falta de comunicação
(depuração do sistema). Isso também sugere que se deseja que o sistema
seja construído pelo menor número possível de mentes. De fato, a maior
parte da experiência com grandes sistemas de programação mostra que
a abordagem de força bruta é cara, lenta, ineficiente e produz sistemas
que não são conceitualmente integrados. OS / 360, Exec 8, Scope 6600,
Multics, TSS, SAGE, etc. - a lista é infinita.
A conclusão é simples: se um projeto de 200 homens tem 25
gerentes que são os programadores mais competentes e experientes,
dispare 175 soldados e coloque os gerentes de volta na programação.
O problema 31
Proposta de Mills
Uma proposta de Harlan Mills oferece uma solução nova e criativa. 2'3
Mills propõe que cada segmento de um grande trabalho seja tratado
por uma equipe, mas que a equipe seja organizada como uma
equipe cirúrgica, em vez de uma equipe de abate de porcos. Ou seja,
ao invés de cada membro cortar o problema, um faz o corte e os
outros dão a ele todo o suporte que irá aumentar sua eficácia e
produtividade.
Um pouco de reflexão mostra que esse conceito atende aos desideratos,
se for possível fazê-lo funcionar. Poucas mentes estão envolvidas no projeto e
na construção, mas muitas mãos são postas em prática. Isso pode funcionar?
Quem são os anestesiologistas e enfermeiras da equipe de programação e
como é dividido o trabalho? Deixe-me misturar livremente as metáforas para
sugerir como tal equipe poderia funcionar se ampliada para incluir todo o
suporte concebível.
Como funciona
41
42 Aristocracia, democracia e design de sistema
Integridade Conceitual
de seus conceitos. Em qualquer medida, no entanto, sua função não é nem mesmo
na mesma classe que a do OS / 360. Assim que a facilidade de uso é considerada o
critério, cada um deles é visto como desequilibrado, alcançando apenas metade do
objetivo verdadeiro.
Para um determinado nível de função, entretanto, esse sistema é o
melhor em que se possa especificar as coisas com a maior simplicidade e
objetividade. Simplicidade não é o suficiente. A linguagem TRAC de
Mooers e o Algol 68 alcançam simplicidade medida pelo número de
conceitos elementares distintos. Eles não são, no entanto,
para a frente. A expressão das coisas que se deseja fazer muitas
vezes requer combinações complexas e inesperadas das instalações
básicas. Não é suficiente aprender os elementos e regras de
combinação; deve-se também aprender o uso idiomático, toda uma
tradição de como os elementos são combinados na prática.
Simplicidade e franqueza procedem da integridade conceitual. Cada
parte deve refletir as mesmas filosofias e o mesmo equilíbrio de
desiderata. Cada parte deve até usar as mesmas técnicas de sintaxe
e noções análogas de semântica. A facilidade de uso, então, dita a
unidade de design, a integridade conceitual.
Aristocracia e Democracia
A integridade conceitual, por sua vez, determina que o projeto deve proceder de
uma mente ou de um número muito pequeno de mentes ressonantes
concordantes.
As pressões de programação, no entanto, ditam que a construção do
sistema precisa de muitas mãos. Duas técnicas estão disponíveis para
resolver esse dilema. O primeiro é uma divisão cuidadosa de trabalho
entre arquitetura e implementação. A segunda é a nova maneira de
estruturar equipes de implementação de programação discutida no
capítulo anterior.
A separação do esforço arquitetônico da implementação é uma maneira
muito poderosa de obter integridade conceitual em projetos muito grandes.
Eu mesmo já vi isso ser usado com grande sucesso no computador Stretch da
IBM e na linha de produtos de computador System / 360.
Aristocracia e Democracia Quatro cinco
leva menos tempo para testar. Com efeito, uma divisão horizontal
generalizada do trabalho foi drasticamente reduzida por uma divisão vertical
do trabalho, e o resultado são comunicações radicalmente simplificadas e
integridade conceitual aprimorada.
5
O efeito do segundo sistema
5
O efeito do segundo sistema
OVID
53
54 O efeito do segundo sistema
61
62 Passando a Palavra
Definições Formais
Incorporação direta
Conferências e tribunais
Múltiplas implementações
O registro do telefone
Teste de Produto
73
74 Por que a Torre de Babel falhou?
Bem, se eles tinham todas essas coisas, por que o projeto falhou?
Onde eles faltaram? Em dois aspectos - comunicação, e seu
conseqüente, organização. Eles não conseguiam falar um com o
outro; portanto, eles não podiam coordenar. Quando a coordenação
falhou, pare de trabalhar. Lendo nas entrelinhas, concluímos que a
falta de comunicação levou a disputas, sentimentos ruins e ciúmes de
grupo. Logo os clãs começaram a se separar, preferindo o
isolamento a disputas.
A apostila do projeto
That. A pasta de trabalho do projeto não é tanto um documento
separado, mas uma estrutura imposta aos documentos que o projeto
produzirá de qualquer maneira.
Tudo os documentos do projeto precisam fazer parte dessa
estrutura. Isso inclui objetivos, especificações externas,
especificações de interface, padrões técnicos, especificações internas
e memorandos administrativos.
Como alguém faria isso hoje? Com a tecnologia de sistema atual disponível,
acho que a técnica escolhida é manter a pasta de trabalho no arquivo de
acesso direto, marcada com barras de alteração e datas de revisão. Cada
usuário o consultaria em um terminal de exibição (as máquinas de escrever
são muito lentas). Um resumo da mudança, preparado diariamente, seria
armazenado no formato LIFO em um ponto de acesso fixo. O programador
provavelmente leria isso diariamente, mas se perdesse um dia, só precisaria
ler mais no dia seguinte. Ao ler o resumo da alteração, ele poderia
interromper para consultar o próprio texto alterado.
Observe que a pasta de trabalho em si não é alterada. É ainda a
montagem de toda a documentação do projeto, estruturada de
acordo com um desenho criterioso. A única mudança está na
mecânica de distribuição e consulta. DC Engelbart e seus colegas do
StanfordResearch Institute construíram esse sistema e estão usando-
o para construir e manter documentação para a rede ARPA.
DL Parnas da Carnegie-Mellon University propôs um
solução ainda mais radical. 1 Sua tese é que o programador é mais eficaz
se protegido, em vez de exposto aos detalhes da construção de outras
partes do sistema que não as suas. Isso pressupõe que todas as
interfaces sejam definidas de forma completa e precisa. Embora esse seja
definitivamente um bom design, depende de que sua realização perfeita
seja uma receita para o desastre. Um bom sistema de informação expõe
erros de interface e estimula sua correção.
1. uma missão
2. um produtor
3. um diretor técnico ou arquiteto
4. um cronograma
os casos de teste que surgirão. Para que isso seja possível, o produtor e o
diretor devem ter opiniões semelhantes sobre a filosofia técnica fundamental;
eles devem discutir as principais questões técnicas em particular, antes que
elas realmente se tornem oportunas; e o produtor deve ter um grande
respeito pelas proezas técnicas do diretor.
Menos obviamente, o produtor pode fazer todos os tipos de coisas
sutis com os símbolos de status (tamanho do escritório, carpete, móveis,
cópias de carbono etc.) para proclamar que o diretor, embora fora da
linha de gestão, é uma fonte de poder de decisão.
Isso pode ser feito para funcionar de forma muito eficaz. Infelizmente,
raramente é tentado. O trabalho menos bem executado pelos gerentes de
projeto é utilizar o gênio técnico que não é forte em talento de
gerenciamento.
Coster enterrou o rosto nas mãos e ergueu os olhos. "Eu sei disso. Eu sei
o que precisa ser feito - mas toda vez que tento resolver um problema
técnico, algum idiota quer que eu tome uma decisão sobre caminhões
- ou telefones - ou alguma coisa maldita. Sinto muito, Sr. Harriman.
Eu pensei que poderia fazer isso. "
Harriman disse muito gentilmente: "Não se deixe confundir. Bob. Você não 7
dormiu muito ultimamente, não é? É o seguinte - we11 superou um rápido
em Ferguson. Vou pegar aquela mesa em que você está por alguns dias e
construir uma estrutura para protegê-la contra essas coisas. Quero aquela
sua cabeça pensando sobre vetores de reação e eficiência de combustível e
tensões de design, não sobre contratos para caminhões. Harriman foi até a
porta, olhou ao redor da sala externa e avistou um homem que poderia ou
não ser o secretário-chefe do escritório. - Ei, você! Vem cá. "
"Eu quero aquela mesa no canto e todas as coisas que estão nela movidas para um
escritório vazio neste andar, imediatamente."
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
Ele supervisionou a mudança de Coster e sua outra mesa para outro escritório,
providenciou para que o telefone do novo escritório fosse desconectado e,
pensando bem, mandou mudar um sofá para lá também. "Vamos instalar um
projetor, uma máquina de desenho, estantes de livros e outras coisas assim esta
noite", disse ele a Coster. "Basta fazer uma lista de tudo o que você precisa
- trabalhar em Engenharia. " Ele voltou ao escritório do engenheiro-chefe
nominal e começou a trabalhar alegremente tentando descobrir onde estava
a organização e o que havia de errado com ela.
Cerca de quatro horas depois, ele levou Berkeley para encontrar Coster. O
engenheiro-chefe estava dormindo em sua mesa, a cabeça apoiada nos braços.
Harriman começou a recuar, mas Coster despertou. "Oh! Desculpe," ele disse,
corando, "Eu devo ter cochilado."
"É por isso que trouxe o sofá para você", disse Harriman. "É mais tranquilo.
Bob, conheça Jock Berkeley. Ele é seu novo escravo. Você continua sendo o
engenheiro-chefe e chefe indiscutível. Jock é LordHigh, tudo o mais. De agora
em diante, você não tem absolutamente nada com que se preocupar -
exceto pelo pequeno detalhe de construir uma nave lunar. "
Eles apertaram as mãos. "Só uma coisa eu peço, Sr. Coster", Berkeley
disse sério, "ignore-me o quanto quiser - você terá que dirigir o show
técnico - mas, pelo amor de Deus, registre para que eu saiba o que está
acontecendo. Vou colocar um interruptor na sua mesa para operar um
gravador lacrado na minha mesa. "
"E se você quiser algo que não seja técnico, não faça você mesmo. Basta
girar um botão e assobiar; isso será feito!" Berkeley olhou para Harriman.
“O chefe disse que quer falar com você sobre o verdadeiro trabalho. Vou
deixá-lo e me ocupar.” Ele saiu.
se melhor?"
"Isso é bom; ele é seu irmão gêmeo de agora em diante. Pare de se preocupar; eu
já usei ele antes. Você pensa que está morando em um hospital bem
administrado." *
PUBUUUS
maneira.
87
88 Chamando o tiro
Dados de Portman
Dados de Aron
Dados de Harr
Dados OS / 360
A experiência do IBM OS / 360, embora não esteja disponível nos detalhes dos
dados da Hair, confirma isso. Produtividades na faixa de 600-800 instruções
depuradas por homem-ano foram experimentadas por grupos de programas de
controle. As produtividades nas instruções depuradas de 2000-3000 por homem-
ano foram alcançadas por grupos de tradutores de idiomas. Isso inclui o
planejamento feito pelo grupo, teste de componente de codificação, teste de
sistema e algumas atividades de suporte. Eles são comparáveis aos dados de
Han, pelo que posso dizer.
Os dados de Aron, os dados do Hair e os dados do OS / 360 confirmam
diferenças marcantes na produtividade relacionadas à complexidade e dificuldade
da própria tarefa. Minha orientação no pântano de estimar a complexidade é que
os compiladores são três vezes mais ruins que os programas de aplicativos em lote
normais, e os sistemas operacionais são três vezes mais ruins que os compiladores.
9
Dados de Corbato
97
98 Dez libras em um saco de cinco libras
de redução de contagem. Como qualquer custo, o tamanho em si não é ruim, mas o tamanho
desnecessário é.
Tamanho Ao controle 99
Controle de tamanho
em tamanhos.
Técnicas Espaciais
A hipótese:
Em meio a uma lavagem de papel, um pequeno número de
documentos torna-se os eixos críticos em torno dos quais gira todo o
gerenciamento de projeto. Essas são as principais ferramentas
pessoais do gerente.
107
108 A Hipótese Documentária
Suponha que alguém esteja construindo uma máquina. Quais são os documentos
críticos?
Cronograma
Organograma
Alocações de espaço
Documentos para um Departamento Universitário 109
Objetivos
Descrições do curso
Requisitos de graduação
Orçamento
Alocação de espaço
Quando: horário
Quanto: orçamento
Uma saída
FRANKLIN D. ROOSEVELT
115
116 Plano para jogar fora
Uma vez que se reconhece que um sistema piloto deve ser construído e
descartado, e que um redesenho com ideias alteradas é inevitável, torna-
se útil enfrentar todo o fenômeno da mudança. O primeiro passo é aceitar
o fato da mudança como um estilo de vida, em vez de uma exceção
desagradável e irritante. Cosgrove apontou perceptivelmente que o
programador fornece a satisfação da necessidade do usuário, em vez de
qualquer produto tangível. E tanto a necessidade real quanto a percepção
do usuário dessa necessidade mudarão conforme os programas são
criados, testados e usados. 3
PROVÉRBIO
127
128 Ferramentas Sharp
Mesmo com essa data tardia, muitos projetos de programação ainda são operados
como oficinas de máquinas no que diz respeito a ferramentas. Cada mestre mecânico
tem seu próprio conjunto pessoal, coletado ao longo da vida e cuidadosamente trancado
e guardado - as evidências visíveis de habilidades pessoais. Da mesma forma, o
programador mantém pequenos editores, classificações, despejos binários, utilitários de
espaço em disco, etc., armazenados em seu arquivo.
Essa abordagem, no entanto, é tola para um projeto de programação. Em
primeiro lugar, o problema essencial é a comunicação, e as ferramentas
individualizadas dificultam em vez de ajudar na comunicação. Em segundo
lugar, a tecnologia muda quando alguém muda de máquina ou linguagem de
trabalho, então o tempo de vida da ferramenta é curto. Finalmente, é
obviamente muito mais eficiente ter um desenvolvimento e manutenção
comuns das ferramentas de programação de uso geral.
No entanto, ferramentas de uso geral não são suficientes. Tanto as necessidades
especializadas quanto as preferências pessoais determinam a necessidade de
ferramentas especializadas também; portanto, ao discutir equipes de programação,
postulei um criador de ferramentas por equipe. Este homem domina todas as
ferramentas comuns e é capaz de instruir seu chefe-cliente sobre como usá-las. Ele
também cria as ferramentas especializadas de que seu chefe precisa.
O gerente de um projeto, então, precisa estabelecer uma filosofia e
reservar recursos para a construção de ferramentas comuns. Ao mesmo
tempo, ele deve reconhecer a necessidade de ferramentas especializadas,
e não invejar sua própria equipe de construção de ferramentas. Essa
tentação é insidiosa. Sente-se que se todos os criadores de ferramentas
espalhados fossem reunidos para aumentar a equipe de ferramentas
comuns, resultaria em maior eficiência. Mas não é assim.
Quais são as ferramentas sobre as quais o gerente deve filosofar,
planejar e organizar? Primeiro um instalação de computador. Isso requer
máquinas e uma filosofia de programação deve ser adotada. Requer um
sistema operacional, e filosofias de serviço devem ser estabelecidas. Isso
requer língua, e uma política de linguagem deve ser estabelecida
baixa. Então há utilitários, auxiliares de depuração, geradores de casos de teste,
e um sistema de processamento de texto para lidar com a documentação.
Vejamos um por um. 1
Máquinas Alvo 129
Máquinas Alvo
O suporte da máquina éusualmente dividido em targetmachine e a
máquinas de veículos. A máquina de destino é aquela para a qual o
software está sendo escrito e na qual deve ser testado. As máquinas
veiculares são aquelas que prestam os serviços utilizados na construção do
sistema. Se alguém está construindo um novo sistema operacional para
uma máquina antiga, ele pode servir não apenas como alvo, mas também
como veículo.
ção Mas eles ficavam parados, mês após mês. Então, de repente, todos os 16
sistemas estavam totalmente carregados, e o problema era o racionamento. A
utilização parecia algo como a Fig. 12.1. Todos começaram a depurar seus
primeiros componentes ao mesmo tempo e, a partir daí, a maioria
da equipe estava constantemente depurando algo.
Modelo 40 horas
por mês
Jan ' 65 66
assembler. Todo o código testado ou em teste foi mantido nesta biblioteca, tanto
o código-fonte quanto os módulos de carregamento montados. A biblioteca foi
de fato dividida em sub-bibliotecas com diferentes regras de acesso.
Primeiro, cada grupo ou programador tinha uma área onde mantinha
cópias de seus programas, seus casos de teste e a estrutura de que precisava
para os testes de componentes. Nisso cercadinho área não havia restrições
sobre o que um homem poderia fazer com seus próprios programas; eles eram
dele.
Quando um homem tinha seu componente pronto para integração
em uma parte maior, ele passava uma cópia para o gerente desse
sistema maior, que a colocava em um integração de sistema Agora
o programador original não poderia alterá-lo, exceto com a permissão do
gerenciador de integração. À medida que o sistema era montado, o último
continuava com todos os tipos de testes de sistema, identificando bugs e
obtendo correções.
De vez em quando, uma versão do sistema fica pronta para uso mais
amplo. Em seguida, seria promovido para o sub-biblioteca da versão atual.
Esta cópia era sacrossanta, tocada apenas para consertar bugs
incapacitantes. Ele estava disponível para uso na integração e teste de
todas as novas versões do módulo. Um diretório de programa no 7010
acompanhava cada versão de cada módulo, seu status, localização e
mudanças.
Duas noções são importantes aqui. O primeiro é ao controle, a ideia de
cópias do programa pertencentes a gerentes que são os únicos que podem
autorizar sua mudança. O "segundo é o de separação formal e progressão
do cercadinho, para a integração, para o lançamento.
Na minha opinião, essa foi uma das coisas mais bem feitas no
esforço do OS / 360. É uma tecnologia de gerenciamento que parece
ter sido desenvolvida de forma independente em vários projetos de
programação massivos, incluindo os do Bell Labs, ICL e da
Universidade de Cambridge. 8 É aplicável tanto à documentação
quanto aos programas. É uma tecnologia indispensável.
Ferramentas do programa. À medida que novas técnicas de depuração aparecem, as antigas
diminuem, mas não desaparecem. Portanto, são necessários despejos, editores de arquivos de
O uso eficaz da maioria das ferramentas interativas requer que o trabalho seja
feito em uma linguagem de alto nível, pois os terminais de teletipo e máquina de
escrever não podem ser usados para depurar despejando memória. Com uma
linguagem de alto nível, a fonte pode ser facilmente editada e as impressões
seletivas feitas facilmente. Juntos, eles realmente fazem um par de ferramentas
afiadas.
13
O todo e as partes
13
O todo e as partes
141
142 O todo e as partes
Projetando theBugsOut
Design de cima para baixo. Em um artigo muito claro de 1971, Niklaus Wirth
formalizou um procedimento de design que havia sido usado durante anos
pelos melhores programadores. 2 Além disso, suas noções, embora declaradas
para o design de programas, aplicam-se completamente ao design de sistemas
complexos de programas. A divisão da construção do sistema em arquitetura,
implementação e realização é uma personificação dessas noções; além disso,
cada arquitetura, implementação e realização pode ser melhor realizada por
métodos de cima para baixo.
Resumidamente, o procedimento de Wirth é identificar o design como
uma sequência de etapas de refinamento. Um esboça uma definição de
tarefa grosseira e um método de solução grosseira que atinge o resultado
principal. Em seguida, examina-se a definição mais de perto para ver como
o resultado difere do que é desejado e dá-se as grandes etapas da solução
e as divide em etapas menores. Cada refinamento na definição da tarefa
torna-se um refinamento no algoritmo para solução, e cada um pode ser
acompanhado por um refinamento na representação dos dados.
Depuração de componentes
Depuração do sistema
SOFÓCULOS
153
154 Travando uma catástrofe
Marcos ou Mós?
Como controlar um grande projeto em um cronograma apertado? O primeiro
passo é tenho um cronograma. Cada um de uma lista de eventos, chamados
de marcos, tem uma data. Escolher as datas é um problema de estimativa, já
discutido e crucialmente dependente da experiência.
Para escolher os marcos, existe apenas uma regra relevante. Os marcos
devem ser eventos concretos, específicos e mensuráveis, definidos com nitidez
de ponta de faca. A codificação, por exemplo, é "90 por cento concluída"
durante metade do tempo total de codificação. A depuração está "99%
concluída" na maioria das vezes. "Planejamento completo" é um evento que se
pode proclamar quase à vontade. 1
Marcos concretos, por outro lado, são eventos 100 por cento.
"Especificações assinadas por arquitetos e implementadores", "codificação
de origem 100 por cento concluída, keypunched, inserida na biblioteca de
disco", "versão depurada passa em todos os casos de teste." Esses marcos
concretos marcam as fases vagas de planejamento, codificação,
depuração.
"A outra parte está atrasada, de qualquer maneira" 155
Um cronograma falha por dia; e daí? Quem fica animado com um deslize de um dia?
Podemos compensar mais tarde. E a outra peça em que a nossa se encaixa está
atrasada, de qualquer maneira.
Um gerente de beisebol reconhece um talento não físico, labuta, como um
presente essencial para grandes jogadores e grandes equipes. É a característica de
correr mais rápido do que o necessário, movendo-se mais cedo do que o
necessário, esforçando-se mais do que o necessário. É essencial para grandes
equipes de programação também. O Hustle fornece a almofada, a capacidade de
reserva, que permite a uma equipe lidar com contratempos rotineiros, para
156 Chocando uma catástrofe
Sob o tapete
Quando um gerente de primeira linha vê sua pequena equipe ficando para trás,
raramente está inclinado a correr para o chefe com esse problema. A equipe pode
ser capaz de inventar, ou ele deve ser capaz de inventar ou reorganizar para
resolver o problema. Então por que preocupar o chefe com isso? Até agora
Sob o Rwg ' 157
A outra face
quinze
A outra face
CRABBE
163
164 A outra face
executados somente depois que um programa é modificado. Eles se enquadram em três partes do
A maldição do fluxograma
Programas autodocumentáveis
179
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
Resumo 1
Toda construção de software envolve tarefas essenciais, a modelagem
das estruturas conceituais complexas que compõem a entidade abstrata
de software, e tarefas acidentais, a representação dessas entidades
abstratas em linguagens de programação e o mapeamento delas em
linguagens de máquina dentro de espaço e velocidade restrições. A
maioria dos grandes ganhos anteriores em produtividade de software
veio da remoção de barreiras artificiais que tornaram as tarefas
acidentais excessivamente difíceis, como severas restrições de hardware,
linguagens de programação inadequadas, falta de tempo de máquina.
Quanto do que os engenheiros de software fazem agora ainda se dedica
ao acidental, em oposição ao essencial? A menos que seja mais do que
9/10 de todo o esforço, reduzir todas as atividades acidentais ao tempo
zero não proporcionará uma melhoria de ordem de magnitude.
Portanto, parece que chegou a hora de abordar as partes
essenciais da tarefa de software, aquelas relacionadas com a criação
de estruturas conceituais abstratas de grande complexidade. Eu
sugiro:
Introdução
De todos os monstros que preenchem os pesadelos de nosso folclore,
nenhum aterroriza mais do que os lobisomens, porque eles se transformam
inesperadamente de familiares em horrores. Para estes, buscamos balas de
prata que podem magicamente colocá-los para descansar.
O projeto de software familiar tem algo desse tipo (pelo
menos como visto pelo gerente não técnico), geralmente inocente
Tem que ser difícil? - Dificuldades essenciais 181
rameteres.
• Existem muitos métodos conhecidos de solução para fornecer uma
biblioteca de alternativas.
194 Sem bala de prata
E isso é Não
Unix Cobol
APL PL / 1
Pascal Algol
Módulo MVS / 370
Conversa fiada MS-DOS
Fortran
207
208 "Sem bala de prata" refeito
Análise de Harel
David Harel, no jornal de 1992, "Biting the Silver Bullet",
empreende a análise mais cuidadosa de "NSB" que foi
publicada. 9
Pessimismo vs. otimismo vs. realismo. Harel vê tanto "NSB" quanto "Software
Aspects of Strategic Defense Systems", de Parnas, de 1984, 10 como "muito
sombrio". Portanto, ele pretende iluminar o lado mais brilhante da moeda,
com o subtítulo de seu artigo "Rumo a um futuro mais brilhante para o
desenvolvimento de sistemas". Tanto Cox quanto Harel lêem "NSB" como
pessimista, e ele diz: "Mas se você ver esses mesmos fatos de uma nova
perspectiva, uma conclusão mais otimista emerge." Ambos interpretaram mal
o tom.
Análise de Harel 213
Ele então descreve como as falhas postuladas, erros e prazos perdidos nos
pequenos programas convencionais de uma pessoa foram melhorados em
uma ordem de magnitude ao longo dos próximos 25 anos.
Mas o estado da arte na década de 1950 não eram, na verdade, pequenos
programas para uma pessoa. Em 1952, a Univac estava trabalhando no
processamento do censo de 1950 com um programa complexo desenvolvido
por cerca de oito programadores. 13 Outras máquinas estavam fazendo
dinâmica química, cálculos de difusão de nêutrons, cálculos de desempenho
de mísseis, etc. 14 Montadores, realocando linkers e carregadores, sistemas
interpretativos de ponto flutuante, etc. estavam em uso rotineiro. quinze
216 "Sem bala de prata" refeito
E AQUI ESTÁ. Harel passa a oferecer sua própria bala de prata, uma
técnica de modelagem chamada "The Vanilla Framework". A abordagem
em si não é descrita em detalhes suficientes para avaliação, mas é feita
referência a um artigo e a um relatório técnico que aparecerá em livro no
devido tempo. 18 A modelagem aborda a essência, a elaboração e
depuração adequadas de conceitos, portanto, é possível que o framework
Vanilla seja revolucionário. Espero que sim. Ken Brooks relata que
descobri que é uma metodologia útil quando a experimentei para uma
tarefa real.
Prédio com peças maiores. A ilustração que abre este capítulo nos
lembra que, se alguém montar um conjunto de peças, cada uma
220 "No Silver Bullet" aposentado
Agora, qualquer uma dessas disciplinas pode ser adquirida sem levar o
pacote Smalltalk ou C ++ inteiro - muitos deles são anteriores à tecnologia
orientada a objetos. A atratividade da abordagem orientada a objetos é a
de uma pílula multivitamínica: de uma só vez (ou seja, o retreinamento do
programador), obtém-se todos eles. É um conceito muito promissor.
David Parnas, cujo artigo foi uma das origens dos conceitos orientados a
objetos, vê a questão de forma diferente. Eu tenho me escreve:
E a reutilização?
A melhor maneira de atacar a essência da construção de software é não
construí-lo de forma alguma. O software de pacote é apenas uma das
maneiras de fazer isso. A reutilização de programas é outra. Na verdade, a
promessa de fácil reutilização de classes, com fácil customização por herança,
é um dos maiores atrativos das técnicas orientadas a objetos.
Como é frequentemente o caso, à medida que se obtém alguma experiência com para
nova maneira de fazer negócios o novo modo não é tão simples quanto parece à
primeira vista.
Claro, os programadores sempre reutilizaram seu próprio trabalho
manual. Jones diz,
Reutilizar é algo muito mais fácil de dizer do que fazer. Fazer isso
requer um bom design e uma documentação muito boa. Mesmo
quando vemos um bom design, o que ainda é raro, não veremos os
componentes reutilizados sem uma boa documentação.
Yourdon estima a grande despesa: "Uma boa regra prática é que esses
componentes reutilizáveis demandarão o dobro do esforço de um
componente 'único'." 28 Vejo essa despesa como exatamente o esforço de
produzir o componente, discutido no Capítulo 1. Portanto, minha estimativa
da relação de esforço seria três vezes maior.
Obviamente, estamos vendo muitas formas e variedades de
reutilização, mas não tanto como esperávamos agora. Ainda há
muito que aprender.
Quanto mais alto o nível em que se pensa, mais numerosos são os elementos-
pensamento primitivos com os quais devemos lidar. Tão profissional-
Aprendendo grandes vocabulários - um problema para a reutilização de software 225
Mas alguns de nós - aqueles de nós duros o suficiente para pensar que
somos realistas - veja isso como uma lufada de ar fresco. Por fim, podemos
nos concentrar em algo um pouco mais viável do que uma torta no céu.
Agora, talvez, possamos continuar com as melhorias incrementais
possíveis na produtividade do software, em vez de esperar pelos avanços
que provavelmente nunca acontecerão. 29
18
Proposições de o
Homem-mês mítico:
Verdadeiro ou falso?
18
Proposições de o
Mítico Homem-Mês
Verdadeiro ou falso?
229
230 Proposições de O Mítico Homem-Mês: Verdadeiro ou falso?
3,4 equipe de duas pessoas, com um líder, costuma ser o melhor uso das mentes.
3,5 Uma equipe pequena e afiada é muito lenta para sistemas realmente
3,6 grandes. A maioria das experiências com sistemas realmente grandes
mostra a abordagem de força bruta para aumentar a escala para ser cara,
lenta, ineficiente e para produzir sistemas que não são conceitualmente
integrados.
3,7 Um programador-chefe, organização de equipe cirúrgica oferece uma
maneira de obter a integridade do produto de poucas mentes e a
produtividade total de muitos ajudantes, com comunicação
radicalmente reduzida.
Comunicação
7,2 "Desastres de cronograma, desajustes funcionais e bugs de sistema
surgem porque a mão esquerda não sabe o que a mão direita está
fazendo." As equipes se distanciam em suposições. As equipes devem
7,3 comunicar-se umas com as outras de todas as maneiras possíveis:
informalmente, por meio de reuniões regulares do projeto com
briefings técnicos e por meio de uma pasta de trabalho formal
compartilhada do projeto. [E por correio eletrônico.]
Organização
7.16 O objetivo da organização é reduzir a quantidade de
comunicação e coordenação necessárias.
7.17 Organização incorpora divisão de trabalho e especialização
da função a fim de evitar a comunicação.
7.18 A organização da árvore convencional reflete o autoridade
princípio da estrutura de que nenhuma pessoa pode servir a dois senhores.
7,19 o comunicação a estrutura em uma organização é uma rede, não
uma árvore, portanto, todos os tipos de mecanismos de
organização especiais ("linhas pontilhadas") devem ser concebidos
para superar as deficiências de comunicação da organização
estruturada em árvore.
7.20 Cada subprojeto tem duas funções de liderança a serem
preenchidas, a de produtor e o do diretor técnico, ou arquiteto.
As funções das duas funções são bastante distintas e requerem
talentos diferentes.
7.21 Qualquer um dos três relacionamentos entre as duas funções pode ser
bastante eficaz:
• O produtor e o diretor podem ser os mesmos.
• O produtor pode ser o chefe, e o diretor, o braço
direito do produtor.
• O diretor pode ser o chefe e o produtor o braço
direito do diretor.
Capítulo 8. Chamando o tiro 237
8,2 Os dados para a construção de pequenos sistemas isolados não são aplicáveis
a projetos de sistemas de programação.
8,3 Os aumentos de programação ocorrem como uma potência do tamanho do
8,4 programa. Alguns estudos publicados mostram que o expoente é cerca de
1,5. [ Os dados de Boehm não concordam com isso, mas variam de
1,05 a I.2.] 1
8,5 Os dados ICL de Portman mostram programadores em tempo integral
aplicando apenas cerca de 50% de seu tempo em programação e
depuração, em comparação com outras tarefas do tipo overhead.
8,6 Os dados da IBM de Aron mostram que a produtividade varia de 1,5
K linhas de código (KLOC) por homem-ano a 10 KLOC / homem-ano
em função do número de interações entre as partes do sistema.
programas.
9,9 Uma decisão política inicial é decidir quão refinada será a escolha de
opções do usuário, uma vez que empacotá-las em grupos economiza
espaço de memória [e freqüentemente custos de marketing]. O
9,10 tamanho da área transitória, portanto a quantidade de programa por
busca de disco, é uma decisão crucial, uma vez que o desempenho é
uma função superlinear desse tamanho. [Toda essa decisão ficou
obsoleta, primeiro pela memória virtual, depois
Capítulo 10. A Hipótese Documentária 239
11.15 Estruturar uma organização para mudanças é muito mais difícil do que
projetar um sistema para mudanças.
11.16 O chefe do projeto deve trabalhar para manter os gerentes e o
pessoal técnico tão intercambiáveis quanto seus talentos
permitirem; em particular, deseja-se ser capaz de mover as
pessoas facilmente entre funções técnicas e gerenciais.
11.17 As barreiras para uma organização de escada dupla eficaz são
sociológicas e devem ser combatidas com vigilância e energia
constantes.
11.18 É fácil estabelecer escalas salariais correspondentes para os
degraus correspondentes em uma escada dupla, mas
requer fortes medidas proativas para dar-lhes o prestígio
correspondente: escritórios iguais, serviços de apoio iguais,
ações de gestão compensatórias.
11.19 A organização de uma equipe cirúrgica é um ataque radical a todos os
aspectos desse problema. É realmente a resposta de longo prazo para
o problema da organização flexível.
InteractiveProgramming
para dados de entrada válidos, alguns para dados de entrada limítrofes e alguns
para dados de entrada claramente inválidos.
Epílogo Original
EI Os sistemas de software são talvez os mais intrincados e
complexos (em termos de número de tipos distintos de peças) das
coisas que a humanidade faz.
E.2 O alcatrão da engenharia de software continuará a ser
difícil por muito tempo.
19
O Mítico Homem-Mês
depois de 20 anos
19
O Mítico Homem-Mês
depois de 20 anos
PATRICK HENRY
EDMUND BURKE
253
254 O Mítico Homem-Mês depois de 20 anos
sistema perigoso que alguém já projeta. Eu tive que conceder a ele um "te
peguei".
A contradição é mais linguística do que real. O "segundo" sistema
descrito no Capítulo 5 é o segundo sistema em campo, o sistema
subsequente que convida a funções adicionais e enfeites. O "segundo"
sistema no Capítulo 11 é a segunda tentativa de construir o que deveria
ser o primeiro sistema a ser colocado em campo. É construído sob todas
as restrições de cronograma, talento e ignorância que caracterizam os
novos projetos - as restrições que exercem uma disciplina de magreza.
atividade upstream.
Projetar a implementação mostrará que alguns recursos
arquitetônicos prejudicam o desempenho; então a arquitetura tem que
ser retrabalhada. Codificar a realização mostrará algumas funções para os
requisitos de espaço do balão; portanto, pode ser necessário fazer
alterações na arquitetura e na implementação.
Pode-se muito bem, portanto, iterar por dois ou mais ciclos de design
de implementação de arquitetura antes de realizar qualquer coisa como
código.
Sub-rotinas
Fig. 19.2
268 O Mítico Homem-Mês depois de 20 anos
ParnasFamilies
David Parnas foi um grande líder de pensamento em engenharia de software
durante todo esse período de 20 anos. Todos estão familiarizados com seu
conceito de ocultação de informações. Um pouco menos familiar, mas muito
importante, é o conceito de Parnas de projetar um produto de software como
um Familia de produtos relacionados. onze Ele incentiva o designer a prever
extensões laterais e versões sucessivas de
Parnas Famílias 269
Fig. 19.3
Depois de enviarmos pela primeira vez, estaremos enviando versões posteriores que
adicionam mais funções a um produto existente em execução. Por que o processo de
construção inicial deveria ser diferente? Começando no momento de nosso primeiro
marco [onde a marcha para o primeiro navio tem três marcos intermediários],
reconstruímos o sistema de desenvolvimento todas as noites [e executamos os casos
de teste]. O ciclo de construção se torna a pulsação do projeto. Todos os dias, uma ou
mais equipes de programadores-testadores fazem check-in de módulos com novas
funções. Após cada construção, temos um sistema em execução. Se a compilação for
interrompida, paramos todo o processo até que o problema seja encontrado e
corrigido. Em todos os momentos, todos na equipe conhecem seu status.
Incremental-BuildandRapidPrototyping
Uma vez que um processo de desenvolvimento incremental permite
testes iniciais com usuários reais, qual é a diferença entre isso e a
prototipagem rápida? Parece-me que os dois estão relacionados,
mas separados. Um pode ter um sem o outro.
Harel define utilmente um protótipo como
els são apoiados por uma imensa quantidade de dados. Acho que o
livro será um clássico útil daqui a uma geração.
Seus resultados confirmam solidamente o A afirmação de MM-M de
que o trade-off entre homens e meses está longe de ser linear, que o
homem-mês é de fato mítico como medida de produtividade. Em
particular, encontrei: quinze
Cada equipe de recursos (30-40 pessoas) possui seu conjunto de recursos, sua
programação e até mesmo seu processo de como definir, construir, enviar. O time é feito
Qual é a maior nova surpresa? Milhões de computadores 279
O principal impulso [nos últimos anos] foi delegar poder. Foi como
mágica! Melhor qualidade, produtividade, moral. Temos equipes
pequenas, sem controle central. As equipes são donas do processo, mas
precisam ter um. Eles têm muitos processos diferentes. Eles são donos
da programação, mas sentem a pressão do mercado. Essa pressão faz
com que eles procurem as ferramentas por conta própria.
• Os ambientes IBMMVS e VM
«O ambiente DECVMS
«O ambiente Unix, de uma forma ou de outra
• O ambiente IBMPC, seja DOS, OS-2 ou Windows O
ambiente Apple Macintosh.
A indústria embalada. Para o desenvolvedor no
Na indústria embalada em papel termoelétrico, a economia é inteiramente
diferente daquela da indústria clássica: o custo de desenvolvimento é dividido
por grandes quantidades; os custos de embalagem e marketing são elevados.
Na indústria clássica de desenvolvimento de aplicativos internos, o
cronograma e os detalhes da função eram negociáveis, o custo de
desenvolvimento pode não ser; no mercado aberto ferozmente competitivo, o
cronograma e a função dominam bastante os custos de desenvolvimento.
Como seria de se esperar, a economia totalmente
diferente deu origem a culturas de programação bastante
diferentes. A indústria clássica tendia a ser dominada por
grandes empresas com estilos de gestão e culturas de
trabalho estabelecidos. A indústria encolhida, por outro lado,
começou como centenas de start-ups, que giravam
livremente e se concentravam ferozmente em fazer o
trabalho, e não no processo. Nesse clima, sempre houve um
reconhecimento muito maior do talento do programador
individual, uma consciência implícita de que grandes designs
vêm de grandes designers. A cultura de start-up tem a
capacidade de recompensar as estrelas de desempenho na
proporção de suas contribuições; na indústria de software
clássica, a sociologia das corporações e seus planos de
gerenciamento de salários sempre dificultaram isso.
291
292 Epílogo
Capítulo 1
1. Ershov considera isso não apenas uma dor, mas também uma
parte da alegria. AP Ershov, "Estética e o fator humano na
programação / ' CACM, 15, 7 (julho de 1972), pp. 501-505.
Capítulo 2
293
294 Notas e Referências
Capítulo 3
Capítulo 4
capítulo 5
Capítulo 6
Capítulo 7
Capítulo 8
Capítulo 9
Capítulo 10
Capítulo 11
Capítulo 12
Capítulo 13
Capítulo 14
Capítulo 15
Capítulo 16
Capítulo 17
Capítulo 18
Capítulo 19
1. Sobre este doloroso assunto, veja também Niklaus Wirth "A plea for
lean software", Computador, 28, 2 (fevereiro de 1995), pp. 64-68.
2. Coleman, D., 1994, "Word 6.0 packs in features; update slowed
baggage," MacWeek, 8, 38 (26 de setembro de 1994), p. 1
3. Muitas pesquisas de linguagem de máquina e frequências de
comando de linguagem de programação depois de fielding foram
publicados. Por exemplo, consulte J. Hennessy e D. Patterson,
Arquitetura do computador. Esses dados de frequência são muito úteis para
construir produtos sucessores, embora nunca se apliquem exatamente. Não
conheço estimativas de frequência publicadas preparadas
antes o produto foi projetado, muito menos comparações de
a priori estimativas e a posteriori dados. Ken Brooks sugere que os
quadros de avisos na Internet agora fornecem um método barato de
solicitar dados de usuários em potencial de um novo produto, embora
apenas um conjunto auto-selecionado responda.
4. Conklin, J. e M. Begeman, "gIBIS: A Hypertext Tool for Exploratory
Policy Discussion", Transações ACM em sistemas de informação de
escritório, Outubro de 1988, pp. 303-331.
5. Englebart, D. e W. English, "A research center for augmenting
human intellect," AFIPS Conference Proceedings, Fall Joint
Computer Conference, San Francisco (9-11 de dezembro de
1968), pp. 395-410.
6. Apple Computer, Inc., Diretrizes de interface humana do Macintosh,
Reading, Mass.: Addison-Wesley, 1992.
Notas e Referências 307
7. Parece que o Apple Desk Top Bus pode lidar com dois mouses
eletronicamente, mas o sistema operacional não fornece essa
função.
8. Royce, WW, 1970. "Gerenciando o desenvolvimento de grandes
sistemas de software: conceitos e técnicas," Processos,
WESCON (agosto de 1970), reimpresso no Procedimentos ICSE 9.
Nem Royce nem outros acreditaram que alguém pudesse passar pelo
processo de software sem revisar documentos anteriores; o modelo
foi apresentado como um ideal e um auxílio conceitual. Ver
DL Parnas e PC Clements, "Um processo de design racional:
como e por que fingir," IEEE Transactions on Software
Engineering, SE-12, 2 (fevereiro, 1986), pp. 251-257.
9. Uma grande reformulação do DOD-STD-2167 produziu o DOD-
STD2167A (1988), que permite, mas não exige, modelos mais
recentes, como o modelo espiral. Infelizmente, o MILSPECS que o
2167A faz referência e os exemplos ilustrativos que ele usa ainda
são orientados a cascata, portanto, a maioria das aquisições
continuou a usar a cascata, relata Boehm. Uma Força-Tarefa do
Conselho de Ciência da Defesa, comandada por Larry Druffel e
George Heilmeyer, em seu "Relatório da força-tarefa DSB sobre a
aquisição comercial de software de defesa" de 1994, defendeu o
uso de modelos mais modernos no atacado.
10. Mills, HD, "Top-down programming in large systems," in
Técnicas de depuração em grandes sistemas, R. Rustin, ed.
Englewood Cliffs, NJ: Prentice-Hall, 1971.
11. Parnas, DL, "On the design and development of program
family," IEEE Trans, em Engenharia de Software, SE-2, 1 (março
de 1976), pp. 1-9; Parnas, DL, "Projetando software para
facilitar a extensão e contração," IEEE Trans, em Engenharia de
Software, SE-5, 2 (março de 1979), pp. 128-138.
12. D. Harel, "Mordendo a bala de prata", Computador ( Jan ,, 1992),
pp. 8-20.
13. Os artigos seminais sobre ocultação de informações são: Parnas,
DL, "Aspectos de distribuição de informações da metodologia de
design", Carnegie-Mellon, Dept. of Computer Science, Tech-
308 Notas e Referências
309
310 Índice
61, 73, 78, 79, 88, 100, 111, coragem, gerencial, 12, 21, 119,
183.232.233.234.235.236, 153, 221, 242, 274
240, 274 tribunal, para disputas de
compatibilidade, 63, 64, 68 design, 66 Cox, BJ, 210, 212, 304
operação em tempo de compilação, Crabbe, G., 163
66 compilador, 132 criação, etapas de componentes, 15,
complexidade, 182, 211, 226, 233, 45, 143
288 alegria criativa, 7, 120, 280
arbitrário, 184, 211 estilo criativo, 47
210 conceitual trabalho criativo, 46
depuração de componente, 144 criatividade, 278, 280
componente, 223, 230, 239, 284, cronograma do caminho crítico, 89.156,
286 158, 247, 301
manequim 148 Crockwell, D., 87
compreensibilidade, 186 Crowley, WR, 132
instalação de computador, 128 cursor, 261
construção conceitual, 182, 186, personalização, 219
209 personalização, 222
integridade conceitual, 35, 36, 42,
62, 80, 142, 184, 232, 233, d'Orbais, J., 41
255, 257, 260, 264 Dahl, OJ, 300, 308
estrutura conceitual, 180 Daley, R. C, base de
conferências, 66 dados 300, 108
conformidade, 184 serviço de dados, 131
Conger, SA, 214, 304 banco de dados, 198, 223, 240, 283, 285
Conklin, J., 259, 306 tipo de dados, resumo, 189
programa de controle, 91, 93 data, estimada, 158
convergência de depuração, programado, 158
9 Conway, ME, Ill, 297 auxiliar de depuração, 128
Conway, RW, 47, 294 Cooley, depuração, componente, 144
JW, 102 linguagem de alto nível, 135
copiloto, 32 interativo, 34, 136, 146, 245
312 Índice