#### Verificação do uso correcto do mecanismo de excepções Uso do mecanismo de excepção como controlo de fluxo, lançar uma excepção demasiado genérica, apanhar uma excepção num bloco catch e lançar uma nova excepção do mesmo tipo ou a mesma excepção [ERROR] 076/bci/app/main/DoOpenFile.java:25: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 076/bci/app/main/DoOpenFile.java:29: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 076/bci/app/main/DoSaveFile.java:22: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 076/bci/app/main/DoSaveFile.java:26: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 076/bci/app/user/DoRegisterUser.java:30: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 076/bci/app/work/DoDisplayWorksByCreator.java:20: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. Total de erros: 6 #### Quebra do encapsulamento Nada a assinalar #### Verificação de alguns aspectos de qualidade do código [ERROR] 076/bci/core/Book.java:24:9: Utilização de um ciclo 'for' para iterar o conteúdo da lista referenciada por '_authors' (do tipo 'List'). Substituir por ciclo for-each ou usar um iterador dado que a utilização do método get pode ser muito ineficiente neste caso. [POIterateListWithForLoop] Total de erros: 1 #### Verificação da boa aplicação do mecanismo de herança Nada a assinalar #### Verificação de Convenções de Codificação Nada a assinalar #### Verificação do processo de serialização Iniciando a auditoria... [INFO] 076/bci/core/LibraryManager.java:36 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization] [INFO] 076/bci/core/LibraryManager.java:65 ObjectInputStream criado no método 'public void load(String filename)' da classe 'LibraryManager'. [CheckSerialization] Auditoria completa. #### Verificação do princípio de desenho aberto/fechado Iniciando a auditoria... [WARN] 076/bci/core/Creation.java:42 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão '_genre' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple] [WARN] 076/bci/core/Parser.java:30 Possível mau desenho: diferenciação do comportamento com base em comparação de strings (expressão 'components[ ]' comparada '4' vezes) e não com base no polimorfismo. [OpenClosePrinciple] Auditoria completa. #### Verificação de dependência app de core Nada a assinalar #### Verificação do uso desnecessário de super Iniciando a auditoria... [WARN] 076/bci/core/Book.java:31 uso desnecessário de super para invocar método 'getCreationId' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Book.java:31 uso desnecessário de super para invocar método 'getavailable' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Book.java:31 uso desnecessário de super para invocar método 'getQuantity' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Book.java:32 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Book.java:32 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Book.java:32 uso desnecessário de super para invocar método 'getGenre' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:15 uso desnecessário de super para invocar método 'getCreationId' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:15 uso desnecessário de super para invocar método 'getavailable' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:15 uso desnecessário de super para invocar método 'getQuantity' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:16 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:16 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper] [WARN] 076/bci/core/Dvd.java:16 uso desnecessário de super para invocar método 'getGenre' da super classe. [AvoidUselessSuper] Auditoria completa. #### Verificação de dependência de core de app Nada a assinalar #### Verificação do uso de membros estáticos Iniciando a auditoria... [ERROR] 076/bci/core/Date.java:5 Membro estático 'Date _instance' não recomendável. [POStaticMember] [ERROR] 076/bci/core/Date.java:9 Membro estático 'public static Date getInstance()' não recomendável. [POStaticMember] [INFO] 076/bci/core/exception/ImportFileException.java:7 Atributo estático final 'String ERROR_MESSAGE' permitido. [POStaticMember] [INFO] O número de serialVersionUID atributos estáticos definidos nas várias classes foi '12'. [POStaticMember] Auditoria completa. O Checkstyle terminou com 2 erros. #### Verificação do nível de acesso dos atributos Iniciando a auditoria... [ERROR] 076/bci/core/Dvd.java:5 O atributo '_director', com nível de acesso 'package', deveria ser privado e ter métodos acessores. [POVisibilityModifier] Auditoria completa. O Checkstyle terminou com 1 erros. #### Verificação da necessidade da concretização de hashCode e equals Iniciando a auditoria... [WARN] Possível erro: A classe 'Creator' utilizada no atributo 'private Set _creators' da classe 'Library' não substitui os métodos hashCode e equals. [WriteClassStructure] Auditoria completa. #### Verificação de membros com o nível protected desnecessário Nada a assinalar #### Verificação do mecanismo de herança II: atributos duplicados e métodos que deviam ser abstractos Nada a assinalar #### Sumário das classes do core da aplicação Iniciando a auditoria... [INFO] Número total de enumerados definidos no core: 2, dos quais 0 private, 0 package-private, 0 protected e 2 public. [WriteClassStructure] [INFO] Enumerados definidos no package core da aplicação (2): '[Category, UserBehavior]'. [WriteClassStructure] [INFO] Número total de classes definidos no core: 17, dos quais 0 private, 1 package-private, 0 protected e 16 public. [WriteClassStructure] [INFO] Classes abstractas definidas no package core da aplicação (2): '[Creation, Rule]'. [WriteClassStructure] [INFO] Classes concretas e não excepções definidas no package core da aplicação (8): '[User, Creator, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure] [INFO] Excepções definidas no package core da aplicação (7): '[MissingFileAssociationException, NoSuchUserException, UnavailableFileException, ImportFileException, UnrecognizedEntryException, NoSuchCreatorException, NotEnoughCopiesException]'. [WriteClassStructure] [INFO] Número total de métodos nas classes do core (sem excepções): 76, dos quais 4 private, 3 package-private, 0 protected e 69 public. [WriteClassStructure] [INFO] Número total de atributos nas classes do core (sem excepções): 34, dos quais 33 private, 1 package-private, 0 protected e 0 public. [WriteClassStructure] Auditoria completa. Descrição das estruturas de dados do core do projecto Iniciando a auditoria... [INFO] enum Category ( public ) [WriteClassStructure] [INFO] enum UserBehavior ( public ) [WriteClassStructure] [INFO] class User ( public implements Comparable, java.io.Serializable ) ###### Atributos ###### private int _userId private String _name private String _email private boolean _active private int _fines private int _successiveCorrectReturns private int _successiveIncorrectReturns private UserBehavior _classification ###### Métodos ###### public int getId() public String getName() public String getEmail() public boolean isActive() public int getFines() public UserBehavior getClassification() public void deactivate() public void activate() public String toString() public int compareTo(User u) [WriteClassStructure] [INFO] abstract class Creation ( public implements java.io.Serializable ) ###### Atributos ###### private int _creationId private int _price private int _numberOfCopies private int _numberOfCopiesAvailable private String _title private Category _genre ###### Métodos ###### public int changeQuantity(int quantity) public int getCreationId() public String getTitle() public int getPrice() public int getQuantity() public String getGenre() public abstract String toString() public abstract List getCreators() public int getavailable() ###### Subclasses ###### Dvd Book Method toString() overriden in subclass(es) Dvd Book Method getCreators() overriden in subclass(es) Dvd Book [WriteClassStructure] [INFO] class Creator ( public implements java.io.Serializable ) ###### Atributos ###### private String _name private List _creations ###### Métodos ###### public String getName() public void addCreation(Creation c) public void removeCreation(Creation c) public int getNumberOfCreations() public boolean equals(Object o) [WriteClassStructure] [INFO] class Date ( public implements java.io.Serializable ) ###### Atributos ###### private int _currentDate private static Date _instance ###### Métodos ###### public static Date getInstance() public int getCurrentDate() public void advanceDate(int days) [WriteClassStructure] [INFO] class Dvd ( public ) extends Creation ###### Atributos ###### private String _igac Creator _director ###### Métodos ###### public String getIgac() public String toString() public Creator getCreator() public List getCreators() [WriteClassStructure] [INFO] class Book ( public ) extends Creation ###### Atributos ###### private String _isbn private List _authors ###### Métodos ###### public String getIsbn() public List getCreators() public String toString() [WriteClassStructure] [INFO] class MyParser ( ) ###### Atributos ###### private Library _library ###### Métodos ###### void parseFile(String filename) private void parseLine(String line) private void parseUser(String components, String line) private void parseDvd(String components, String line) private void parseBook(String components, String line) [WriteClassStructure] [INFO] class LibraryManager ( public ) ###### Atributos ###### private Library _library private String _filename ###### Métodos ###### public void save() public void saveAs(String filename) public void load(String filename) public void importFile(String datafile) public int getCurrentDate() public void advanceDays(int days) public int createUser(String name, String email) public User getUser(int id) public Library getLibrary() public List getUsers() public Creation getCreation(int id) public List getCreations() public int compare(Creation c1, Creation c2) public List getCreationsByCreator(String creatorName) public int compare(Creation c1, Creation c2) public void changeCreationQuantity(int id, int quantity) public Creator registerCreator(String name) public void registerDvd(String title, Category genre, int price, int quantity, String igac, Creator director) public void registerBook(String title, List authors, Category genre, int price, int quantity, String isbn) public boolean hasLibraryBeenModified() [WriteClassStructure] [INFO] class Library ( public implements Serializable ) ###### Atributos ###### private int _nextWorkId private int _nextUserId private boolean _modified private Set _creators private Map _creations private Map _users private List _rules private Date _currentDate ###### Métodos ###### public int getCurrentDate() public void advanceDate(int days) public int createUser(String name, String email) public User getUser(int id) public List getUsers() public Creation getCreation(int id) public void changeCreationQuantity(int id, int quantity) public List getCreations() public List getCreationsByCreator(Creator creator) public Creator getCreator(String name) public Creator registerCreator(String name) public void registerDvd(String title, Category genre, int price, int quantity, String igac, Creator director) public void registerBook(String title, List authors, Category genre, int price, int quantity, String isbn) void importFile(String filename) public void setModified(boolean modified) public boolean wasModified() [WriteClassStructure] [INFO] abstract class Rule ( public ) ###### Atributos ###### private int _id ###### Métodos ###### abstract void check(Creation c, User u) [WriteClassStructure] Auditoria completa.