bLoG dOs NiNfOrMáTiCoS, NeRdS e AfInS


28/09/2008


Primeiro Caso de Estudo: Escopo, Esforço, Custo, Prazo e Tamanho de Equipe

Galera, novamente estou aqui de madrugada escrevendo o nosso caso de estudo, mas desta vez estou muito irritado pois esta é a segunda vez que eu escrevo este artigo, pois quando eu estava no final do artigo a energia acabou e eu perdi tudo.

Mas bora lá de novo, eu sou teimoso... :D

Definindo Escopo

No último post eu prometi explicar como identificar os "coelhos escondidos" no levantamento inicial de um projeto.
Abaixo, para o requisito "a" de nossa "lista de desejos", faço três perguntas que devemos fazer para cada um dos requisitos já identificados anteriormente, para que possamos fechar o escopo do projeto:

item a) Criação de um capeonato.

i) Pergunta 1: Um campeonato é composto de que?

  • Resposta: Times, Estádios, Juízes, Público, Renda, Regras, etc.
    ii) Pergunta 2: Algum item identificado na pergunta 1 NÃO está em nossa lista de desejos?
  • Resposta: Times, Estádios, Público, Renda, Regras.
    iii) Pergunta 3: Algum novo item engloba algum requisito já levantado anteriomente?
  • Resposta: Sim, a exemplo do requisito Regras, que engloba os requisitos "b", "c", "d", "e" e "g".
    Aplicando as três perguntas explicadas acima, termos uma nova lista de desejos, conforme demonstrado abaixo:
    a) Manutenção de campeonatos.
    b) Manutenção de Regras (número de times, quantidade de grupos, criação de fases, critérios de classificação/elimininação, critérios de suspensão dos jogadores ou técnicos).
    c) Sorteio automático dos times que serão a composição dos grupos.
    d) Escalação de juízes e organizadores das partidas.
    e) Relatórios de classificação dos times.
    f) Relatórios para emissão da lista dos atletas automáticamente suspensos.
    g) Publicação dos resultados das rodadas dos campeonatos de forma ágil.
    h) Manuntenção de Times.
    i) Manutenação de Estádios
    j) Manutenação de Público e Renda.

    Veja que a segunda lista está bem diferente da primeira, e com esta nova lista temos uma visão melhor do projeto. Outro detalhe importante de ser comentado é que embora adicionamos novos itens a nossa lista, em uma situção real, devemos definir com o nosso cliente quais os requisitos que são essenciais para o projeto. O recado é, o usuário que tem que saber o que é bom para ele e não nós analistas e desenvolvedores.


    Definindo Esforço

    Eu gosto de utilizar as métricas "Use case points" e "Functions points", para estimar esforço. No entando ambas as técnincas não são tá ágeis de aplicação e como normalmente temos que enviar propostas rapidamente, eu desenvolvi uma forma sistêmica de realizar orçamentos de esforço, embora neste caso eu conto com a minha experiência para a aplicação deste método, nunca tive problemas quando apliquei este métodos. Como as técnicas formais, comentadas anteriormente são fáceis de encontrar material, eu vou realizar a definição de esforço com base na minha técnica pessoal, conforme pode ser observado abaixo:

    i) Classifique os requisitos em:
    pequenos: até 80 horas.
    médios: entre 80 e 160 horas.
    grandes: entre 160 e 480 horas.
    enormes: maiores que 480 horas.


    ii) Classifique a complexidade de cada atividade em:
    fácil: 1
    média: 2
    complexa: 3
    difícil: 4


    iii) Encontre o total de horas (aplicando o item "i" e multiplicando pela classificação do item "ii")

    a) 80 horas (pequeno) x 1 (fácil) = 80 horas
    b) 480 horas (grande) x 2 (média) = 960 horas
    c) 80 horas (pequeno) x 3 (complexa) = 240 horas
    d) 80 horas (pequeno) x 3 (complexa) = 240 horas
    e) 80 horas (pequeno) x 1 (fácil) = 80 horas
    f) 80 horas (pequeno) x 1 (fácil) = 80 horas
    g) 80 horas (pequeno) x 1 (fácil) = 80 horas
    h) 80 horas (pequeno) x 1 (fácil) = 80 horas
    i) 80 horas (pequeno) x 1 (fácil) = 80 horas
    j) 80 horas (pequeno) x 1 (fácil) = 80 horas

    Total de horas: 2000 horas.

    iv) Total de horas ajustadas

    Aplique uma margem de erro ao total de horas encontrado, normalmente eu trabalho com 15% de margem de erro.

    Total de horas ajustado: 2000 x 1.15 = 2300 horas.


    Definindo Custo, Prazo e Tamanho de Equipe

    Neste ponto do artigo, penso eu, que você já deva imaginar como definir o custo do projeto, pois isto é definido pelo esforço x o valor hora que você cobra para realizar um projeto. Por exemplo, se você cobra R$ 50,00/hora o valor do projeto seria R$ 115.000,00, já se o seu valor/hora é R$ 35,00, o projeto sairia por R$ 80.500,00.

    Um detalhe que é muito importante salientar é que olhando os valores, a impressão que temos é muito dinheiro e temos uma boa margem de manobra e muitas vezes para não perdermos o projeto baixamos o valor hora do projeto para não ficarmos sem o "trabalho", mas pense comigo:

    Leve em conta, que você desenvolverá o projeto sozinho, que cada mês tem 23 dias úteis e que sua jornada de diária será 11 horas, logo o projeto demoraria 10 meses.

    i) com o valor de R$ 50,00/hora, por mês seria:
    Rendimento bruto seria: 11 x 23 x 50,00 = 12.650,00
    Gastos fixos seriam: 23 x 15,00 = 345,00 (refeição) + 150,00 (estacionamento) + 150,00 (combustível) + 18% de imposto (2277,00) = 2.922,00.

    Rendimento Líquido: 9.728,00 (veja que são mais de 23% de despesas)

    ii) com o valor de R$ 35,00/hora, por mês seria:
    Rendimento bruto seria: 11 x 23 x 35,00 = 8.855,00
    Gastos fixos seriam: 23 x 15,00 = 345,00 (refeição) + 150,00 (estacionamento) + 150,00 (combustível) + 18% de imposto (1593,90) = 2.238,90.

    Rendimento Líquido: 6.616,10 (veja que são mais de 25% de despesas)

    Os dois exemplos acima servem para ilustarar que embora o montante total aparente ser muito, na prática teremos gastos durante o projeto e que eles devem ser supridos pelo próprio projeto, não podemos "pagar para trabalhar", portanto analise este tipo de coisa quando for dar um orçamento de projeto.

    Para definir o prazo e o tamanho da equipe, isto irá depender da necessidade que o seu cliente tem, por exemplo, se ele puder esperar 10 meses tudo bem, mas se ele quiser em 1 mês o projeto, você terá que montar uma estratégia para que o sistema atenda o prazo dele, mesmo que isso saia mais "caro" pra ele e isto tem que ficar claro para ele.

    Nos projetos que eu desenvolvo normalmente gasto 25% em análise, 38% em implementação, 25% em testes e 12% em documentação (usuário).

    Com estas informações, vamos ver qual seria a minha estatégia para gastar o meu orçamento (R$ 115.000,00) e entregar o projeto no prazo que o cliente deseja.
    Fase Análise (575 horas), eu colocaria 5 pessoas para relizar esta atividade, logo a terminaria em 10,5 dias.
    Fase Implementação (874 horas), eu colocaria 15 pessoas para realizar esta atividade, logo terminaria em 5,5 dias.
    Fase Testes (575 horas), eu colocaria 10 pessoas para realizar esta atividade, logo terminaria em 5,5 dias.
    Fase Documentação (276 horas), eu colocaria 3 pessoal para realizar esta atividade, logo terminaria em 8,5 dias.

    Tempo total de projeto: 30 dias.

    Observe que existem atividades que não temos como paralelisar muito, em especial as atividades de análise tem esta características, já em outros casos é perfeitamente possível a exemplo da fase de implementação. O principal recado é o prazo e o tamanho da equipe irá depender de quanto o seu cliente está disposta a esperar.

    Por hoje é só pessoal, mas antes de me despedir, vou repassar as lições aprendidas hoje:



    i) "Defina o escopo do projeto" - Reveja a lista de desejos e negocie os requisitos com o cliente.

    ii) "Estime o esforço" - Utilize métodos convencionais ou desenvolva um próprio, o importante é ser ágil.

    iii) "Defina o custo" - Não se embrigue pelo valor total, analise os seus custos fixos e veja se vale a pega pegar o projeto.

    iv) "Prazo e Tamanho de Equipe" depende do quanto o seu cliente está disposto a esperar.


    Espero que tenham gostado e aguardo as suas sugestões (wcristoni@uol.com.br).


    Na próxima publicação explicarei como montar um cronograma em duas situações, com data livre e com data de chegada.


    um abraço e até lá!

    Wilson
  • Escrito por wcristoni às 02h45
    [ ] [ envie esta mensagem ] [ ]

    06/09/2008


    Primeiro Caso de Estudo

     

    Bom pessoal, aqui estou eu novamente de madrugada escrevendo o primeiro caso de estudo, como eu havia prometido anteriormente. Então vou deixar de bla bla blá eu vou escrever o "causo".

     

    Imagine que você foi contratato pela CBF, para criar um sistema que controle a tabela do campeonato brasileiro de futebol. Porém, eles querem que o solução seja customizável para cada edição de todos os campeonatos que eles controlam, muito embora o foco neste momento seja apenas o campeonato brasileiro. Porém eles querem ter a opção de controlar a copa do Brasil ou algum outro campeonato que eles venham a inventar.

     

    Para isso, você que é uma pessoa experiente, vai se preocupar em levantar os requisitos do sistema. Deixo claro que não sou adepto ou contra qualquer metodologia de levantamento de requisitos existente, seja ela RUP, UML, Métodos Ágeis, SCRUM ou qualquer outra coisa. Porém acho que muitas destas tecnologias são moda e daqui a alguns anos alguém vai criar uma outra forma e ai vai ser a moda da época. No entando é fundamental que você se adeque a forma de trabalho da empresa que você está atuando no momento. Mas, idependente do método que você vai adotar é muito importante que ele tenha no mínimo algum documento que liste os requisitos do seu usuário, seria uma espécie de "lista de desejos" de seu usuário, pois com isso você será muito mais acertivo na hora de desenvolver a solução, perceba que não estou dizendo que você acertará complemente o que o usuário deseja, pois idéias todos os dias são complementadas.

     

    Voltando para o nosso caso de estudo, a CBF, deseja os seguintes requisitos para o novo sistema que ela está solicitando a você:

     

    a) Criação de um campeonato.

    b) Definição do número de times, que participarão de um campeonato.

    c) Definição do número de grupos de um campeonato.

    d) Criação das fases de um campeonato.

    e) Definição dos critérios de classificação ou eliminação de times nas fases que compõem um campeonato.

    f) Sorteio automático dos times que serão a composição dos grupos.

    g) Definição dos critérios de suspensão automática de jogadores.

    h) Escalação de juízes e organizadores das partidas.

    i) Relatórios para da classificação dos times.

    j) Relatórios para emissão da lista de atletas automáticamente suspensos.

    k) Forma de publicar os resultados da rodada de um campeonato, por exemplo, para a Caixa Econômica, que necessitará destes resultados, para identificar os ganhadores das apostas ou para facilitar aos torcedores um acompanhamento dos resultados das rodadas via celular ou até mesmo para que algum site de notícias esportivas tenha as informações o mais on-line possível.

     

    Bom estou parando a "lista de desejos" por aqui, pois aqui o exemplo é apenas ilustrativo, para conseguirmos ver exemplos práticos de como utilizar as tecnologias Micro$oft na solução de problemas. Observem que existem algumas coisas que o "usuário" não pediu, mas são implicitos ao sistema, quero apenas destacar alguns, são eles: Cadastro de Times, Cadastro de Juízes, Cadastro de Estádios, etc.

     

    Por hoje é só pessoal, mas antes de me despedir, vou repassar as lições aprendidas hoje:

     

    i) "Lista de Desejos" - Utilize algo que facilite a identificação das necessidades que a solução precisa atender.

    ii) "Identifique os coelhos escondidos" - Observe quais são os itens implícitos na solução.

     

    Espero que tenham gostado e aguardo as suas sugestões (wcristoni@uol.com.br).

     

    Na próxima publicação explicarei como fazer uma análise desta "lista de desejos" e como planejar esforço, custo, tamanho de equipe e prazos.

     

    um abraço e até lá!

    Wilson

     

    Escrito por wcristoni às 01h55
    [ ] [ envie esta mensagem ] [ ]

    31/08/2008


    Inauguração :D

    Pessoal, como o próprio título sugere, o objetivo deste blog é a publicação de artigos técnicos e/ou divulgação de boas matérias existentes na Internet.

     

    As matérias que serão publicadas aqui, sempre serão voltadas à plataforma Micro$oft pois no momento é o foco dos meus estudos. Eventualmente abordarei em algumas matérias temas básicos, a exemplo da modelagem de dados e orientação a objetos. No entando o objetivo principal deste trabalho é procurar sempre temas reletantes para que todos os profissionais de informática se atualizaem sempre de uma forma divertida, lógica e rápida.

     

    Espero que gostem e enviem suas sugestões para wcristoni@uol.com.br.

     

    Na próxima publicação explicarei o nosso primeiro caso de estudos.

     

    um abraço e até lá!

    Wilson

    Escrito por wcristoni às 23h56
    [ ] [ envie esta mensagem ] [ ]

    Histórico