Rede de
Relacionamentos Jackut
Este semestre, desenvolveremos uma rede de relacionamentos, o . Nesta disciplina, a análise é dada pronta para vocês, através desse documento (leiam com bastante atenção) e, principalmente, através dos artefatos de análise executáveis representados pelos testes de aceitação automáticos que serão fornecidos (se você não entendeu essa frase, comece a assistir às aulas). Um dos objetivos desse projeto é fazer com que vocês consigam construir um sistema que passe 100% dos testes de aceitação. Se conseguirem, significa que vocês atingiram o objetivo mais importante no desenvolvimento de software de qualidade: atender aos requisitos do cliente.
|
Os testes de aceitação acessam apenas a lógica do negócio, não a interface com o usuário. Em um sistema qualquer, interfaces bonitas e fáceis de usar são uma característica muito importante. Entretanto, para facilitar a vida de vocês, só implementaremos a lógica de negócio do sistema, sem implementação alguma de interface com o usuário. Também é uma regra importante separar a interface com o usuário da lógica de negócio e fazer com que seu projeto não tenha interface com o usuário é uma forma de você sacar esse ponto arquitetural importante.
Vocês terão que projetar e implementar o sistema de uma forma incremental. Haverá alguns milestones e, em cada um, novas funcionalidades serão adicionadas ao sistema. As funcionalidades estão descritas dentro de User Stories. Uma User Story consiste de duas partes: 1) uma descrição informal do que se deseja em termos de funcionalidade e das interações que o sistema deve suportar; 2) um conjunto formal de testes de aceitação que, se executarem direitinho, comprovam que a funcionalidade foi implementada como desejada. Em cada um dos milestones, haverá um conjunto de user stories que deverá ser implementado. Aqui você encontra os testes de aceitação para cada user story, e as instruções de como rodá-los. Antes de entregar um milestone, sempre leia as recomendações e a listagem do que deve ser entregue.
O sistema será construído em etapas (chamadas iterações). Em cada iteração, certas User Stories serão desenvolvidas. Veja os detalhes da análise nas descrições das user stories (há também um glossário dos termos usados no sistema).
O é um sistema que mantém uma rede de relacionamentos, nos moldes de uma série de outras que há na internet hoje em dia (Orkut, Friendster, etc.). Ele é particularmente inspirado no Orkut (www.orkut.com), mas não é uma cópia deste (é bem mais simples, na verdade).
A funcionalidade desejada do Jackut está descrita
· Manter um cadastro de informações dos usuários (perfis, álbuns, etc.)
· Manter uma série de informações de relacionamentos entre os usuários (agrupamentos em comunidades, redes de amizade, de fãs, listas de paqueras, etc.)
· Manter o fluxo de mensagens entre os usuários do sistema.
User stories
Milestones
Testes de aceitação
Linguagem de script
Glossário
Modelo conceitual
As User Stories (plural de User Story) levantadas inicialmente para o sistema estão mostradas abaixo. User Stories são uma forma de expressar requisitos funcionais desejados para o sistema (o que o sistema deve fazer). Observe que, no mundo real, o cliente poderá mudar de idéia com respeito a esses requisitos funcionais ao longo do tempo. É até possível que o professor (danado que é) altere os requisitos no meio do semestre. As User Stories foram priorizadas pelo cliente conforme podem ver na descrição dos milestones.
User Story |
Título |
Breve Descrição |
1 |
Criação de conta |
Permita a um usuário criar uma conta no Jackut . Deve ser fornecido um login, uma senha e um nome com o qual o usuário será conhecido na rede. |
2 |
Criação/Edição de perfil |
Permita a um usuário cadastrado do Jackut criar/editar atributos de seu perfil. Ele deve poder modificar qualquer atributo do perfil ou preencher um atributo inexistente. |
3 |
Adição de amigos |
Permita a um usuário cadastrado do Jackut adicionar outro usuário como amigo, o que faz o sistema enviar-lhe um convite. O relacionamento só é efetivado quando o outro usuário o adicionar de volta. |
4 |
Envio
de recados |
Permita a um usuário cadastrado do Jackut enviar um recado a qualquer outro usuário cadastrado. |
5 |
Criação de comunidades |
Permita a um usuário cadastrado do Jackut criar uma comunidade. Deve ser fornecido um nome e uma descrição. O usuário passa a ser o dono da comunidade e é o responsável por gerenciar os membros. |
6 |
Adição de comunidades |
Permita a um usuário cadastrado do Jackut se adicionar a uma comunidade. |
7 |
Envio de mensagens a comunidades |
Permita a um usuário cadastrado do Jackut enviar uma mensagem a uma comunidade. Todos os usuários da comunidade a recebem. |
8 |
Criação de novos relacionamentos |
Permita a um usuário cadastrado do Jackut estabelecer outros tipos de relacionamentos dentro da rede, além de amizade; novos tipos incluem relação de fã-ídolo, paqueras e inimizades. Cada uma tem regras específicas, explicitadas nos testes de aceitação. |
9 |
Remoção de conta |
Permita a um usuário encerrar sua conta no Jackut. Todas as suas informações devem sumir do sistema: relacionamentos, mensagens enviadas, perfil. |
Aqui você pode baixar os testes de aceitação que você deve rodar para saber se o seu sistema está atendendo direitinho os requisitos. Você usará o EasyAccept para rodar os testes. Veja aqui. Para poder rodar os testes, vocês precisarão criar uma Façade que acessa a business logic do seu sistema segundo uma linguagem de script que foi criada para os testes de aceitação.
Detalhe: num sistema de informação real, a persistência de dados usaria provavelmente um banco de dados. Não faremos isso aqui. A informação persistente pode ser feita em arquivo com XML (vejam java.beans.XMLEncoder e java.beans.XMLDecoder).
Para acessar a business logic de seu programa e poder realizar os testes de aceitação, você precisará implementar uma linguagem de script que consiste nos comandos abaixo. Esses são os comandos usados nos testes de aceitação (us1.txt, us2.txt, etc.). Cada um deles deve corresponder a um método na sua façade.
Teremos 3 milestones. Vejam abaixo.
Vocês vão observar que não pedi interface gráfica (Swing ou Web). Tem dois motivos:
Implemente as user stories
Recomendações para a entrega:
Coisas que devem ser entregues:
Lembre dos seguintes pontos ao entregar o resultado:
Agora, vamos brincar! Você vai receber o projeto de outro grupo e deverá implementar o resto das user stories. Mude o mínimo necessário no programa que você recebeu para implementar a User Story. Você deve avaliar os pontos abaixo (incluir sua avaliação no relatório). Organize seu relatório exatamente usando as seções abaixo. Seja específico e forneça detalhes em cada seção.
Agora vamos mexer no código do EasyAccept (baixe o código fonte do EasyAccept aqui.).
Vocês terão que implementar os comandos abaixo.
Aqui estão os testes para as três primeiras user stories do milestone 3. Para cada user story, vocês vão encontrar dois arquivos, um .txt e um .java. O arquivo .java contém os testes de unidade (JUnit) da user story, e o arquivo .txt contém scripts de teste que são usados pelos testes de unidade. À primeira olhada, pode ser que vocês não entendam certos objetos e métodos usados dentro dos testes de unidade, porque esse entendimento depende de vocês analisarem o código do EasyAccept e a maneira como os testes que já existem foram feitos. (esse é um dos objetivos adicionais da disciplina, fazer com que vocês aprendam a entender e modificar código escrito por outras pessoas)
Um outro objetivo desse milestone é fazer com que vocês aprendam a escrever testes. Para a user story 4, vocês terão que criar os testes, além de escrever o código que os faz passar. Vocês devem se espelhar na forma como os testes para as outras user stories foram feitas.
Vamos atribuir
50% para a qualidade dos testes e 50% para a correta execução dos testes. Para a User
Story M3.4, você pode testar usando o próprio EasyAccept ou usando JUNIT. Já que não
forneceremos testes para M3.4, tire suas dúvidas com Osório via email. Você deve
descrever os testes que você vai realizar de alguma forma (em português, scripts, etc.)
e enviar a descrição até uma data (ver aqui). Mais
adiante, você deve entregar o código do easyaccept com os testes funcionando. Seus
testes devem rodar através do build.xml do easyaccept.
User Story |
Título |
Breve Descrição |
M3.1 |
Comando restart |
Implemente um novo comando no EasyAccept chamado restart. Esse comando serve para reiniciar o EasyAccept. A execução continua na linha seguinte com uma nova instanciação da Façade. Queremos esse comando para evitar no futuro termos que usar mais de um script para testar persistência. |
M3.2 |
Comando differentFiles |
Implemente no EasyAccept o comando differentFiles. A sintaxe é: differentFiles
<arquivo1> <arquivo2> O comando deve resultar em erro se os arquivos forem iguais. |
M3.3 |
Comando expectAnyError |
Implemente o comando expectAnyError, que espera um erro qualquer lançado pelo programa, independente da mensagem. O teste passa se qualquer erro for lançado pelo comando. A sintaxe é: expectAnyError
<comando> |
M3.4 |
Processamento de tabelas simples |
Implemente
no EasyAccept o comando processThisLoop,
para execução de tabelas simples. processThisLoop A tabela substitui um script que ficaria bem maior, com 30 linhas (6 linhas da tabela x 5 comandos na descrição da tabela). |
Lembrem que o modelo de design (que será implementado em software) não precisa seguir o modelo conceitual entidade-por-entidade.