Engenharia de Software

Ramo da engenharia cujo foco é o desenvolvimento de sistemas de software dentro de custos adequados de alta qualidade.
Não existe limitação física para o potencial do software
Pode se tornar extremamente complexo



Brainstorming


  • Tempestade cerebral ou tempestade de ideias
  • Minas: Toró de parpite.
  • É uma atividade que serve para testar e explorar a capacidade criativa de indivíduos ou de um determinado grupo. É formada pelos termos ingleses "brain" (cérebro) e "storm" (tempestade).
  • A técnica de brainstorming propõe que um grupo de pessoas se reúnam e utilizem seus pensamentos e ideias para que possam chegar a um denominador comum, a fim de gerar ideias inovadoras que levem um determinado projeto adiante. Nenhuma ideia deve ser descartada ou julgada como errada ou absurda, todas devem estar na compilação ou anotação de todas as ideias ocorridas no processo, para depois evoluir até a solução final.


Idéia


  • Uma ideia é uma concepção mental de uma coisa, tendo em conta a sua relação com a realidade.
  • É transformar o mundo por meio de conhecimento, criatividade e iniciativa.


Problema


  • Um problema pode ser:
    • um requisito funcional não disponível
    • um requisito não-funcional não atendido, envolvendo algumas situações como, por exemplo, usabilidade, segurança, desempenho, robustez, confiabilidade ou hardware.


Demanda


  • Uma demanda, pedido, solicitação pode ser encaminhada por:
    • um projeto que define a necessidade de implementação de um sistema
    • um superior que requer um determinado software
    • uma lei que determina a obrigatoriedade de se construir uma aplicação
    • um cliente que reclama de uma nova solução.


Método


  • Estruturado, OO ou Serviço?
    • Optaremos pela Orientação a Objetos devido ao conteúdo atual da disciplina mas poderia ser usado qualquer um dos métodos.




Escopo


  • Desenvolver um sistema que monte uma biblioteca virtual que permite cadastrar os livros de cada usuário e disponibilizá-los na Internet para empréstimos usando procedimentos de qualificação semelhantes ao Mercado Livre.
  • Dessa forma, cada usuário pode cadastrar seu acervo próprio e deixá-lo visível para todos e quem desejar um livro emprestado poderá solicitá-lo do proprietário que liberará o empréstimo baseado num critério de qualificação.
  • O sistema poderá facilitar o processo de entrega ao solicitante (Retirada pessoal, Correios, Sedex, MotoTáxi, etc) e terá um procedimento para organizar a devolução.
  • Uma visão de estante poderá ser apresentada na tela mostrando a disposição dos livros tal qual uma estante real (similar ao que aparece no Ipad)
  • Ainda poderá ser incluído, um forum de discussão sobre cada livro e uma forma de indicação de livros.


Requisitos


Funcionais



  • 01 - Autenticar no Face
    • Cada usuário no sistema deverá informar seu usuário no Facebook. Automaticamente, este usuario deverá ser autenticado no Facebook.
  • 02 - CRUD Usuário
    • Ao validar o usuário no Face, deverá haver um menu que permite executar as 4 funções básicas: Criar usuário, alterar dados, excluir registro e pesquisar.
  • 03 - Validar Usuários
    • Todo usuário poderá ser validado por meio de um procedimento que permite que a cada empréstimo, que o usuario solicitante possa ganhar pontos positivos de forma similar ao Mercado Livre. Sendo assim, cada vez que o solicitante devolver o livro no prazo e em boas condições, o emprestador terá uma tela com a opção de pontuá-lo positivamente e ainda fazer comentários. De outra forma, se a devolução não for feita da forma acordada, o emprestador poderá pontuar negativamente.
  • 04 - CRUD Livros
    • Um menu com as 4 funções básicas para movimentar um livro deverão ser criadas: Cadastrar livro, alterar dados do livro, excluir livro e pesquisar livros. O código dos livros serão baseados no padrão ISBN.
  • 05 - Qualificar livros
    • A opção acima se refere ao momento em que o leitor de um livro dá sua opinião sobre um determinado livro. Um menu com opções do tipo (Excelente, Ótimo, Médio, Ruim ,Fraco, Difícil leitura, Contagiante) e outros adjetivos podem ser escolhidos. Além disso, um campo Observação deve ser aberto para que o leitor possa discorrer sobre isso.
  • 06 - Indicar Livros
    • Será possível que cada usuário indique o livro lido para outros usuários. Bastará que apareça os livros e que ao clicar sobre ele, apareça um campo que permita escrever o endereço no Face de outro(s) usuário(s).
  • 07 - CRUD Locais
    • Um menu com as 4 funções básicas para tratar de Locais deverão ser criadas: Cadastrar local, alterar local, excluir local e consultar locais. Estes locais se referem ao local onde o fica a Biblioteca individual de cada usuário. Pode ser um nome escolhido pelo usuário que internamente tenha um Cep que permita referenciar a Cidade, Bairro, Rua, etc.
  • 08 - Solicitar Empréstimos
    • A função acima apresenta uma tela que mostra todos os livros disponiveis e permite que um usuário peça determinado livro emprestado. Além de escolher o livro este deverá definir uma opção de entrega (Correios, Entrega ao portador, MotoTáxi, etc). Após estes passos, o sistema deverá avaliar o perfil do usuário solicitante e aprovar ou não o empréstimo.
  • 09 - Limitar Empréstimo
    • Nesta opção, o usuário proprietário dos livros poderá definir alguns critérios para empréstimo, do tipo (quais livros poderão ser emprestados, para quais cidades destino, quantos livros poderão sair da sua biblioteca, quantas estrelas o solicitante terá que ter para liberar empréstimo, etc)
  • 10 - Listar Histórico de cada usuário
    • Esta opção deverá mostrar o histórico de cada usuário solicitante (Data de solicitação do empréstimo, livro solicitado, data devolução, estado devolução, etc)
  • 11 - Definir entrega
    • Neste ponto, o solicitante poderá definir o tipo de entrega do passo 08
  • 12 - Gerar relatórios de livros existentes
    • Mostrar uma tela que permita ao usuário listar todos os livros com as seguintes facilidades de seleção: por Local, por Genero, por Autor e por Status (Disponível). Dados a serem apresentados: Titulo, Autor e Editora
  • 13 - Gerar Código de Barras
    • Criar um código de identificação que permita gerar a etiquetas com código de barras para os livros de cada biblioteca com a seguinte opção: intervalo de titulo, intervalo de número, local específico, genero específico, apenas os disponíveis
  • 14 - Mostrar Estante
    • Deverá ser desenhado na tela uma projeção de estante com as partiçoes verticais dispondo os livros nas seguintes ordens possíveis: por autor, por título, por data de aquisição ou por genero. Será mostrado a parte do livro como se ele estivesse de pé com a quina da capa voltada para fora e os seguintes dados devem ser visualizados para cada um: Autor, Título, Editora e Genero.
  • 15 - Gerar relação de bibliotecas individuais disponíveis
    • O sistema deve permitir a visualização de todas as bibliotecas existentes mostrando o nome da biblioteca (local), proprietário, cidade e quantidade de livros disponíveis.
  • 16 - Gerar relação de usuários no sistema
    • Opção que permita mostrar os usuários com suas qualificaçoes e a quantidade de empréstimos feitos por cada um
  • 17 - Gerar relação de usuários em débito
    • Idem a opção anterior mas apenas os usuários em débito e mostrando o histórico
  • 18 - Mostrar movimento de empréstimos por Usuário
    • Opção de escolher o usuário e o intervalo de data e mostrar o movimento de empréstimos daquele usuário
  • 19 - Mostrar movimento de empréstimos por Data
    • O sistema deve permitir a escolha do intervalo de data e mostrar todos os empréstimos realizados independente do usuário
  • 20 - Mostrar movimento de empréstimos por Livro
    • O sistema deve permitir a escolha do livro (título) e intervalo de data e mostrar todos os empréstimos realizados independente do usuário
  • 21 - Iniciar fórum de discussão
    • Deve abrir uma janela onde o usuário possa escrever suas opinioes, críticas e elogios sobre determinado livro. Após a edição a tela mostrará cada post em ordem cronológica e na parte superior o nome do livro, o nome do usuário e a data da postagem
  • 22 - Ler manual online
    • O sistema deve mostrar a opção de abrir um arquivo PDF com o manual de orientação sobre como utilizar o sistema.
  • 23 -
  • 24 -
  • 25 -


  • CRUD: Substitui 4 funcionalidades - Create, Read, Update e Delete
  • Também pode ser referenciado como:
    • ABCD: Add, Browse, Change e Delete
    • BREAD: Browse, Read, Edit, Add e Delete
    • VEIA: Visualizar, Excluir, Inserir, Alterar


Não-funcionais


  • O sistema quando finalizado deverá:
  1. ser disponibilizado na Web
  2. estar hospedado na nuvem
  3. ser acessado em dispositivos móveis
  4. ter um tempo de resposta de no máximo 15 seg em 90 % dos casos
  5. Facebook: ???
  6. rodar nos sistemas Windows, Linux, IoS e Android
  7. seguir o padrão ISBN para codificação dos livros
  8. ter versões em Português e Inglês
  9. gerar manuais online para leitura pelos usuários
  10. atender à disponibilidade de 3 noves
  11. ser desenvolvido na linguagem Java
  12. manter o banco de dados com solução Open Source
  13. resguardar totalmente os dados cadastrais de usuários.
  14. se comunicar segundo protocolos TCP/IP e UDP/IP
  15. apresentar, associados aos livros visualizados nas pesquisas, links de Moocs (curso online grátis, de nível superior com certificado e com acompanhamento de professor) que se refiram ao assunto tratado pela obra.
  16. ser capaz de armazenar os dados em um SGBD como o MySQL ou PostgreSQL.
  17. ter capacidade para recuperar os dados perdidos na última operação que realizou em caso de falha
  18. ser compatível, no mínimo, com os seguintes browsers: Internet Explorer, Mozilla Firefox e Chrome.


Objetos


  • Grupo 2:
  1. Livros
  2. Código de Barras
  3. Estante
  4. Reserva


  • Grupo 3:
  1. Usuários
  2. Cep
  3. Facebook


  • Grupo 5:
  1. Empréstimos
  2. Qualificações
  3. Indicações
  4. Entregas


  • Grupo 6:
  1. Devoluções
  2. Locais
  3. Forum
  4. Manual





Classes


Primeiro Esboço



  • Pedro Avelar
    • Desenhar as 3 classes discutidas em sala de aula
    • Incluir tipificação e critérios
    • Publicar print das classes (PDF) na Wiki


Exercício



Normalização


  • Grupos 2, 3, 5 e 6:
    • Normalizar classes baseadas nos objetos acima.
    • Repassar o desenho das classes para Grupo 1
  • Prazo: 27/08


http://www.sourceinnovation.com.br/images/3/34/ESOF_-_Classes.pdf



Diagrama Final


  • Grupo 1:
    • Receber diagramas dos grupos 2, 3, 5 e 6
    • Criar associações
    • Implementar Herança
    • Usar Software sugerido pelo Pedro Avelar
    • Desenhar Diagrama de Classes final
    • Publicar PDF na Wiki
  • Prazo: 03/09




Casos de Uso


Diagrama


  • Grupo 4:
    • Desenhar Diagramas de Casos de Uso
    • Incluir Estereótipos
    • Adicionar Métodos nas Classes
    • Implementar Polimorfismo
    • Publicar PDF na Wiki
  • Prazo: 03/09



Detalhamento


  • Grupo 7:
    • Detalhar cada um dos Diagramas de Casos de Uso
    • Incluir Pré e pós-condição
    • Especificar Requisitos não-funcionais
    • Apontar Sequências alternativas
    • Publicar PDF na Wiki
  • Prazo: 03/09



Diagrama de Estado


  • Status do Livro:


  • Complementar Diagrama acima


  • Criar mais um Diagrama de Estado
    • Prazo: 03/09


Diagrama de Sequência



  • Solicitar empréstimo:


Diagrama de Atividades


Diagrama de Objetos


Diagramas de Colaboração


Diagrama de Componentes


Diagrama de Pacotes