TR: Is the project interested in the following rules ?
"Pawlak Michel (DCTI)" <[email protected]> Mon, 6 Oct 2008 11:11:31 +0200
| Newsgroups | gmane.comp.java.audit.checkstyle.user |
|---|---|
| Message-ID | <2A8BA47B2326B14E96BCB7467F0EFEDB0273B168@capucin.ge-admin.ad.etat-ge.ch> |
Hello, In the scope of the development of a quality platform project, we are implementing some checkstyle 4.4 checks to verify the rules of our development / architecture standards. Now I'm writing the following email to the list in order to ask if the checkstyle project would be interested in them. One of the main feature of these checks is that they are completely configurable and generic. Indeed, we wanted to have adaptable checks allowing us to make evolve our quality standards without having to redevelop the checks, and we also wanted to enable anybody to adapt them to their precise needs without having to follow our own standards. By "anybody" we meant the checkstyle users community ;-) Here follows a description of the checks : === 1. Type names verification We use this check to verify that types respect the naming standard which are in place. For instance we want that all Exceptions end with "Exception", all interfaces end with "Able", all formbeans start with "Fb", etc. Instead of writing a check for each rule, we wrote a single check that can be configured as follows : a. must the rule be applied to interfaces or to classes ? b. must the verification occur only if the type is an instance of a given base type (for instance only to subclasses of "java.lang.Exception") or must it be always applied (for instance it must be applied to all interfaces) c. what is the text that must be be present (for instance "Able", "Exception") d. where must it be present (prefix or suffix) ? === 2. Package root We use this simple check to verify that all projects use a correct package root. (for instance, in our organization, all packages must start with "ch.ge." and packages names should include information about the department and project they are part of. Thus, packages part of project "b" of department "a", should be prefixed "ch.ge.a.b.") === 3. Package dependencies - In a context where we use package names to represent architecture layers, we needed a rule allowing us to define what package dependencies (calls from package A to package B) are forbidden. We develped thus a check enabling us to check that each layer is correctly isolated from other layers. In this check, all dependencies are described using regular expressions, which allows us to extend the verification at will (for instance to add new layers, or to adapt the check to projects having used another naming scheme for layers (for legacy projects for instance)). To give you an idea of what we can do with this rule, as attachement you can find an example of verifications we are currently doing. This shows what the check allows us to verify and what we currently cannot verify. Plea <<checks.pdf>> se note that all these verifications are done by instanciating the generic rule only 5 times. The rule can be configured as follows : a. the package to which the rule must be applied (the layer to be verified) as a regexp b. the imports that are forbidden as a regexp c. a switch to ignore the rule if the checked type is already in a "forbidden" package (this allows us to have rules that say that "no class can import a class from package B or its subpackages, unless the class is from package B or its subpackages" == 4. Dependency cycles detection - This check aims at detecting dependency cycles between components. Such cycles are difficult to detect by hand and impede the maintainablity and evolvability of the code. To represent components we use regular expressions on packages. Currently, the check simply outputs cycles as logs "component A -> component B -> component C -> component A" (for instance). In the future, I plan to improve it to provide more information to help break these cycles. Two parameters are available : a. the regexp allowing to detect components (for instance, if a package has a subpackage named "api" then it is a component) b. the regexp specifying the packages which have to be scanned for cycles (for instance if we want to scan only a given set of components) If you need any more information feel free to ask :-) Best regards, Michel Pawlak ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Checkstyle-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/checkstyle-user
checks.pdf
(application/octet-stream, 9.9 KB) - not displayed