Aula 1 - Configuração do Projeto
Objetivos
- Introdução à ferramenta git
- Introdução à ferramenta maven
- Instalar MySql
- Executar aplicações
- Introdução ao JMeter
- Executar testes de integração e carga
- Introdução ao eclipse
Tarefas
Primeira: Inicializar o projeto no GitHub importando de https://github.com/tecnico-softeng/reference.git
- 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.
- 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.
- Na tab code da página do repositório escolher a opção import code
- Introduzir https://github.com/tecnico-softeng/reference.git e selecionar Begin import
Segunda: Criar um
workspace por
clone do repositório remoto
- 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
- 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
- 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- Abrir o ficheiro README.md do projeto
- Acrescentar uma linha contendo o número, nome, email e identificação do github
- 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
- 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
- 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
- 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
- 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
- É necessário voltar a adicionar o ficheiro alterado à staging area fazendo git add README.md
- Efetuar um novo commit, git commit -m "conflict resolution", agora com o ficheiro integrado
- E, finalmente, colocar as alterações no repositório remoto, git push origin master
- 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.
- 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:
- Criar as seguintes bases de dados no MySql, advactivity, advbank, advbroker, advcar, advhotel, advtax.
- 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
- 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.
- 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.
- 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.
- 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
- mvn clean, apaga os diretórios target
- mvn compile, compila as classes fonte para target/classes
- mvn test, executa os testes de unidade que já se encontram implementados
- 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.
- 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.
- 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.
- 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.
- 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
- Lançar o eclipse
- Selecionar File seguido de Import
- Selecionar Maven seguido de Existing Maven Projects
- Escolher o diretório onde está o ficheiro pom.xml de topo
- Irão ser abertos 7 projetos eclipse
- Existem 6 módulos, que se encontram nos diretórios, broker, bank, activity, hotel, car e tax.
- 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.pdfEclipse
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.