#### 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] 077/bci/app/main/DoOpenFile.java:23: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 077/bci/app/main/DoOpenFile.java:31: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 077/bci/app/user/DoRegisterUser.java:26: AvoidRethrowingException: Deve evitar o uso de um bloco catch que apenas apanha a excepção para relançar outra excepção do mesmo tipo [ERROR] 077/bci/core/LibraryManager.java:109: AvoidRethrowingException: Deve evitar o uso de um bloco catch que apenas apanha a excepção para relançar outra excepção do mesmo tipo [ERROR] 077/bci/core/LibraryManager.java:111: AvoidRethrowingException: Deve evitar o uso de um bloco catch que apenas apanha a excepção para relançar outra excepção do mesmo tipo [ERROR] 077/bci/core/MyParser.java:62: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. Blocos catch's iguais ou vazios (incluindo neste casos blocos try e finaly vazios) [INFO] 077/bci/core/LibraryManager.java:111: IdenticalCatchBranches: Ramo 'catch' idênticol to ramo 'FileNotFoundException' pertencentes à mesma instrução try. [INFO] 077/bci/core/LibraryManager.java:134: IdenticalCatchBranches: Ramo 'catch' idênticol to ramo 'FileNotFoundException' pertencentes à mesma instrução try. [INFO] 077/bci/core/LibraryManager.java:136: IdenticalCatchBranches: Ramo 'catch' idênticol to ramo 'FileNotFoundException' pertencentes à mesma instrução try. [ERROR] 077/bci/core/MyParser.java:29: EmptyCatchBlock: Evitar blocos catch vazios. Total de erros: 7 #### Quebra do encapsulamento Nada a assinalar #### Verificação de alguns aspectos de qualidade do código [ERROR] 077/bci/core/Book.java:23:5: 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 [ERROR] 077/bci/app/main/DoSaveFile.java:14:18: O atributo com o nome 'filename'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] Total de erros: 1 #### Verificação do processo de serialização Iniciando a auditoria... [INFO] 077/bci/core/LibraryManager.java:106 ObjectOutputStream criado no método 'public void saveAs(String filename)' da classe 'LibraryManager'. [CheckSerialization] [INFO] 077/bci/core/LibraryManager.java:128 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] 077/bci/core/MyParser.java:32 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] 077/bci/core/Book.java:32 uso desnecessário de super para invocar método 'getId' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Book.java:33 uso desnecessário de super para invocar método 'getReady' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Book.java:34 uso desnecessário de super para invocar método 'getNumberOfCopies' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Book.java:36 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Book.java:37 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Book.java:38 uso desnecessário de super para invocar método 'getCategory' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:19 uso desnecessário de super para invocar método 'getId' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:20 uso desnecessário de super para invocar método 'getReady' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:21 uso desnecessário de super para invocar método 'getNumberOfCopies' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:23 uso desnecessário de super para invocar método 'getTitle' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:24 uso desnecessário de super para invocar método 'getPrice' da super classe. [AvoidUselessSuper] [WARN] 077/bci/core/Dvd.java:25 uso desnecessário de super para invocar método 'getCategory' da super classe. [AvoidUselessSuper] Auditoria completa. #### Verificação de dependência de core de app Iniciando a auditoria... [WARN] 077/bci/core/LibraryManager.java:3 import 'bci.app.exception.UserRegistrationFailedException' não permitido na classe 'LibraryManager'. [POCoreImport] [ERROR] 077/bci/core/LibraryManager.java:34 Classe 'UserRegistrationFailedException', definida na camada de aplicação, não pode ser indicada na lista de excepções de um método de uma entidade do domínio. [POCoreImport] [ERROR] 077/bci/core/LibraryManager.java:36 instanciação do tipo 'UserRegistrationFailedException' não permitido em classes da camada de domínio. [POCoreImport] Auditoria completa. O Checkstyle terminou com 2 erros. #### Verificação do uso de membros estáticos Iniciando a auditoria... [INFO] 077/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 '15'. [POStaticMember] Auditoria completa. #### Verificação do nível de acesso dos atributos Nada a assinalar #### Verificação da necessidade da concretização de hashCode e equals Nada a assinalar #### 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, 2 package-private, 0 protected e 0 public. [WriteClassStructure] [INFO] Enumerados definidos no package core da aplicação (2): '[Category, UserBehavior]'. [WriteClassStructure] [INFO] Número total de classes definidos no core: 18, dos quais 0 private, 1 package-private, 0 protected e 17 public. [WriteClassStructure] [INFO] Classes abstractas definidas no package core da aplicação (2): '[Work, Rule]'. [WriteClassStructure] [INFO] Classes concretas e não excepções definidas no package core da aplicação (9): '[User, Request, Creator, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure] [INFO] Excepções definidas no package core da aplicação (7): '[NotFoundBook, MissingFileAssociationException, NotFoundCreator, UnavailableFileException, ImportFileException, UnrecognizedEntryException, NotFoundUser]'. [WriteClassStructure] [INFO] Número total de métodos nas classes do core (sem excepções): 72, dos quais 5 private, 44 package-private, 0 protected e 23 public. [WriteClassStructure] [INFO] Número total de atributos nas classes do core (sem excepções): 36, dos quais 36 private, 0 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 ( ) ###### Métodos ###### public String toString() public String toString() public String toString() [WriteClassStructure] [INFO] enum UserBehavior ( ) ###### Métodos ###### public String toString() public String toString() public String toString() [WriteClassStructure] [INFO] class User ( public implements Serializable, Comparable ) ###### Atributos ###### private String _name private String _email private int _id private int _fine private boolean _isActive private UserBehavior _behavior private List _requests ###### Métodos ###### boolean isActive() int getId() String getName() String getEmail() UserBehavior getBehavior() int getMulta() void setBehavior(UserBehavior behavior) void suspend() void activate() public String toString() public int compareTo(User user) [WriteClassStructure] [INFO] class Request ( public implements Serializable ) ###### Atributos ###### private Work _work private User _user private int _deadline ###### Métodos ###### Work getWork() int getDeadline() User getUser() [WriteClassStructure] [INFO] class Creator ( public implements Serializable ) ###### Atributos ###### private String _name private List _works ###### Métodos ###### void addWork(Work work) void remove(Work work) List getWorks() String getName() public boolean equals(Creator c) [WriteClassStructure] [INFO] class Date ( public implements Serializable ) ###### Atributos ###### private int _currentDate ###### Métodos ###### int getCurrentDate() void advanceDate(int nDays) [WriteClassStructure] [INFO] class Dvd ( public implements Serializable ) extends Work ###### Atributos ###### private String _igac private Creator _director ###### Métodos ###### public String toString() [WriteClassStructure] [INFO] class Book ( public implements Serializable ) extends Work ###### Atributos ###### private String _isbn private String _authorsString private List _authors ###### Métodos ###### private String getAuthorsName() public String toString() [WriteClassStructure] [INFO] class MyParser ( implements Serializable ) ###### 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] abstract class Work ( public implements Serializable, Comparable ) ###### Atributos ###### private int _numberOfCopies private int _price private int _id private int _numReady private String _title private Category _category ###### Métodos ###### int getId() int getPrice() int getNumberOfCopies() String getTitle() Category getCategory() int getReady() public int compareTo(Work work) public abstract String toString() ###### Subclasses ###### Dvd Book Method toString() overriden in subclass(es) Dvd Book [WriteClassStructure] [INFO] class LibraryManager ( public ) ###### Atributos ###### private Library _library private String _filename ###### Métodos ###### public int getCurrentDate() public void advanceDays(int nDays) public int createUser(String name, String email) public User getUser(int id) public List getUsers() public void createBook(String isbn, List authors, int price, String title, int numberOfCopies, . category) public void createDvd(String igac, Creator director, int price, String title, int numberOfCopies, . category) public Work getWork(int id) public List getWorks() public List getWorksOfCreator(String name) public String getFilename() public boolean isModified() public void save() public void saveAs(String filename) public void load(String filename) public void importFile(String datafile) [WriteClassStructure] [INFO] class Library ( public implements Serializable ) ###### Atributos ###### private Date _date private int _nextUserId private int _nextWorkId private boolean _modified private List _creators private List _works private List _users private MyParser _parser ###### Métodos ###### int getCurrentDate() void advanceDays(int nDays) User createUser(String name, String email) User getUser(int id) List getUsers() List getCreators() void createBook(String isbn, List authors, int price, String title, int numberOfCopies, . category) void createDvd(String igac, Creator director, int price, String title, int numberOfCopies, . category) Work getWork(int id) List getWorks() List getWorksOfCreator(String name) Creator registerCreator(String name) boolean isModified() void setModified() void unSetModified() void importFile(String filename) [WriteClassStructure] [INFO] abstract class Rule ( public implements Serializable ) ###### Atributos ###### private int _id ###### Métodos ###### int getId() void setId(int id) abstract boolean check(Work work, User user) [WriteClassStructure] Auditoria completa.