The Mythical Man-Month

the mythical man-monthEdit

Brooks discusses several causes of scheduling failures. O mais duradouro é a sua discussão sobre a lei de Brooks: adicionar mão-de-obra a um projeto de software tardio torna-o mais tarde. O homem-mês é uma unidade hipotética de trabalho que representa o trabalho feito por uma pessoa em um mês; a lei de Brooks diz que a possibilidade de medir o trabalho útil no homem-meses é um mito, e é, portanto, a peça central do livro.os projetos de programação complexos não podem ser perfeitamente divididos em tarefas discretas que podem ser trabalhadas sem comunicação entre os trabalhadores e sem estabelecer um conjunto de inter-relações complexas entre as tarefas e os trabalhadores que as executam.

portanto, atribuir mais programadores a um projeto que está atrasado fará com que seja ainda mais tarde. Isto é porque o tempo necessário para os novos programadores para aprender sobre o projeto e o aumento da comunicação overhead vai consumir uma quantidade cada vez maior do tempo de calendário disponível. Quando n As pessoas têm que se comunicar entre si, como n aumenta, sua saída diminui e quando se torna negativo o projeto é atrasado ainda mais com cada pessoa adicionada.

  • fórmula de intercomunicação de Grupo: n (n − 1) / 2
  • Exemplo: 50 programadores dão 50 · (50 – 1) / 2 = 1225 canais de comunicação.artigo principal:: No Silver Bullet

    Brooks adicionou ” No Silver Bullet-Essence and Accidents of Software Engineering “—e mais reflexões sobre ele,”‘No Silver Bullet’ Refired ” -para a edição de aniversário do mítico Man-Month.Brooks insiste que não há uma única bala de prata — ” não há um único desenvolvimento, nem na tecnologia nem na técnica de gestão, que por si só promete uma ordem de melhoria de magnitude dentro de uma década na produtividade, na confiabilidade, na simplicidade.”

    o argumento baseia-se na distinção entre complexidade acidental e complexidade essencial, similar à forma como a lei de Amdahl baseia-se na distinção entre “estritamente serial” e “parallelizável”.

    segunda-sistema effectEdit

    ver artigo Principal: Segunda-efeito de sistema

    A segunda-efeito de sistema propõe que, quando um arquiteto projeta um segundo sistema, que é o mais perigoso de sistema que eles nunca irão design, porque eles tendem a incorporar todas as adições que originalmente não adicionar o primeiro sistema devido às restrições de tempo. Assim, ao embarcar em um segundo sistema, um engenheiro deve estar ciente de que eles são suscetíveis a excesso de engenharia.

    a tendência para O irredutível número de errorsEdit

    Veja também: Heisenbug
    99 pequenos bugs no código.

    99 bugs pequenos.leve um para baixo, dê uma volta.

    127 pequenos bugs no código…

    o autor faz a observação de que em um sistema adequadamente complexo há um certo número irredutível de erros. Qualquer tentativa de corrigir erros observados tende a resultar na introdução de outros erros.

    Progress trackingEdit

    Brooks escreveu ” Question: How does a large software project get to be one year late? Resposta: Um dia de cada vez!”Derrapagens incrementais em muitas frentes eventualmente se acumulam para produzir um grande atraso geral. É necessária uma atenção contínua ao cumprimento de pequenos marcos individuais em cada nível de gestão.

    integrityEdit

    para fazer um sistema fácil de usar, o sistema deve ter integridade conceitual, o que só pode ser alcançado separando a arquitetura da implementação. Um único arquiteto-chefe (ou um pequeno número de arquitetos), agindo em nome do usuário, decide o que entra no sistema e o que fica de fora. O arquiteto ou equipe de arquitetos deve desenvolver uma idéia do que o sistema deve fazer e garantir que esta visão é compreendida pelo resto da equipe. Uma ideia nova de alguém pode não ser incluída se não se encaixar perfeitamente com o design geral do sistema. Com efeito, para garantir um sistema convivial, um sistema pode, deliberadamente, oferecer menos características do que é capaz de fornecer. A questão é que, se um sistema é muito complicado de usar, muitas características não serão utilizadas porque ninguém tem tempo para aprendê-las.o arquiteto chefe produz um manual de especificações do sistema. Deve descrever em pormenor as especificações externas do sistema, ou seja, tudo o que o utilizador vê. O manual deve ser alterado conforme o feedback vem das equipes de implementação e dos usuários.

    o piloto systemEdit

    ao projetar um novo tipo de sistema, Uma equipe irá projetar um sistema de arremesso (quer pretenda ou não). Este sistema atua como um” plano piloto ” que revela técnicas que posteriormente causarão uma reformulação completa do sistema. Este segundo, sistema mais inteligente deve ser o entregue ao cliente, uma vez que a entrega do sistema piloto não causaria nada além de agonia para o cliente, e possivelmente arruinar a reputação do sistema e talvez até mesmo a empresa.

    documentsEdit Formal

    cada gestor de projecto deve criar um pequeno conjunto de documentos formais que definam os objectivos do projecto, como devem ser alcançados, quem os vai alcançar, quando vão ser alcançados e quanto vão custar. Estes documentos podem também revelar inconsistências que, de outro modo, são difíceis de ver.

    Project estimationEdit

    ao estimar os tempos do projecto, deve-se recordar que os produtos de programação (que podem ser vendidos a clientes pagantes) e os sistemas de programação são três vezes mais difíceis de escrever do que os simples programas internos independentes. Deve ter-se em mente o quanto da semana de trabalho será realmente gasto em questões técnicas, em oposição a tarefas administrativas ou outras tarefas não técnicas, tais como reuniões, e especialmente reuniões “stand-up” ou “all-hands”.

    CommunicationEdit

    para evitar desastres, todas as equipes que trabalham em um projeto devem permanecer em contato umas com as outras de muitas maneiras possíveis—e-mail, telefone, reuniões, memorandos, etc. Em vez de assumir algo, implementadores devem pedir ao(s) arquiteto (s) para esclarecer sua intenção em uma característica que estão implementando, antes de prosseguir com uma suposição que pode muito bem ser completamente incorreta. O(s) arquitecto (s) é (m) responsável (eis) pela formulação de uma imagem de grupo do projecto e pela sua comunicação aos outros.

    cirúrgico teamEdit

    Máximo de uma equipe cirúrgica durante a cirurgia é liderada por um cirurgião realizar mais trabalho crítico, enquanto direcionando a equipe para ajudar com menos peças críticas, parece razoável ter um “bom” programador desenvolver componentes críticos do sistema, enquanto o resto de uma equipe oferece o que é necessário no momento certo. Além disso, Brooks diz que os “bons” programadores são geralmente cinco a dez vezes mais produtivos que os medíocres.

    congelamento de código e versioningEdit do sistema

    o Software é invisível. Por conseguinte, muitas coisas só se tornam evidentes depois de uma certa quantidade de trabalho ter sido feito num novo sistema, permitindo a um utilizador experimentá-lo. Esta experiência produzirá insights, o que mudará as necessidades de um usuário ou a percepção das necessidades do Usuário. O sistema deve, portanto, ser alterado para atender aos requisitos alterados do Usuário. Isto só pode ocorrer até um certo ponto, caso contrário o sistema pode nunca ser concluído. Numa determinada data, não devem ser Permitidas mais alterações ao sistema e o código deve ser congelado. Todos os pedidos de alterações devem ser adiados até a próxima versão do sistema.

    Especializados toolsEdit

    em Vez de todo o programador deve ter seu próprio conjunto especial de ferramentas, cada equipe deve ter uma ferramenta designada criador, que pode criar ferramentas que são altamente customizados para o trabalho que a equipe está fazendo, por exemplo, um gerador de código, ferramenta que cria o código baseado em uma especificação. Além disso, as ferramentas a nível do sistema devem ser construídas por uma equipa comum de ferramentas, supervisionada pelo gestor do projecto.

    Redução de desenvolvimento de software costsEdit

    Existem duas técnicas para a redução de custos de desenvolvimento de software que Brooks escreve sobre:

    • Implementadores pode ser contratado somente após a arquitetura do sistema foi concluída (um passo que pode levar vários meses, durante o qual, prematuramente, contratado implementadores pode não ter nada para fazer).outra técnica que Brooks menciona não é desenvolver software, mas simplesmente comprá-lo “fora da prateleira” quando possível.

Deixe uma resposta

O seu endereço de email não será publicado.