Casos de Uso seria a forma correta de começar?

Boa noite caros amigos,

Para quem já leu outros posts meus sabem o quanto já batalhei pelo meu objetivo, mas se eu continuar desse jeito vou rachar a cabeça antes de cumpri-lo.

Após pensar muito, creio que devo focar 100% na modelagem, pois independe de qual linguagem vou programar, correto?

Procurei livros sobre Casos de Uso, pelo que vi o “Escrevendo Casos de Uso Eficazes” parece ser bem recomendado, mas estou na dúvida entre livro, curso online ou curso presencial.

Qualquer dica, qualquer sugestão é muito bem-vinda! Inclusive alguns xingamentos, por eu ser tão cabeça dura e burro por não entender uma coisa que parece ser tão simples como casos de uso, mas gosto de me informar bastante para fazer uma coisa técnica e não algo “nas coxas” por assim dizer.

Obrigado desde já,
Flávio

Amigo,
Caso de Uso é algo tão simples de se entender, porem por tras dele na modelagem existe vários outros (diagrama de sequencia, diagrama de Classe).
acredito que oq voce precisa alem de tudo é praticar, praticar e praticar! leia alguns tutoriais e assista video aulas, acredito que isso ja será o suficiente para você se “familiarizar” com o assunto!

Boa sorte !

[quote=fggs]Boa noite caros amigos,

Para quem já leu outros posts meus sabem o quanto já batalhei pelo meu objetivo, mas se eu continuar desse jeito vou rachar a cabeça antes de cumpri-lo.

Após pensar muito, creio que devo focar 100% na modelagem, pois independe de qual linguagem vou programar, correto?

Procurei livros sobre Casos de Uso, pelo que vi o “Escrevendo Casos de Uso Eficazes” parece ser bem recomendado, mas estou na dúvida entre livro, curso online ou curso presencial.

Qualquer dica, qualquer sugestão é muito bem-vinda! Inclusive alguns xingamentos, por eu ser tão cabeça dura e burro por não entender uma coisa que parece ser tão simples como casos de uso, mas gosto de me informar bastante para fazer uma coisa técnica e não algo “nas coxas” por assim dizer.

Obrigado desde já,
Flávio
[/quote]
A primeira coisa que te pergunto é, vai criar casos de uso baseado em quê?
Já tem os requisitos?
Se sim, eles podem não conter dados suficientes para criar os casos de uso (talvez os diagramas, mas não a especificação de casos de uso). Isso implica em falar com o cliente repetidas vezes, esclarecer detalhes de regras de negócio, fórmulas e legislação vigente, afinal, você não quer que teu projeto dê errado.

A segunda coisa é, quem irá desenvolver? Você já compreendeu que, independente da linguagem, precisa focar na análise. Agora, imagine que você está criando casos de uso (ou a análise) para quem pode programar em C#, Java, PHP, Cobol, etc e nunca fez nada parecido. Ou seja, você precisa ser o mais descritivo possível, mais objetivo e coerente, para evitar dubialidades. Além do mais, precisa ser extremamente detalhista, definindo qual fluxo principal, alternativos, de exceção, regras de negócio e demais pormenores que se façam necessários (se preciso, inclua alguns algoritmos também).

Pensando nestas duas coisinhas, já fica mais fácil.

Obrigado pelas respostas pessoal!

@vitordarela:

Muito obrigado pelas sugestões, vou pesquisar sobre esses diagramas, quem sabe isso me ajuda a clarificar as idéias na hora de modelar, por enquanto tá tudo embassado! heheheh

@drsmachado:

Para te ajudar a me ajudar, eu sou o próprio cliente. Esse sistema é para mim mesmo, mas estou tendo bastante dificuldade em modelar.
Fiz alguns esboços de diagramas de fluxo, mas não estou seguro de que é isso, pois como você mesmo perguntou, não sei se levantei os requisitos corretamente.

Você também tocou num ponto importante, meu desejo é utilizar JSF com PostgreSQL, não sou eu quem vai programar, afinal, nem as apostilas da Caelum eu consigo terminar.

Eu estou procurando um fio da meada para fazer a coisa do jeito correto, que facilite a manutenção e implementação de coisas novas, nem que eu tenha que primeiro estudar como fazer análise para depois partir para o meu caso específico. Existe curso de análise? Online? Presencial? Livros bons? Não me importo de ler, estudar, desde que eu tenha alguém ou um grupo pra confirmar se estou no caminho correto.

[quote=fggs]Boa noite caros amigos,

Para quem já leu outros posts meus sabem o quanto já batalhei pelo meu objetivo, mas se eu continuar desse jeito vou rachar a cabeça antes de cumpri-lo.

Após pensar muito, creio que devo focar 100% na modelagem, pois independe de qual linguagem vou programar, correto?

Procurei livros sobre Casos de Uso, pelo que vi o “Escrevendo Casos de Uso Eficazes” parece ser bem recomendado, mas estou na dúvida entre livro, curso online ou curso presencial.

Qualquer dica, qualquer sugestão é muito bem-vinda! Inclusive alguns xingamentos, por eu ser tão cabeça dura e burro por não entender uma coisa que parece ser tão simples como casos de uso, mas gosto de me informar bastante para fazer uma coisa técnica e não algo “nas coxas” por assim dizer.

Obrigado desde já,
Flávio
[/quote]

Primeiro, é preciso que vc entenda que “Casos de Uso” não é um documento UML. Antes de ser um documento UML, os casos de uso são contos que os usuários lhe vão explicar que querem realizar. Depois que eles lhe contarem e vc entender, tem ainda que simplificar o processo, diminuir o numero de inputs, de telas e de cliques ( tudo isso para evitar erros de entrada). Depois disso bem entendido e seco é que vai para UML.
O trabalho de analise, levantamento, ou seja lá como quiser chamar é primeiro a tudo o resto. Começa com os stakeholders principais com perguntas do tipo “porque vc quer o sistema?” “pq o sistema atual não atender”, etc… se ha investimento de dinheiro é suposto haver retorno e vc precisa entender isso. É assim que vc entende porque o sistema existe. Depois vai para os outros stakeholders , os usuários finais , os genrentes deles, etc… Depois de tudo isso coletado, analisado, filtrado, secado vc ainda volta nos stakholders principais e mostra o que descobriu. Eles vão arranjar alguns detalhes e depois disso vc tem uma clara noção do que o sistema tem que fazer do ponto de vista do uso que será feito dele. Dai o nome “Casos de uso”. O “uso” não é porque o “usuário” vai interagir com o sistema. Pode ter qualquer tipo de ator, ou até mesmo nenhum ( casos em que o sistema é que envia os dados para fora ). Durante as entrevistas vc vai perceber outras demandas além do uso. Algumas tecnologicas, algumas de negocio e alguma até politicas. Controle de acesso. Tipo de deploy ( web VS dektop VS outra coisa). Etc… tudo isso são os requisitos. Todos os requisitos devem ser documentados. Qual foi o requisito, quando foi levantado, quem o levantou e quem o pediu ( stakeholder). Todos esses requisitos tb têm que ser analisados, sintetizados ( alguns são repetidos, incompletos ,etc… ) e colocados num documento. Existem muitos requisitos que não se referem ao uso ou que são subentendidos durante o uso ( tipo, CPF será formatado e validado, ou “o sistema tem um login”) . Nunca assuma nada. Se é falado, é requisito. Coloque no documento. Mais tarde vc irá priorizar esses requisitos junto com os stakeholders. Os casos de uso tb são requisitos mas que dizem mais respeito a navegação, mas permite entender a divisão de tarefas e politicas.

Fazer Software é transforma esses requisitos em algo que os realiza.

Não menospreze a analise e sintetize de requisitos, mas também não se perca nela. Existe umcaminho minimo, um “software minimo” que os stakewholders irão aceitar para começo. Encontre qual ele é. Coloque todos os requisitos que pertencem a ele, com máxima prioridade e o resto com menos. Ficarão para outra altura, mas não os perca de vista, pois sua arquitetura, design e implementação vão depender deles. Tenha tb em atenção o risco. Alguns requisitos são mirabolantes. Se o cliente não os prioriza à partida isso é excesso de confiança ou de eles realmente não são tão importantes assim. Deixe claro para o cliente o risco, e peça que ele se comprometa consigo.

Caos de uso não, por se, a forma correta de começar. A forma correta é entrevistas. Seguido de analise, síntese e mais entrevistas. Se possivel com RFC (Request for Comments) em cima do documento final que vc vai produzir.

Vai vir alguem aqui dizer que isto não é ágil e bla bla bla… bem pelo contrário. A agilidade está em apenas documentar o que é certeza, o que é real. E não documentar toda e qualquer balela que lhe contarem. A entrevista deve ser informal. E depende muito do nivel das pessoas que vc está conversando. Erros de requisitos são mais raros que erros de implementação mas podem custa de 3 a 30 vezes mais para corrigir. às vezes impossibilitando o progresso do projeto ou levando a que os usuários não fiquem satisfeitos e não usem o software, provocando prejuizo na empresa, que investiu no software exactamente para ter algun retorno. O sucesso do software não é ele ficar pronto, é alguém o usar por muito tempo. As fábricas de software esquecem disto, e os clientes esquecem que pagaram. Não cai nessa.

@sergiotaborda: Muito obrigado por explicar tudo isso, pelas minhas pesquisas eu já tinha percebido que Casos de uso em si não é documento UML. Por tudo que você disse, acho que agora tenho que encontrar as perguntas certas para as entrevistas. Desde o inicio da minha empreitada eu tenho algumas anotações, posso postar aqui para vocês avaliarem? Acredito que não seja nada confidencial, e além do mais, eu sou o próprio cliente. O que eu vou perguntar agora é bem idiota, mas vamos lá: existe algum tipo de lista de perguntas iniciais a fazer para os stakeholders? Puxa, eu realmente gostaria que houvesse um passo a passo disso heheheh

Se houvesse, ninguem pagaria os analistas, lol…
Além disso , as entrevistas são como psicanalise, é complicado vc saber o que perguntar, e é complicado ainda mais vc se perguntar a si mesmo. (A uso da palavra “analista” não é coincidência :slight_smile: )
Se vc está fazendo um sistema para si mesmo, então a pergunta essencial é : Porquê? Porque vc não usa um pronto ?

Existe um livro que eu acho muito bom que não tem a lista propriamente dita, mas é um bom começo : Software Requirement Patterns.

Este livro permite explorar mais perguntas dadas algumas respostas. Por exemplo, se o stakholder que um login, será que ele quer recuperação de senha ? Será que o sistema irá ter permissões diferentes ? Será que é preciso gerenciar essas permissões pelo sistema com uma conta de admim ? Etc… Por exemplo e-comerce precisa de login, mas não tem permissões diferentes. É apenas para identificação.

Depois de saber o porquê ele normalmente está relacionado ao como. Porque quer uma tencologia mais moderna. Porque quer web em vez de desktop, porque quer que haja acesso de qq parte do mundo, etc… Depois vem o “o quê”. Sim, mas afinal o que sistema faz ? É um e-comerce, é um ERP ? é um CRM? uma mistura dos 3 ? é um jogo ? é uma app mobile ? qual é o propósito do sistema para quem o usa ? Tem vários utilizadores ? Quem seriam ? Qual é o perfil dessas pessoas ? O sistema é de apoio à vida ? (ou seja, se ele errar pessoas morrem ?) , o sistema é de auxilio tecnico ? ( tipo um CAD) , etc , etc … definindo o que ele faz, em nome de quem, quem usa, quem acessa, de onde, e que tecnologia suporta isso tudo já é um bom começo.

@sergiotaborda: Exato! Bem isso que eu tava procurando, esses tipos de perguntas, agora eu tenho uma minima noção de como começar. Será que existe esse livro pra comprar no Brasil? Não estou achando!

Muito obrigado!

Vc consegue comprar pela livraria cultura embora seja importado. Eu comprei diretamente na loja, então …

@sergiotaborda: Mais uma vez muito obrigado! Pena que demora até 6 semanas para chegar, mas acho que vou comprar mesmo assim. Não achei caro, é só o prazo de entrega mesmo… Na Amazon deve demorar mais ou menos a mesma coisa heheheh

Não sei se estou tomando a decisão correta, mas estou pensando seriamente em abandonar os diagramas/modelagem do sistema e focar 100% em Análise de Negócio, BPM. Assim eu vou ter ferramentas para: 1- Mostrar minha real necessidade para quem for programar e 2- Gerenciar a entrega.

Gostaria que comentassem esse caminho que estou tomando e se concordarem/souberem, sugerir cursos online.

Desde já, muito obrigado!