Revize 8bb19350
Přidáno uživatelem Ondřej Váně před asi 4 roky(ů)
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
Specify nothing implemented