---
# System prepended metadata

title: TP3 Génie Logiciel

---

# TP3 Génie Logiciel

~~~~
Alif Aizat MOHD NOOR
Licence 2 Informatique
Université de La Rochelle
08/10/2019
~~~~

## Exercice 1 : Respect des conventions de codage - google java style

MainGoldBach.java
```java=

package goldbach;
/**
 * La classe Goldbach pour le TP3 Génie Logiciel.
 *
 * @author alifaizat
 */
class Goldbach {

    /**
     * Un tableau boolean pour une liste des entiers.
     */
    private boolean[] isprime;
    /**
     * Un entier prime.
     */
    private int primes;
    /**
     * Une liste des entiers.
     */
    private int[] list;

    /**
     * Retourner le nb de nombre dans le tableau des entiers correspondant.
     *
     * @param n le nombre de parcours souhaité
     * @return le nombre de nombre prime dans le tableau
     */
    public int getPrimes(final int n) {
        // count primes
        this.primes = 0;
        for (int i = 2; i < n; i++) {
            if (isprime[i]) {
                primes++;
            }
        }
        return primes;
    }

    /**
     * Retourner un string de résultat.
     *
     * @param n le nombre de parcours
     * @return un string de résultat
     */
    public String getComponents(final int n) {
        isprime = new boolean[n];
        for (int i = 2; i < n; i++) {
            isprime[i] = true;
        }

        // determine primes < N using Sieve of Eratosthenes
        for (int i = 2; i * i < n; i++) {
            if (isprime[i]) {
                for (int j = i; i * j < n; j++) {
                    isprime[i * j] = false;
                }
            }
        }
        primes = getPrimes(n);
        list = new int[primes];

        System.out.println("Done tabulating primes.");
        // store primes in list
        int x = 0;
        for (int i = 0; i < n; i++) {
            if (isprime[i]) {
                list[x++] = i;
            }
        }

        // check if N can be expressed as sum of two primes
        int left = 0, right = primes - 1;
        while (left <= right) {
            if (list[left] + list[right] == n) {
                break;
            } else if (list[left] + list[right] < n) {
                left++;
            } else {
                right--;
            }
        }
        if (list[left] + list[right] == n) {
            return (list[left] + " + " + list[right]);
        } else {
            return (n + " not expressible as sum of two primes");
        }
    }

}

/**
 * La classe main pour le projet Goldbach.
 *
 * @author alifaizat
 */
public class MainGoldBach {

    /**
     * Prevenir l'instantiation.
     */
    private MainGoldBach() {
    }
    /**
     * Main method.
     *
     * @param args les arguments
     */
    public static void main(final String[] args) {
        final int param = 42;
        Goldbach g = new Goldbach();
        System.out.println(g.getComponents(param));
    }
}


```
<br><br>

## Exercice 2:  Metrics pour Eclipse

1. Il y a 28 métriques disponibles


| A        | AC       | C        | D        |
| -------- | -------- | -------- | -------- | 
| **EC**   | **I**    | **NCP**  | **NIP**  |
| **LCC**  | **LCOM1**| **LCOM2**| **LCOM3**|
| **LCOM4**| **LCOM5**| **NAK**  | **NOC**  |
| **NOF**  | **NOM**  | **NOSF** | **NOSM** |
| **NTM**  | **TCC**  | **WMC**  | **NBD**  |
| **NOP**  | **VG**   | **LOC**  | **LOCm** |
<br>

2. La métrique qui donne la complexité cyclomatique des méthodes est VG

<br>

3. Les métriques AC/EC n'ont pas de sens dans ce package car il n'y a que deux classes qui n'héritent pas de l'un à l'autre
<br>

4. Le  Lack  Of  Cohesion  Method

![](https://i.imgur.com/6OSpldp.png)

![](https://i.imgur.com/VupmFHb.png)

<br>

```jsx=
M = 2
N = 3

LCOM = 1 - (M + F)/M*F
LCOM = 1 - (3 + 2)/(3*2)
LCOM = 0.16666666666
LCOM ~ 0.17
```
<br>


## Exercice 3:  Refactoring

```java=
package goldbach;
/**
 * La classe Goldbach pour le TP3 Génie Logiciel.
 *
 * @author alifaizat
 */
class Goldbach {

    /**
     * Un tableau boolean pour une liste des entiers.
     */
    private boolean[] isprime;
    /**
     * Un entier prime.
     */
    private int primes;
    /**
     * Une liste des entiers.
     */
    private int[] list;

    /**
     * Retourner le nb de nombre dans le tableau des entiers correspondant.
     *
     * @param n le nombre de parcours souhaité
     * @return le nombre de nombre prime dans le tableau
     */
    public int getPrimes(final int n) {
        // count primes
        this.primes = 0;
        for (int i = 2; i < n; i++) {
            if (isprime[i]) {
                primes++;
            }
        }
        return primes;
    }

    /**
     * Retourner un string de résultat.
     *
     * @param n le nombre de parcours
     * @return un string de résultat
     */
    public String getComponents(final int n) {
        isprime = new boolean[n];
        for (int i = 2; i < n; i++) {
            isprime[i] = true;
        }

        // determine primes < N using Sieve of Eratosthenes
        for (int i = 2; i * i < n; i++) {
            if (isprime[i]) {
                for (int j = i; i * j < n; j++) {
                    isprime[i * j] = false;
                }
            }
        }
        primes = getPrimes(n);
        list = new int[primes];

        return extractFonction(n);
    }   
    
    /**
     * Stockages des valeurs.
     * @param n param
     * @return string
     */
    public String extractFonction(final int n) {
        System.out.println("Done tabulating primes.");
        // store primes in list
        int x = 0;
        for (int i = 0; i < n; i++) {
            if (isprime[i]) {
                list[x++] = i;
            }
        }

        // check if N can be expressed as sum of two primes
        int left = 0, right = primes - 1;
        while (left <= right) {
            if (list[left] + list[right] == n) {
                break;
            } else if (list[left] + list[right] < n) {
                left++;
            } else {
                right--;
            }
        }
        if (list[left] + list[right] == n) {
            return (list[left] + " + " + list[right]);
        } else {
            return (n + " not expressible as sum of two primes");
        }
    }

}

/**
 * La classe main pour le projet Goldbach.
 *
 * @author alifaizat
 */
public class MainGoldBach {

    /**
     * Prevenir l'instantiation.
     */
    private MainGoldBach() {
    }
    /**
     * Main method.
     *
     * @param args les arguments
     */
    public static void main(final String[] args) {
        final int param = 42;
        Goldbach g = new Goldbach();
        System.out.println(g.getComponents(param));
    }
}

```

<br>

 <a href="https://hackmd.io/@AlifAizat/SJoBq1c_B">link</a>