Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 8bb19350

Přidáno uživatelem Ondřej Váně před asi 4 roky(ů)

Specify nothing implemented

Zobrazit rozdíly:

src/main/java/cz/zcu/fav/kiv/antipatterndetectionapp/detecting/detectors/SpecifyNothingDetectorImpl.java
1
package cz.zcu.fav.kiv.antipatterndetectionapp.detecting.detectors;
2

  
3
import cz.zcu.fav.kiv.antipatterndetectionapp.detecting.DatabaseConnection;
4
import cz.zcu.fav.kiv.antipatterndetectionapp.model.AntiPattern;
5
import cz.zcu.fav.kiv.antipatterndetectionapp.model.Project;
6
import cz.zcu.fav.kiv.antipatterndetectionapp.model.QueryResultItem;
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9

  
10
import java.sql.ResultSet;
11
import java.sql.SQLException;
12
import java.util.List;
13

  
14
public class SpecifyNothingDetectorImpl extends AntiPatternDetector {
15

  
16
    private final Logger LOGGER = LoggerFactory.getLogger(SpecifyNothingDetectorImpl.class);
17

  
18
    private final AntiPattern antiPattern = new AntiPattern(4L,
19
            "Specify Nothing",
20
            "SpecifyNothing",
21
            "The specification is not done intentionally. Programmers are " +
22
                    "expected to work better without written specifications.");
23

  
24
    private final String sqlFileName = "specify_nothing.sql";
25

  
26
    /* Settings */
27
    private final int MINIMUM_NUMBER_OF_WIKI_PAGES = 1;
28
    private final int MINIMUM_NUMBER_OF_ACTIVITIES = 1;
29
    private final double MINIMUM_AVERAGE_LENGTH_OF_ACTIVITY_DESCRIPTION = 150;
30

  
31
    @Override
32
    public AntiPattern getAntiPatternModel() {
33
        return this.antiPattern;
34
    }
35

  
36
    @Override
37
    public String getAntiPatternSqlFileName() {
38
        return this.sqlFileName;
39
    }
40

  
41
    /**
42
     * Postup detekce:
43
     * 1) u každého projektu zkusit nalézt jestli obsahuje nějaké wiki stránky se specifikací projektu
44
     * 2) dále zkusit najít aktivity, které by naznačovali, že vznikl nějaký projektový blán
45
     * 3) dále vzít průměrnou délku textu, která je uvedena jako popis u kativity
46
     * 4) pokud nebude nalezena žádná aktivity ani wiki stránka, tak se zkontroluje průměrná délka popisku aktivity
47
     * 5) pokud ani jedno nezabere, tak je anti-pattern detekován
48
     *
49
     * @param project            analyzovaný project
50
     * @param databaseConnection databázové připojení
51
     * @param queries            list sql dotazů
52
     * @return výsledek detekce
53
     */
54
    @Override
55
    public QueryResultItem analyze(Project project, DatabaseConnection databaseConnection, List<String> queries) {
56

  
57
        /* Init values */
58
        int numberOfWikiPages = 0;
59
        int numberOfActivitiesForSpecification = 0;
60
        double averageLengthOfIssueDescription = 0;
61

  
62
        try {
63
            ResultSet rs = databaseConnection.executeQueries(project, queries);
64
            if (rs != null) {
65
                while (rs.next()) {
66
                    numberOfWikiPages = rs.getInt("numberOfWikiPages");
67
                    numberOfActivitiesForSpecification = rs.getInt("numberOfActivitiesForSpecification");
68
                    averageLengthOfIssueDescription = rs.getDouble("averageLengthOfIssueDescription");
69
                }
70
            }
71

  
72
        } catch (SQLException e) {
73
            e.printStackTrace();
74
        }
75

  
76
        LOGGER.info("Project id: " + project.getId());
77
        LOGGER.info("actvitiy:" + numberOfActivitiesForSpecification);
78
        LOGGER.info("wiki:" + numberOfWikiPages);
79
        LOGGER.info("average:" + averageLengthOfIssueDescription);
80

  
81
        if (numberOfActivitiesForSpecification >= MINIMUM_NUMBER_OF_ACTIVITIES ||
82
                numberOfWikiPages >= MINIMUM_NUMBER_OF_WIKI_PAGES) {
83
            return new QueryResultItem(this.antiPattern, false, null);
84
        } else {
85
            if (averageLengthOfIssueDescription > MINIMUM_AVERAGE_LENGTH_OF_ACTIVITY_DESCRIPTION) {
86
                return new QueryResultItem(this.antiPattern, false, null);
87
            } else {
88
                return new QueryResultItem(this.antiPattern, true, null);
89
            }
90
        }
91
    }
92
}

Také k dispozici: Unified diff