Aula 1 - Configuração do Projeto

Objetivos

  1. Introdução à ferramenta git
  2. Introdução à ferramenta maven
  3. Instalar MySql
  4. Executar aplicações
  5. Introdução ao JMeter
  6. Executar testes de integração e carga
  7. Introdução ao eclipse

Tarefas

Primeira: Inicializar o projeto no GitHub importando de https://github.com/tecnico-softeng/reference.git
  1. O docente cria um repositório para um grupo de 6 alunos. O repositório tem o endereço https://github.com/tecnico-softeng/es18CC_GG-project.git, em que CC é a sigla do Campus e GG o número do grupo. Os alunos devem registar-se em github.com antes da aula por forma a providenciarem ao docente o seu identificador de github.
  2. Uma vez criado o repositório do grupo no GitHub é necessário inicializá-lo com o código do projeto. Para isso pode-se usar uma funcionalidade disponibilizada pelo GitHub que permite importar a partir de um outro repositório. 
  3. Na tab code da página do repositório escolher a opção import code
  4. Introduzir https://github.com/tecnico-softeng/reference.git e selecionar Begin import
Segunda: Criar um workspace por clone do repositório remoto
  1. Inicialmente é necessário definir a configuração do git na sua máquina para garantir que todas as contribuições que vier a fazer ao projeto lhe sejam creditadas e receba a nota final que deveras lhe corresponde, para isso deve executar git config --global user.name "José dos Anzóis" seguido de git config --global user.email JoseAnzois@tecnico.ulisboa.pt. Este email deve coincidir com o que tem registado no GItHub, Para mais informação pode consultar https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup
  2. Deve de seguida criar uma cópia local do repositório remoto com o comando git clone https://github.com/tecnico-softeng/es18CC_GG-project.git onde CC é "al" ou "tg" e GG o número do grupo
  3. Fazendo git status pode ver que o repositório local está no branch master
Terceira: Cada aluno acrescenta o seu número, nome, email, e identificação github ao ficheiro README.md, faz commit e push. Resolver problemas de conflitos. Para uma breve introdução ao Git leia este documento
  1. Abrir o ficheiro README.md do projeto 
  2. Acrescentar uma linha contendo o número, nome, email e identificação do github
  3. Na linha de comando do git fazer git add README.md, para adicionar o ficheiro ao conjunto de ficheiros a ser incluído no próximo commit, é incluído na staging area
  4. Na linha de comando do git fazer git commit -m "group member info added to README.md", para fazer commit local das alterações existentes na área de staging area
  5. Antes de enviar as alterações para o repositório remoto é conveniente garantir que se tem a versão mais atual, pois um colega pode já ter efetuado alterações e feito push para o repositório remoto, para isso deve-se fazer git fetch origin
  6. Se o repositório remoto possui alterações que ainda não existem localmente é necessário integrá-las localmente, para isso deve ser feito um merge entre a informação local e a remota executando git merge origin master
  7. No caso de haver conflitos, o que ocorrerá no ficheiro README.md se algum dos colegas já tiver atualizado o repositório remoto, é necessário resolver os conflitos, para isso deve abrir o ficheiro no Eclipse, o icon do ficheiro tem a indicação que possui um conflito, e altera-se o ficheiro para integrar as alterações. Os locais de conflito são indicados por <<<<<<<< HEAD, ========, e >>>>>>>> refs/remotes/origin/master
  8. É necessário voltar a adicionar o ficheiro alterado à staging area fazendo git add README.md
  9. Efetuar um novo commitgit commit -m "conflict resolution", agora com o ficheiro integrado
  10. E, finalmente, colocar as alterações no repositório remoto, git push origin master
  11. Durante este processo pode-se ir vendo o estado atual com git status
Quarta: Instalar o servidor MySQL na sua máquina, diretamente ou usando o Docker.
  1. Deve agora aceder ao seu código e proceder à configuração do acesso à base de dados. Deve fazer 6 alterações semelhantes, uma para cada aplicação:
    1. Criar as seguintes bases de dados no MySql, advactivity, advbank, advbroker, advcar, advhotel, advtax.
    2. Para cada aplicação, aceder ao diretório <app>/src/main/resources/, duplicar o ficheiro fenix-framework.properties.example, alterando o seu nome para fenix-framework.properties, e introduzir o dbUsername e dbPassword da base de dados MySql.
Quinta: Analisar ficheiros pom.xml e executar instruções
  1. O Maven é uma ferramenta para a gestão de um projeto de desenvolvimento de software que automatiza o ciclo de vida do desenvolvimento, desde a compilação do código até à sua colocação em execução. Para uma breve introdução leia este documento.
  2. O ficheiro pom.xml do diretório de topo contém o parent pom.xml que todos os módulos herdam de acordo com uma estrutura de Multiple Module Projects. Assim pode ver no fim do ficheiro a declaração dos 6 módulos iniciais acerca dos quais é fornecido código. Acima encontra a declaração das dependências que são partilhadas pelos 6 módulos. Cada dependência declara um conjunto de bibliotecas que necessitam de estar disponíveis e que o maven automaticamente descarrega para ~/.m2/repository/, neste caso temos uma biblioteca de testes, JUnit, duas de logging, e uma de classes sobre tempo. Finalmente temos a declaração de um plugin, um plugin de compilação, que declara a utilização da versão 1.8 do Java e um plugin de avaliação da cobertura de testes, jacoco. Note que este plugin está declarado dentro de <pluginManagement></pluginManagement> o que indica que todos os sub-módulos devem explicitamente indicar a utilização dos plugins, eles não são herdados automaticamente.
  3. Abra agora os ficheiros pom.xml das aplicações. Repare que eles são idênticos, todos declaram a utilização no plugin de compilação disponibilizado no módulo parent. A declaração <packaging>jar</packaging> indica que a execução da fase package do módulo irá gerar um ficheiro jar.
  4. Para experimentar os comando maven no projeto, execute no diretório parent para ver que a execução ocorre em cada um dos sub-módulos
  5. mvn clean, apaga os diretórios target
  6. mvn compile, compila as classes fonte para target/classes
  7. mvn test, executa os testes de unidade que já se encontram implementados
  8. Para analisar a cobertura dos testes deve executar mvn clean verify e, de seguida, aceder com o browser a MODULE/target/site/jacoco/index.html, em que MODULE denota o módulo que deseja visualizar, por exemplo bank ou activity.
Sexta: Aceder às interfaces utilizador, instalar a ferramenta JMeter e correr testes de integração e de carga.
  1. Para lançar uma aplicação deve executar a instrução mvn clean spring-boot:run no diretório da aplicação, quando a inicialização do servidor termina encontra o porto onde se encontra. Por exemplo, Tomcat started on port(s): 8085 (http). Neste caso deve aceder no browser a localhost:8085, e pode então interagir com a aplicação através da interface utilizador.
  2. Para iniciar um teste de integração ou de carga deve lançar os 6 servidores. Se não pretende lançar um a u, em bin/startservers encontra um ficheiro com as instruções para lançar os 6 servidores. 
  3. De seguida, lance o JMeter no diretório topo do projeto, abra o ficheiro jmeter/tests/integration/success-sequence/test.jmx e execute. Observe os logs dos servidores e os resultados em View Results Tree, Aggregate Report, Aggregate Graph, e Summary Report.
  4. De igual modo corra um teste de carga e analise os resultado, por exemplo jmeter/tests/load/30Writes/30Writes.jmx
Sétima: Analisar a estrutura de código do projeto usando o eclipse
  1. Lançar o eclipse
  2. Selecionar File seguido de Import
  3. Selecionar Maven seguido de Existing Maven Projects
  4. Escolher o diretório onde está o ficheiro pom.xml de topo
  5. Irão ser abertos 7 projetos eclipse
  6. Existem 6 módulos, que se encontram nos diretórios, brokerbankactivity, hotel, car e tax.
  7. Cada um destas módulos possui um package domain onde se encontra o código inicial do projeto. Explore esse código com base na descrição existente no enunciado geral do projeto. Colocando o rato sobre uma classe e pressionando ctrl pode facilmente navegar entre classes.

Maven

Maven é uma ferramenta que ajuda a fazer a gestão do desenvolvimento de um projecto de software. O seguinte documento Introduction to Maven introduz os conceitos e comandos mais úteis associados a esta ferramenta. Existem diversos guias das funcionalidades desta ferramenta: guia completo, em 5 minutos.

Git

Git é uma ferramenta de gestão de configurações de software e o GitHub é o repositório de projetos Git atualmente mais usado. O seguinte documento GuiaGit introduz os conceitos e comandos mais úteis associados a esta ferramenta. Ferramentas para testar comandos git http://git-school.github.io/visualizing-git/ e https://try.github.io/levels/1/challenges/5. Uma folha de ajuda com os comandos mais comuns https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

Eclipse

Eclipse é um ambiente de desenvolvimento de aplicações que possui uma arquitetura baseada em plugins que lhe confere uma grande extensibilidade, em termos das linguagens suportadas e das ferramentas de suporte ao desenvolvimento de software, como sejam as ferramentas de teste e de verificação de código.