#### 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] 009/bci/app/user/DoRegisterUser.java:40: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 009/bci/core/Parser.java:58: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 009/bci/core/Parser.java:88: POAvoidCatchingGenericException: Evitar apanhar excepções demasiado genéricas (RuntimeException and Exception) em blocos try-catch. [ERROR] 009/bci/core/Parser.java:124: 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) [ERROR] 009/bci/app/main/DoOpenFile.java:32: EmptyCatchBlock: Evitar blocos catch vazios. [ERROR] 009/bci/app/main/DoOpenFile.java:35: EmptyCatchBlock: Evitar blocos catch vazios. [ERROR] 009/bci/app/main/DoSaveFile.java:27: EmptyCatchBlock: Evitar blocos catch vazios. [ERROR] 009/bci/app/main/DoSaveFile.java:30: EmptyCatchBlock: Evitar blocos catch vazios. Total de erros: 8 #### Quebra do encapsulamento Nada a assinalar #### Verificação de alguns aspectos de qualidade do código Nada a assinalar #### Verificação da boa aplicação do mecanismo de herança [WARN] 009/bci/core/Dvd.java:7:88: Parâmetro/variável local 'director' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Dvd.java:7:105: Parâmetro/variável local 'igacNumber' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:14:21: Parâmetro/variável local 'id' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:14:29: Parâmetro/variável local 'price' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:14:40: Parâmetro/variável local 'nCopies' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:14:56: Parâmetro/variável local 'title' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:14:72: Parâmetro/variável local 'category' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Work.java:39:39: Parâmetro/variável local 'creatorName' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Book.java:9:95: Parâmetro/variável local 'authors' esconde atributo da classe com o mesmo nome [HiddenField] [WARN] 009/bci/core/Book.java:9:111: Parâmetro/variável local 'isbn' esconde atributo da classe com o mesmo nome [HiddenField] Total de erros: 0 #### Verificação de Convenções de Codificação [ERROR] 009/bci/core/Dvd.java:4:20: O atributo com o nome 'director'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Dvd.java:5:20: O atributo com o nome 'igacNumber'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Library.java:24:16: O atributo com o nome 'date'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/User.java:55:28: A variável local com o nome '_notifs'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/core/Work.java:6:17: O atributo com o nome 'id'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:7:17: O atributo com o nome 'price'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:8:17: O atributo com o nome 'nCopies'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:9:17: O atributo com o nome 'disponiveis'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:10:20: O atributo com o nome 'title'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:11:22: O atributo com o nome 'category'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Work.java:12:20: O atributo com o nome 'creatorName'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Book.java:6:26: O atributo com o nome 'authors'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/core/Book.java:7:20: O atributo com o nome 'isbn'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/app/user/DoRegisterUser.java:25:12: A variável local com o nome '_name'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/user/DoRegisterUser.java:26:12: A variável local com o nome '_email'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/user/DoShowUser.java:23:13: A variável local com o nome '_id'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/user/DoShowUserNotifications.java:22:9: A variável local com o nome '_id'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/work/DoDisplayWorks.java:30:20: A variável local com o nome '_works'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/work/DoDisplayWork.java:13:21: O atributo com o nome 'display'não está de acordo com o padrão '^_[a-z][a-zA-Z]*[0-9]?$'. [POAttributeName] [ERROR] 009/bci/app/work/DoDisplayWork.java:22:13: A variável local com o nome '_id'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/main/DoAdvanceDate.java:18:9: A variável local com o nome '_nDays'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] [ERROR] 009/bci/app/main/DoDisplayDate.java:15:13: A variável local com o nome '_display'não está de acordo com o padrão '^[a-z][a-zA-Z0-9]*$'. [LocalVariableName] Total de erros: 22 #### Verificação do processo de serialização Iniciando a auditoria... [INFO] 009/bci/core/LibraryManager.java:167 ObjectOutputStream criado no método 'public void save()' da classe 'LibraryManager'. [CheckSerialization] [INFO] 009/bci/core/LibraryManager.java:193 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] 009/bci/core/Category.java:8 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple] [ERROR] 009/bci/core/LibraryManager.java:196 Evite a utilização do operador instanceof dado que normalmente o seu uso indica uma má aplicação do paradigma de programação com objectos. [OpenClosePrinciple] [WARN] 009/bci/core/Parser.java:29 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] [WARN] 009/bci/core/UserBehavior.java:10 Possível mau desenho: diferenciação do comportamento com base em comparação de enumerados (expressão 'this' comparada '3' vezes) e não com base no polimorfismo. [OpenClosePrinciple] Auditoria completa. O Checkstyle terminou com 1 erros. #### Verificação de dependência app de core Nada a assinalar #### Verificação do uso desnecessário de super Nada a assinalar #### Verificação de dependência de core de app Nada a assinalar #### Verificação do uso de membros estáticos Iniciando a auditoria... [INFO] 009/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. #### 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, 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: 14, dos quais 0 private, 3 package-private, 0 protected e 11 public. [WriteClassStructure] [INFO] Classes abstractas definidas no package core da aplicação (1): '[Work]'. [WriteClassStructure] [INFO] Classes concretas e não excepções definidas no package core da aplicação (9): '[User, Creator, Notification, Date, Dvd, Book, MyParser, LibraryManager, Library]'. [WriteClassStructure] [INFO] Excepções definidas no package core da aplicação (4): '[MissingFileAssociationException, UnavailableFileException, ImportFileException, UnrecognizedEntryException]'. [WriteClassStructure] [INFO] Número total de métodos nas classes do core (sem excepções): 70, dos quais 4 private, 2 package-private, 0 protected e 64 public. [WriteClassStructure] [INFO] Número total de atributos nas classes do core (sem excepções): 31, dos quais 31 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 ( public ) ###### Métodos ###### public String toString() [WriteClassStructure] [INFO] enum UserBehavior ( public ) ###### Métodos ###### public String toString() [WriteClassStructure] [INFO] class User ( public implements Serializable ) ###### Atributos ###### private int _id private boolean _isActive private String _name private String _email private int _fine private UserBehavior _behavior private List _notifications ###### Métodos ###### public String activeString() public boolean isActive() public String getName() public int getId() public String getEmail() public String getBehaviour() public String getSuspention() public int getFine() public void setBehavior(UserBehavior behavior) public void addNotification(String message) public List getNotifications() [WriteClassStructure] [INFO] class Creator ( public implements Serializable ) ###### Atributos ###### private String _name ###### Métodos ###### public String getCreatorName() [WriteClassStructure] [INFO] class Notification ( public implements Serializable ) ###### Atributos ###### private String _message ###### Métodos ###### public String toString() [WriteClassStructure] [INFO] class Date ( public implements Serializable ) ###### Atributos ###### private int _currentDate ###### Métodos ###### public int getCurrentDate() public void advanceDate(int days) [WriteClassStructure] [INFO] class Dvd ( ) extends Work ###### Atributos ###### private String director private String igacNumber ###### Métodos ###### public String getAdditionalInfo() public String getType() [WriteClassStructure] [INFO] class Book ( ) extends Work ###### Atributos ###### private List authors private String isbn ###### Métodos ###### public String getAdditionalInfo() public String getType() [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 ) ###### Atributos ###### private int id private int price private int nCopies private int disponiveis private String title private Category category private String creatorName ###### Métodos ###### public int getId() public int getPrice() public int getCopies() public String getTitle() public String getCategory() public int getCreatorId() public int getDisponiveis() public abstract String getAdditionalInfo() public abstract String getType() public String getCreatorName() public void setCreatorName(String creatorName) public String display() ###### Subclasses ###### Dvd Book Method getAdditionalInfo() overriden in subclass(es) Dvd Book Method getType() overriden in subclass(es) Dvd Book [WriteClassStructure] [INFO] class LibraryManager ( public ) ###### Atributos ###### private Library _library private String _filename private boolean _changed ###### Métodos ###### public Date getCurrentDate() public void advanceDate(int nDays) public User getUser(int id) public List getUsers() public User createUser(String name, String email) public void registerUser(String name, String email) public Work getWork(int id) public List getWorks() public List getWorksByCreator(String creatorName) public Creator getCreator(String name) public Creator registerCreator(String name) public void registerDvd(int price, int nCopies, String title, Category category, String director, String igacNumber) public void registerBook(int price, int nCopies, String title, Category category, List authors, String isbn) public boolean hasUnsavedChanges() 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 int _nextUserId private int _nextWorkId private List _users private List _works private List _creators private Date date ###### Métodos ###### public Date getCurrentDate() public void advanceDate(int nDays) public User createUser(String name, String email) public User getUser(int id) public List getUsers() public Work getWork(int id) public List getWorks() public void addWork(Work work) public void addUser(String name, String email) public void showWorkById(int id) public Creator registerCreator(String name) public Creator getCreator(String name) public List getWorksByCreator(String creatorName) public void registerDvd(int price, int nCopies, String title, Category category, String director, String igacNumber) public void registerBook(int price, int nCopies, String title, Category category, List authors, String isbn) void importFile(String filename) [WriteClassStructure] Auditoria completa.