# História de Usuário ## 1. Introdução <p style="text-indent: 20px; text-align: justify"> As histórias de usuário são um importante recurso no desenvolvimento Ágil de software, elas são altamente centradas no usuário, isto é, elas são escritas de modo que o sujeito da ação seja o usuário querendo uma solução de um problema que o software está se propondo a resolver. Assim, é possível gerar um produto com um alta confiabilidade para o usuário final, pois ele sempre foi o pivô no desenvolvimento. Nesse documento além das histórias de usuário, são mostrados os critérios de aceitação e uma priorização utilizando o método MoSCoW. Critérios de aceitação são os itens que precisam ser atendidos para que a história do usuário seja aceita por um usuário ou cliente. Nos critérios existem as informações necessárias para a construção e o funcionamento do sistema. O MoSCoW consiste em classificar as histórias de usuário em quatro níveis de prioridade. Must (Tenho que fazer) , Should (Devo fazer), Could (Poderia fazer ), Wouldn’t (Não será feito por enquanto). </p> ## 2. História de Usuário <table> <thead> <tr style="background-color: #54CCFF"> <th style="border-style:solid;border-width:1px;text-align:center">Épico</th> <th style="border-style:solid;border-width:1px;text-align:center">Feature</th> <th style="border-style:solid;border-width:1px;text-align:center">ID</th> <th style="border-style:solid;border-width:1px;text-align:center">História de Usuário</th> <th style="border-style:solid;border-width:1px;text-align:center">Critérios de aceitação</th> <th style="border-style:solid;border-width:1px;text-align:center">Task</th> <th style="border-style:solid;border-width:1px;text-align:center">Prioridade</th> </tr> </thead> <tbody> <tr> <span id="ustory-13"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="8"> Manipulação da imagem</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="3"> Extração da imagem</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US13</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu gostaria de um aviso (sonoro e/ou visual e/ou físico) para que eu tenha certeza que a foto foi tirada e salva corretamente </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>Eu gostaria que esses avisos não atrapalhassem a coleta de fotos. Exemplo aviso que sobrepõem o botão para tirar fotos </li> <li> Eu gostaria que os aviso não me incomodassem, afinal vou ser notificados milhares de vezes em um dia de coleta </li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li> Implementar <a href = “https://developer.android.com/guide/topics/media/mediaplayer”> MediaPlayer </a> para reprodução do som </li> </ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Should</td> </tr> <tr> <span id="ustory-04"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US04</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria de tirar fotos para que as fotos sejam salvas em um local apropriado</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol><li>Eu gostaria de tirar várias fotos em sequência sem ser interrompido</li> <li>Eu gostaria de tirar a(s) foto(s) apenas se o supermercado e a etiqueta estiverem selecionados </li></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li>Implementar o <a href= “https://developer.android.com/training/camerax”>CameraX </a> com o <a href = “https://developer.android.com/training/camerax/preview”>preview</a> e <a href = “https://developer.android.com/training/camerax/take-photo”>captura de imagem</a> </li></ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Must</td> </tr> <tr> <span id="ustory-03"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US03</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria de selecionar fotos da galeria para que elas sejam salvas em um local apropriado </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol><li>Eu gostaria de selecionar e mandar uma quantidade arbitrária de fotos </li> <li>Eu gostaria selecionar a(s) foto(s) apenas se o supermercado e a etiqueta estiverem selecionados</li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Could</td> </tr> <tr> <span id="ustory-11"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="3"> Classificação da imagem</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US11</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">eu como usuário gostaria de visualizar exemplos de cada etiqueta para que eu não cometa erros na hora da classificação manual </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>Eu gostaria que os exemplos focem separados por mercado</li> <li>Eu gostaria que os exemplos do mesmo mercado focem mostrados juntos para que eu possa compara-los </li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li> Implementar a visualização dos exemplos das etiquetas com o <a href = "https://developer.android.com/guide/navigation/navigation-swipe-view#java">ViewPager</a> </li> <li>Organizar as pastas com os exemplos das etiquetas</li> </ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Should</td> </tr> <tr> <span id="ustory-01"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US01</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">Eu como usuário gostaria de escolher um supermercado para que as fotos tiradas ou selecionadas da galeria sejam vinculadas e esse supermercado. </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1"><ol><li> Eu gostaria que a lista dos supermercados seja mostrada em ordem alifática </li> <li> Eu gostaria que cada item dessa lista tivesse o logo do supermecado </li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li> Criar uma List&lt;Supplier&gt; para definir a lista de supermercados mostrados na lista. </li><li>Implementar o <a href = "https://developer.android.com/develop/ui/views/layout/recyclerview">RecyclerView</a> </li></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Must</td> </tr> <tr> <span id="ustory-02"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US02</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria de escolher uma etiqueta para que as fotos tiradas <del>ou selecionadas </del>da galeria sejam vinculadas a essa etiqueta </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol><li> <del>Eu gostaria que a lista das etiquetas seja mostrada em ordem alfabética</del> </li> <li>Eu gostaria de selecionar uma etiqueta apenas se o supermercado estiver selecionado </li></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li>Chamar o cameraFragment com o <a href = "https://developer.android.com/reference/android/os/Bundle">Bundle</a> contendo as informações do Supplier utilizado </li> <li>Criar os recursos <a href = "https://developer.android.com/guide/topics/resources/drawable-resource#NinePatch"> Drawable</a> do botão </li> <li>Programar o botão para iterar sobre o número das etiquetas </li></ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Must</td> </tr> <tr> <span id="ustory-12"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="2">Envio da imagem</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US12</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria que as fotos tiradas sejam enviadas para o servidor para que elas sejam processadas </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li> <del>As fotos devem ser envidas em batchs para o backEnd</del> </li> <li> As fotos devem ser envidas em um IntentService </li> <li>O ItentService deve manter atualizar o estado das imagens no bando de dados Room </li> <li>Enviar as fotos utilizando o <a herf = “https://square.github.io/retrofit/”>retrofit2</a> para enviar as fotos em um multipartFile </li> </ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Should</td> </tr> <tr> <span id="ustory-07"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US07</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria de ativar ou não o envio automático de fotos para que eu possa ter um controle sobre o envio. </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>eu gostatia que por padrão o envio automático estivesse ativado</li></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li>No toolbar da galeria deve existir a opção para desativar o envio automático</ol> </li> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">should</td> </tr> <tr> <span id="ustory-08"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="3">Galeria</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">Visualizar informação</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US08</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> Eu como usuário gostaria de visualizar as fotos que tirei em uma galeria para que eu possa ver informações sobre a foto.</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>Eu gostaria de ver o status do envio (envidado, não enviado, enviando), o mercado selecionado, a data do envio e o nome da imagem. </li> <li> Eu gostaria que a galeria se atualizasse automaticamente </li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li>Implementar o <a href = "https://developer.android.com/develop/ui/views/layout/recyclerview">RecyclerView</a> para a implementação da galeria </li> <li>Implementar o bando de dados <a href ="https://developer.android.com/training/data-storage/room">Room</a> para persistir no aplicativa as imagens salvas </li><li>Mostar as fotos salvas no banco de dados <a href ="https://developer.android.com/training/data-storage/room">Room</a> </li> <li>implementar o <a href ="https://developer.android.com/topic/libraries/architecture/livedata#use_livedata_with_room" > LiveData </a>com <a href ="https://developer.android.com/training/data-storage/room">Room</a> para manter a galeria atualizado </li> </ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Must</td> </tr> <tr> <span id="ustory-10"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">Apuração da imagem</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US10</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Eu como usuário gostaria de visualizar as fotos que tirei em uma janela específica para que eu possa atesta a qualidade da imagem e realizar algumas operações nela. </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>Eu gostaria de ícone(s) representando a(s) ação(ões) de <del>reenviar e</del> excluir. </li> <li>eu gostaria de ampliar a foto com o gesto de pinça</li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li> Criar um Fragment e um XML de layout contendo uma ImageView para a visualização da imagem e ImagemButton para os icone(s)</li> <li> Criar a(s) imagem(ns) <a href = "https://developer.android.com/guide/topics/resources/drawable-resource#NinePatch"> Drawable </a> do(s) ícone(s) e adiciona-los em seu(s) respectivo(s) ImageButton </li> <li> Definir o onClik no RecyclerView.Adapter da galeria chamando o Fragment e passar a URI da imagem através de um bunble </li></ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Should</td> </tr> <tr> <span id="ustory-09"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">Edição</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US09</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">eu como usuário gostaria de selecionar algumas fotos da galeria para que eu posso fazer algumas operações em conjunto </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol> <li>Eu gostaria de excluir e/ou reenviar as fotos selecionadas</li> </ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <ol> <li>Criar um novo atributo booleano na classe Picture para controlar a seleção. Esse atributo deve ser ignorado pelo Room, ou seja, cada vez que a galeria e aberta todos os valores estarão como falso</li> <li>Criar um atributo booleano no RecyclerView.Adapter da galeria indicando se o modo de seleção de imagem está ativado. Cada item da galeria possuirá um onLongClik para alternar o modo seleção de imagem. </li> <li>Cada item selecionado deve ter a sua cor de plano de fundo alterado quando selecionado. Isso pode ser implementado no RecyclerView.Adapter da galeria <a herf = “https://stackoverflow.com/questions/36369913/how-to-implement-multi-select-in-recyclerview”> exemplo </a> </li> <li>O modo seleção de imagem deve ser desativo quando nenhuma imagem estiver selecionada. </li> <li>O modo de seleção da imagem deve ter a opção de selecionar todos e enviar as fotos selecionadas </li> </ol> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Should</td> </tr> <tr> <span id="ustory-05"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="2">Usuário</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="2">Cadastro</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1">US05</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Como usuário eu gostaria <del> de me cadastrar para</del> que os meus dados sejam <del>salvos</del> enviados junto com as fotos</td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Could</td> </tr> <tr> <span id="ustory-06"></span> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle" rowspan="1"> <del>US06 </del></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> <del>Como usuário, eu gostaria de recuperar a minha senha para não perder minha conta</del></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"><ol></ol></td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle"> </td> <td style="border-style:solid;border-width:1px;text-align:center;vertical-align:middle">Won’t</td> </tr> </tbody> </table> ## Referências > “Theme vs Epic vs User Story vs Task.” Visual-Paradigm.com, 2018, [visual-paradigm](www.visual-paradigm.com/scrum/theme-epic-user-story-task/). Accessed 26 Sept. 2022. ## Histórico de versões | Versão | Data | Alteração | Responsável | Revisão | | :----: | :------: | :-------------------------------------: | :------------------------: | :--------------------: | | 1.0.0 | 22/09/22 |Criação | Gabriel | Felipe | | 1.0.1 | 26/09/22 |Atualização da US01 e US04 | Gabriel | | | 1.0.2 | 27/10/22 |Adicionando US07, US08, US09, US010<br>Atualizando US04 | Gabriel | | | 1.0.3 | 27/01/22 |Adicionando tasks para US07, US08, US09, US10, US01 US04, US02 <br> Atualizando prioridade US03 | Gabriel | | | 1.0.4 | 03/11/22 |Adicionando US11 <br> Atualizando US02 US05 US06 | Gabriel | | | 1.0.5 | 04/11/22 |Adicionando US12 US13 <br> Atualizando US04 | Gabriel | | | 1.1.0 | 05/11/22 |Criação de epicos e features | Gabriel | |