spgroup/rgms — pull request #224 by embs (2013-08-28 02:00:55+00:00)
Title: Equipe 1 - Atividade 6

# Remoção de clones da feature Member
Para verificar os clones, utilizei a ferramenta do intelij com estas configurações:
![image](https://f.cloud.github.com/assets/3333896/1035750/626a7cc0-0f2f-11e3-913f-9d18f305b710.png)

Encontrei o seguinte clone referente a minha feature:
![image](https://f.cloud.github.com/assets/3333896/1036633/bc4f5f10-0f40-11e3-8847-21ac81a66f42.png)

O qual resolvi com uma extração de método.

Em relação a inspeção de código também foi utilizada a ferramenta do intelij com estas configurações:
![image](https://f.cloud.github.com/assets/3333896/1035766/8f80eb9a-0f2f-11e3-83b8-003ad0707bfd.png)
Onde customscopemember, refere-se a todos arquivos referentes a Member.feature.

Onde foram encontrados vários problemas, dentre os quais decidi resolver estes:
![image](https://f.cloud.github.com/assets/3333896/1036641/efe46faa-0f40-11e3-8105-dee03d77701e.png)
![image](https://f.cloud.github.com/assets/3333896/1036642/f2d4b4d6-0f40-11e3-9abb-404b9665d270.png)
![image](https://f.cloud.github.com/assets/3333896/1036643/f5d35296-0f40-11e3-9000-5c8360997950.png)

# Remoção de clones da feature Thesis
![relatrio-page-001](https://f.cloud.github.com/assets/3335292/1038565/4aaee4a8-0f67-11e3-88e2-32ad8c2574df.jpg)
![relatrio-page-002](https://f.cloud.github.com/assets/3335292/1038546/174acf8c-0f67-11e3-9df3-23a292f8fccd.jpg)
![relatrio-page-003](https://f.cloud.github.com/assets/3335292/1038548/1781418e-0f67-11e3-969c-b23af6aa0183.jpg)
![relatrio-page-004](https://f.cloud.github.com/assets/3335292/1038549/17843826-0f67-11e3-9311-bf1f6d34c4be.jpg)
![relatrio-page-005](https://f.cloud.github.com/assets/3335292/1038551/17af9e1c-0f67-11e3-9177-f120a28cb13c.jpg)
![relatrio-page-006](https://f.cloud.github.com/assets/3335292/1038552/17b26d22-0f67-11e3-9396-cc503f3531a1.jpg)
![relatrio-page-007](https://f.cloud.github.com/assets/3335292/1038550/17981436-0f67-11e3-8aff-ca0027e3eeab.jpg)
![relatrio-page-008](https://f.cloud.github.com/assets/3335292/1038553/17b7f6ca-0f67-11e3-9245-b5555441da25.jpg)
![relatrio-page-009](https://f.cloud.github.com/assets/3335292/1038554/17cd89f4-0f67-11e3-89df-16a9309ac4fb.jpg)
![relatrio-page-010](https://f.cloud.github.com/assets/3335292/1038555/17cfd0f6-0f67-11e3-8d32-f4429eda88ec.jpg)
![relatrio-page-011](https://f.cloud.github.com/assets/3335292/1038556/17ea7be0-0f67-11e3-960d-e55b06897888.jpg)

# Remoção de clones da feature Record
Os clones foram identificados com a ferramenta de identificação de clones do IntelliJ.

## RecordSteps.groovy
![dup1](https://f.cloud.github.com/assets/1200033/1020732/a018e470-0cbf-11e3-8f33-ba39d89a7f9d.png)
* Clone: código para autenticação de usuário estava replicado em 3 partes diferentes do arquivo [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L100)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L119).
* Solução: extração do código de autenticação para um [novo step](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2R61), que é utilizado como passo adicional nos testes de Record.feature que demandam autenticação [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R30)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R37)[[3]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R43)[[4]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R52).

![dup1 1](https://f.cloud.github.com/assets/1200033/1020735/7ee5545e-0cc0-11e3-868c-dcb01982e61c.png)
* Clone: código para verificação de que apenas um único record com determinado status existe estava replicado em duas partes distintas do arquivo [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L69).
* Solução: utilizar o step para verificação de unicidade de record com determinado status -- step esse que já existia [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R32)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R45).

![dup1 3](https://f.cloud.github.com/assets/1200033/1020763/f673a4a6-0cc2-11e3-96ef-72cb7871948a.png)
* Clone: steps com títulos diferentes que faziam a mesma coisa [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L78)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L133).
* Solução: [unificação](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2R72) dos steps e utilização do step único em Record.feature [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L1R34).

![dup1 5](https://f.cloud.github.com/assets/1200033/1020783/d5d6f278-0cc4-11e3-8915-6c403caae7a4.png)
* Clone: testes quase idênticos para checar se record está ou não associado a algum usuário [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L14)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L2L19).
* Solução: refatoração do método [recordIsAssociated](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L3R171), que agora recebe um segundo parâmetro booleano indicando se o esperado é que o record possua ou não associação a algum usuário. Além disso, o método passa a utilizar o método [recordHasMembers](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L3R173) de RecordController. Essa refatoração é explicada mais adiante e é resultado da solução aplicada a um clone identificado.

## RecordController.groovy
![dup1 4](https://f.cloud.github.com/assets/1200033/1020774/084b2324-0cc4-11e3-9e07-ef34f0bc3639.png)
* Clone: conjunto de argumentos replicados [[1]](https://github.com/spgroup/rgms/commit/af53650dbfe4ed4dc27b435e9399731907617c91#L0R63)[[2]](https://github.com/spgroup/rgms/commit/af53650dbfe4ed4dc27b435e9399731907617c91#L0R71)[[3]](https://github.com/spgroup/rgms/commit/af53650dbfe4ed4dc27b435e9399731907617c91#L0R92)[[4]](https://github.com/spgroup/rgms/commit/af53650dbfe4ed4dc27b435e9399731907617c91#L0R96).
* Solução: nenhuma. Por se tratar de algo bastante pontual e, aparentemente, aceitável no controlador, o clone foi ignorado.

## RecordController.groovy & TestDataAndOperations.groovy
![dup1 2](https://f.cloud.github.com/assets/1200033/1020752/bc3fe836-0cc1-11e3-9950-9ed5abb6b9a6.png)
* Clone: réplica de código para checar se record está associado a algum membro [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L0L112)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L3L174).
* Solução: definição de [novo método](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L0R115) em RecordController, que é utilizado onde antes o código estava replicado [[1]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L0R110)[[2]](https://github.com/embs/rgms/commit/bb8ac0a9816a3fa97e9f5b2c24cde690c52bfeed#L3R173).