最近Jenkinsネタも流行っているし、静的テストの設定を晒してみたり
Jenkins本が発売されたり、記事が出たりして、盛り上がっている今日この頃ですが(・∀・)
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (62件) を見る
それらの解説の中では、CheckStyle、FindBugsによる静的テスト、Coberturaによるカバレージ取得あたりが取り上げられていて、Javaの開発環境ではこのあたりの仕様が定番というところでしょうか(・ω・)?
かくいううちでもCheckStyle、FindBugs、Coberturaは使っていて、加えるならPMDの併用とCPDでの重複コードチェックもやっているっという感じです。
っで、CheckStyleなんかのルール設定に関して、他の人達はどんな風にしているのかしら(・ω・)?、っというのがちょっと気になったので、まずは自分の所の設定を晒してみます。
ルール設定を下記に示しますが、多少ひねた言い方をすれば、「SI屋が」「土方を使って」「業務システムを作る」際のルールなので、設定自体は甘めになっています(その代わり警告0にすることは必須)
これらのルールを使ったJenkinsさんによるチェックと、人の目による責務の正しさのチェックとかが、自分んとこのコードの品質確認のルールです(`・ω・´)
CheckStyle
CheckStyleについてはこんな感じ(・ω・)
一部の数値が非常に甘い(・∀・;)ですが、一部Utilでのべた書きとかも許容するためのもので、実際にControllerやServiceのメソッドが160行もあったら、それは人の目によるチェックの方で指摘が行くことになります(´д`;)
あと、ParameterNumberの数値が甘いのは、一部Facadeを考慮してとか。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> <module name="Checker"> <property name="severity" value="warning"/> <property name="charset" value="UTF-8"/> <module name="TreeWalker"> <property name="severity" value="warning"/> <property name="tabWidth" value="4"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> <module name="JavadocMethod"> <property name="severity" value="ignore"/> <property name="suppressLoadErrors" value="true"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="JavadocType"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="JavadocVariable"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="JavadocStyle"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="ConstantName"> <property name="applyToPrivate" value="false"/> </module> <module name="LocalFinalVariableName"/> <module name="LocalVariableName"/> <module name="MemberName"/> <module name="MethodName"/> <module name="PackageName"/> <module name="ParameterName"/> <module name="StaticVariableName"/> <module name="TypeName"/> <module name="AvoidStarImport"/> <module name="IllegalImport"/> <module name="RedundantImport"/> <module name="UnusedImports"/> <module name="MethodLength"/> <module name="ParameterNumber"> <property name="max" value="8"/> </module> <module name="LineLength"> <property name="max" value="160"/> <property name="tabWidth" value="4"/> </module> <module name="EmptyForIteratorPad"/> <module name="MethodParamPad"/> <module name="NoWhitespaceAfter"/> <module name="NoWhitespaceBefore"/> <module name="OperatorWrap"> <property name="tokens" value="BAND,BOR,BSR,BXOR,COLON,DIV,EQUAL,GE,GT,LE,LITERAL_INSTANCEOF,LT,MINUS,MOD,NOT_EQUAL,PLUS,QUESTION,SL,SR,STAR"/> </module> <module name="ParenPad"/> <module name="TypecastParenPad"/> <module name="WhitespaceAfter"> <property name="tokens" value="COMMA,SEMI"/> </module> <module name="WhitespaceAround"> <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND,WILDCARD_TYPE"/> <property name="allowEmptyConstructors" value="true"/> <property name="allowEmptyMethods" value="true"/> </module> <module name="ModifierOrder"/> <module name="RedundantModifier"/> <module name="AvoidNestedBlocks"/> <module name="EmptyBlock"/> <module name="LeftCurly"/> <module name="NeedBraces"/> <module name="RightCurly"/> <module name="AvoidInlineConditionals"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="DoubleCheckedLocking"/> <module name="EmptyStatement"/> <module name="EqualsHashCode"/> <module name="HiddenField"> <property name="tokens" value="VARIABLE_DEF"/> </module> <module name="IllegalInstantiation"/> <module name="InnerAssignment"> <property name="tokens" value="BAND_ASSIGN,BOR_ASSIGN,BSR_ASSIGN,BXOR_ASSIGN,DIV_ASSIGN,MINUS_ASSIGN,MOD_ASSIGN,PLUS_ASSIGN,SL_ASSIGN,SR_ASSIGN,STAR_ASSIGN"/> </module> <module name="MagicNumber"> <property name="severity" value="ignore"/> <property name="ignoreNumbers" value="-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 24, 32, 64, 100, 128, 200, 256, 1024, 2048, 4096, 99999, 999999, 99999999"/> <property name="ignoreHashCodeMethod" value="true"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="MissingSwitchDefault"/> <module name="RedundantThrows"> <property name="allowUnchecked" value="true"/> <property name="allowSubclasses" value="true"/> <property name="suppressLoadErrors" value="true"/> </module> <module name="SimplifyBooleanExpression"/> <module name="SimplifyBooleanReturn"/> <module name="DesignForExtension"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="FinalClass"/> <module name="HideUtilityClassConstructor"/> <module name="InterfaceIsType"/> <module name="VisibilityModifier"/> <module name="ArrayTypeStyle"/> <module name="FinalParameters"/> <module name="TodoComment"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="UpperEll"/> <module name="MultipleStringLiterals"> <property name="allowedDuplicates" value="8"/> <property name="ignoreStringsRegexp" value="^"unchecked"$"/> </module> <module name="MultipleVariableDeclarations"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="info"/> </module> <module name="NestedIfDepth"> <property name="max" value="3"/> </module> <module name="NestedTryDepth"> <property name="max" value="2"/> </module> <module name="PackageDeclaration"/> <module name="ParameterAssignment"> <property name="severity" value="info"/> </module> <module name="ReturnCount"> <property name="max" value="8"/> </module> </module> <module name="JavadocPackage"> <property name="severity" value="ignore"/> <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> </module> <module name="NewlineAtEndOfFile"/> <module name="Translation"/> <!-- <module name="FileLength"/> --> <module name="FileTabCharacter"/> <module name="RegexpSingleline"> <property name="format" value="\s+$"/> <property name="message" value="Line has trailing spaces."/> </module> </module>
FindBugs
FindBugsについては除外ルールも下記のような感じで。
要は、入れ物系のクラスで、Dateとかのgetterを許可するための除外ルールです(手抜き)。
<?xml version="1.0" encoding="UTF-8"?> <FindBugsFilter> <Match> <Class name="~.*ViewModel$" /> <Bug code="EI2,EI"/> </Match> ... </FindBugsFilter>
PMD
PMDの設定はこんな感じ。
CheckStyle、FindBugsとかぶるものもありますが、うちでは併用(・ω・)
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0" name="ruleset" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"> <description>PMD Plugin preferences rule set</description> <rule ref="rulesets/typeresolution.xml/LooseCoupling"/> <rule ref="rulesets/typeresolution.xml/CloneMethodMustImplementCloneable"/> <rule ref="rulesets/typeresolution.xml/UnusedImports"/> <!-- <rule ref="rulesets/typeresolution.xml/SignatureDeclareThrowsException"/> --> <rule ref="rulesets/braces.xml/IfStmtsMustUseBraces"/> <rule ref="rulesets/braces.xml/WhileLoopsMustUseBraces"/> <rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/> <rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/> <rule ref="rulesets/design.xml/UseSingleton"/> <rule ref="rulesets/design.xml/SimplifyBooleanReturns"/> <rule ref="rulesets/design.xml/SimplifyBooleanExpressions"/> <rule ref="rulesets/design.xml/SwitchStmtsShouldHaveDefault"/> <rule ref="rulesets/design.xml/AvoidDeeplyNestedIfStmts"/> <rule ref="rulesets/design.xml/AvoidReassigningParameters"/> <rule ref="rulesets/design.xml/SwitchDensity"/> <rule ref="rulesets/design.xml/ConstructorCallsOverridableMethod"/> <rule ref="rulesets/design.xml/AccessorClassGeneration"/> <rule ref="rulesets/design.xml/FinalFieldCouldBeStatic"/> <rule ref="rulesets/design.xml/CloseResource"/> <rule ref="rulesets/design.xml/NonStaticInitializer"/> <rule ref="rulesets/design.xml/DefaultLabelNotLastInSwitchStmt"/> <rule ref="rulesets/design.xml/NonCaseLabelInSwitchStatement"/> <rule ref="rulesets/design.xml/OptimizableToArrayCall"/> <rule ref="rulesets/design.xml/BadComparison"/> <rule ref="rulesets/design.xml/EqualsNull"/> <!-- <rule ref="rulesets/design.xml/ConfusingTernary"/> --> <rule ref="rulesets/design.xml/InstantiationToGetClass"/> <rule ref="rulesets/design.xml/IdempotentOperations"/> <!-- <rule ref="rulesets/design.xml/SimpleDateFormatNeedsLocale"/> --> <rule ref="rulesets/design.xml/ImmutableField"/> <!-- <rule ref="rulesets/design.xml/UseLocaleWithCaseConversions"/> --> <rule ref="rulesets/design.xml/AvoidProtectedFieldInFinalClass"/> <rule ref="rulesets/design.xml/AssignmentToNonFinalStatic"/> <rule ref="rulesets/design.xml/MissingStaticMethodInNonInstantiatableClass"/> <rule ref="rulesets/design.xml/AvoidSynchronizedAtMethodLevel"/> <rule ref="rulesets/design.xml/MissingBreakInSwitch"/> <rule ref="rulesets/design.xml/UseNotifyAllInsteadOfNotify"/> <rule ref="rulesets/design.xml/AvoidInstanceofChecksInCatchClause"/> <!-- <rule ref="rulesets/design.xml/AbstractClassWithoutAbstractMethod"/> --> <rule ref="rulesets/design.xml/SimplifyConditional"/> <rule ref="rulesets/design.xml/CompareObjectsWithEquals"/> <rule ref="rulesets/design.xml/PositionLiteralsFirstInComparisons"/> <rule ref="rulesets/design.xml/UnnecessaryLocalBeforeReturn"/> <rule ref="rulesets/design.xml/NonThreadSafeSingleton"/> <!-- <rule ref="rulesets/design.xml/UncommentedEmptyMethod"/> --> <rule ref="rulesets/design.xml/UncommentedEmptyConstructor"/> <rule ref="rulesets/design.xml/AvoidConstantsInterface"/> <rule ref="rulesets/design.xml/UnsynchronizedStaticDateFormatter"/> <rule ref="rulesets/design.xml/PreserveStackTrace"/> <rule ref="rulesets/design.xml/UseCollectionIsEmpty"/> <rule ref="rulesets/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/> <!-- <rule ref="rulesets/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/> --> <rule ref="rulesets/design.xml/SingularField"/> <rule ref="rulesets/design.xml/ReturnEmptyArrayRatherThanNull"/> <!-- <rule ref="rulesets/design.xml/AbstractClassWithoutAnyMethod"/> --> <rule ref="rulesets/design.xml/TooFewBranchesForASwitchStatement"/> <!-- <rule ref="rulesets/strictexception.xml/AvoidCatchingThrowable"/> --> <!-- <rule ref="rulesets/strictexception.xml/SignatureDeclareThrowsException"/> --> <rule ref="rulesets/strictexception.xml/ExceptionAsFlowControl"/> <rule ref="rulesets/strictexception.xml/AvoidCatchingNPE"/> <rule ref="rulesets/strictexception.xml/AvoidThrowingRawExceptionTypes"/> <rule ref="rulesets/strictexception.xml/AvoidThrowingNullPointerException"/> <rule ref="rulesets/strictexception.xml/AvoidRethrowingException"/> <rule ref="rulesets/strictexception.xml/DoNotExtendJavaLangError"/> <!-- <rule ref="rulesets/strictexception.xml/DoNotThrowExceptionInFinally"/> --> <rule ref="rulesets/strictexception.xml/AvoidThrowingNewInstanceOfSameException"/> <rule ref="rulesets/unusedcode.xml/UnusedPrivateField"/> <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable"/> <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod"/> <rule ref="rulesets/unusedcode.xml/UnusedFormalParameter"/> <rule ref="rulesets/logging-java.xml/MoreThanOneLogger"/> <rule ref="rulesets/logging-java.xml/LoggerIsNotStaticFinal"/> <rule ref="rulesets/logging-java.xml/SystemPrintln"/> <rule ref="rulesets/logging-java.xml/AvoidPrintStackTrace"/> <!-- <rule ref="rulesets/strings.xml/AvoidDuplicateLiterals"/> --> <rule ref="rulesets/strings.xml/StringInstantiation"/> <rule ref="rulesets/strings.xml/StringToString"/> <rule ref="rulesets/strings.xml/InefficientStringBuffering"/> <rule ref="rulesets/strings.xml/UnnecessaryCaseChange"/> <rule ref="rulesets/strings.xml/UseStringBufferLength"/> <rule ref="rulesets/strings.xml/AppendCharacterWithChar"/> <rule ref="rulesets/strings.xml/ConsecutiveLiteralAppends"/> <rule ref="rulesets/strings.xml/UseIndexOfChar"/> <rule ref="rulesets/strings.xml/InefficientEmptyStringCheck"/> <rule ref="rulesets/strings.xml/InsufficientStringBufferDeclaration"/> <rule ref="rulesets/strings.xml/UselessStringValueOf"/> <rule ref="rulesets/strings.xml/StringBufferInstantiationWithChar"/> <rule ref="rulesets/strings.xml/UseEqualsToCompareStrings"/> <rule ref="rulesets/strings.xml/AvoidStringBufferField"/> <rule ref="rulesets/migrating.xml/ReplaceVectorWithList"/> <rule ref="rulesets/migrating.xml/ReplaceHashtableWithMap"/> <rule ref="rulesets/migrating.xml/ReplaceEnumerationWithIterator"/> <rule ref="rulesets/migrating.xml/AvoidEnumAsIdentifier"/> <rule ref="rulesets/migrating.xml/AvoidAssertAsIdentifier"/> <rule ref="rulesets/migrating.xml/IntegerInstantiation"/> <rule ref="rulesets/migrating.xml/ByteInstantiation"/> <rule ref="rulesets/migrating.xml/ShortInstantiation"/> <rule ref="rulesets/migrating.xml/LongInstantiation"/> <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseBeforeAnnotation"/> <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseAfterAnnotation"/> <!-- <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseTestAnnotation"/> --> <rule ref="rulesets/migrating.xml/JUnit4SuitesShouldUseSuiteAnnotation"/> <rule ref="rulesets/migrating.xml/JUnitUseExpected"/> <rule ref="rulesets/j2ee.xml/UseProperClassLoader"/> <rule ref="rulesets/j2ee.xml/MDBAndSessionBeanNamingConvention"/> <rule ref="rulesets/j2ee.xml/RemoteSessionInterfaceNamingConvention"/> <rule ref="rulesets/j2ee.xml/LocalInterfaceSessionNamingConvention"/> <rule ref="rulesets/j2ee.xml/LocalHomeNamingConvention"/> <rule ref="rulesets/j2ee.xml/RemoteInterfaceNamingConvention"/> <rule ref="rulesets/j2ee.xml/DoNotCallSystemExit"/> <rule ref="rulesets/j2ee.xml/StaticEJBFieldShouldBeFinal"/> <!-- <rule ref="rulesets/j2ee.xml/DoNotUseThreads"/> --> <!-- <rule ref="rulesets/optimizations.xml/LocalVariableCouldBeFinal"/> --> <rule ref="rulesets/optimizations.xml/MethodArgumentCouldBeFinal"/> <!-- <rule ref="rulesets/optimizations.xml/AvoidInstantiatingObjectsInLoops"/> --> <rule ref="rulesets/optimizations.xml/UseArrayListInsteadOfVector"/> <rule ref="rulesets/optimizations.xml/SimplifyStartsWith"/> <rule ref="rulesets/optimizations.xml/UseStringBufferForStringAppends"/> <rule ref="rulesets/optimizations.xml/UseArraysAsList"/> <rule ref="rulesets/optimizations.xml/AvoidArrayLoops"/> <rule ref="rulesets/optimizations.xml/UnnecessaryWrapperObjectCreation"/> <rule ref="rulesets/optimizations.xml/AddEmptyString"/> <rule ref="rulesets/basic.xml/EmptyCatchBlock"/> <rule ref="rulesets/basic.xml/EmptyIfStmt"/> <rule ref="rulesets/basic.xml/EmptyWhileStmt"/> <rule ref="rulesets/basic.xml/EmptyTryBlock"/> <rule ref="rulesets/basic.xml/EmptyFinallyBlock"/> <rule ref="rulesets/basic.xml/EmptySwitchStatements"/> <rule ref="rulesets/basic.xml/JumbledIncrementer"/> <rule ref="rulesets/basic.xml/ForLoopShouldBeWhileLoop"/> <rule ref="rulesets/basic.xml/UnnecessaryConversionTemporary"/> <rule ref="rulesets/basic.xml/OverrideBothEqualsAndHashcode"/> <rule ref="rulesets/basic.xml/DoubleCheckedLocking"/> <rule ref="rulesets/basic.xml/ReturnFromFinallyBlock"/> <rule ref="rulesets/basic.xml/EmptySynchronizedBlock"/> <rule ref="rulesets/basic.xml/UnnecessaryReturn"/> <rule ref="rulesets/basic.xml/EmptyStaticInitializer"/> <rule ref="rulesets/basic.xml/UnconditionalIfStatement"/> <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"/> <rule ref="rulesets/basic.xml/BooleanInstantiation"/> <rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/> <rule ref="rulesets/basic.xml/CollapsibleIfStatements"/> <rule ref="rulesets/basic.xml/UselessOverridingMethod"/> <rule ref="rulesets/basic.xml/ClassCastExceptionWithToArray"/> <rule ref="rulesets/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/> <rule ref="rulesets/basic.xml/UselessOperationOnImmutable"/> <rule ref="rulesets/basic.xml/MisplacedNullCheck"/> <rule ref="rulesets/basic.xml/UnusedNullCheckInEquals"/> <rule ref="rulesets/basic.xml/AvoidThreadGroup"/> <rule ref="rulesets/basic.xml/BrokenNullCheck"/> <rule ref="rulesets/basic.xml/BigIntegerInstantiation"/> <rule ref="rulesets/basic.xml/AvoidUsingOctalValues"/> <rule ref="rulesets/basic.xml/AvoidUsingHardCodedIP"/> <rule ref="rulesets/basic.xml/CheckResultSet"/> <rule ref="rulesets/basic.xml/AvoidMultipleUnaryOperators"/> <rule ref="rulesets/basic.xml/EmptyInitializer"/> <!-- <rule ref="rulesets/sunsecure.xml/MethodReturnsInternalArray"/> --> <!-- <rule ref="rulesets/sunsecure.xml/ArrayIsStoredDirectly"/> --> <rule ref="rulesets/coupling.xml/CouplingBetweenObjects"/> <!-- <rule ref="rulesets/coupling.xml/ExcessiveImports"/> --> <rule ref="rulesets/coupling.xml/LooseCoupling"/> <rule ref="rulesets/imports.xml/DuplicateImports"/> <rule ref="rulesets/imports.xml/DontImportJavaLang"/> <rule ref="rulesets/imports.xml/UnusedImports"/> <rule ref="rulesets/imports.xml/ImportFromSamePackage"/> <!-- <rule ref="rulesets/imports.xml/TooManyStaticImports"/> --> <rule ref="rulesets/junit.xml/JUnitStaticSuite"/> <rule ref="rulesets/junit.xml/JUnitSpelling"/> <rule ref="rulesets/junit.xml/JUnitAssertionsShouldIncludeMessage"/> <rule ref="rulesets/junit.xml/JUnitTestsShouldIncludeAssert"/> <rule ref="rulesets/junit.xml/TestClassWithoutTestCases"/> <rule ref="rulesets/junit.xml/UnnecessaryBooleanAssertion"/> <rule ref="rulesets/junit.xml/UseAssertEqualsInsteadOfAssertTrue"/> <rule ref="rulesets/junit.xml/UseAssertSameInsteadOfAssertTrue"/> <rule ref="rulesets/junit.xml/UseAssertNullInsteadOfAssertTrue"/> <rule ref="rulesets/junit.xml/SimplifyBooleanAssertion"/> <rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/> <!-- <rule ref="rulesets/controversial.xml/NullAssignment"/> --> <!-- <rule ref="rulesets/controversial.xml/OnlyOneReturn"/> --> <rule ref="rulesets/controversial.xml/UnusedModifier"/> <!-- <rule ref="rulesets/controversial.xml/AssignmentInOperand"/> --> <!-- <rule ref="rulesets/controversial.xml/AtLeastOneConstructor"/> --> <rule ref="rulesets/controversial.xml/DontImportSun"/> <rule ref="rulesets/controversial.xml/SuspiciousOctalEscape"/> <!-- <rule ref="rulesets/controversial.xml/CallSuperInConstructor"/> --> <rule ref="rulesets/controversial.xml/UnnecessaryParentheses"/> <rule ref="rulesets/controversial.xml/DefaultPackage"/> <rule ref="rulesets/controversial.xml/BooleanInversion"/> <!-- <rule ref="rulesets/controversial.xml/DataflowAnomalyAnalysis"/> --> <!-- <rule ref="rulesets/controversial.xml/AvoidFinalLocalVariable"/> --> <!-- <rule ref="rulesets/controversial.xml/AvoidUsingShortType"/> --> <rule ref="rulesets/controversial.xml/AvoidUsingVolatile"/> <rule ref="rulesets/controversial.xml/AvoidUsingNativeCode"/> <rule ref="rulesets/controversial.xml/AvoidAccessibilityAlteration"/> <rule ref="rulesets/controversial.xml/DoNotCallGarbageCollectionExplicitly"/> <!-- rule ref="rulesets/naming.xml/ShortVariable"/> --> <!-- <rule ref="rulesets/naming.xml/LongVariable"/> --> <!-- <rule ref="rulesets/naming.xml/ShortMethodName"/> --> <!-- <rule ref="rulesets/naming.xml/VariableNamingConventions"/> --> <rule ref="rulesets/naming.xml/MethodNamingConventions"/> <rule ref="rulesets/naming.xml/ClassNamingConventions"/> <!-- <rule ref="rulesets/naming.xml/AbstractNaming"/> --> <rule ref="rulesets/naming.xml/AvoidDollarSigns"/> <rule ref="rulesets/naming.xml/MethodWithSameNameAsEnclosingClass"/> <rule ref="rulesets/naming.xml/SuspiciousHashcodeMethodName"/> <rule ref="rulesets/naming.xml/SuspiciousConstantFieldName"/> <rule ref="rulesets/naming.xml/SuspiciousEqualsMethodName"/> <!-- <rule ref="rulesets/naming.xml/AvoidFieldNameMatchingTypeName"/> --> <!-- <rule ref="rulesets/naming.xml/AvoidFieldNameMatchingMethodName"/> --> <rule ref="rulesets/naming.xml/NoPackage"/> <rule ref="rulesets/naming.xml/PackageCase"/> <rule ref="rulesets/naming.xml/MisleadingVariableName"/> <rule ref="rulesets/naming.xml/BooleanGetMethodName"/> <!-- <rule ref="rulesets/codesize.xml/NPathComplexity"/> --> <!-- <rule ref="rulesets/codesize.xml/ExcessiveMethodLength"/> --> <rule ref="rulesets/codesize.xml/ExcessiveParameterList"/> <!-- <rule ref="rulesets/codesize.xml/ExcessiveClassLength"/> --> <rule ref="rulesets/codesize.xml/CyclomaticComplexity"> <properties> <property name="reportLevel" value="15" /> </properties> </rule> <!-- <rule ref="rulesets/codesize.xml/ExcessivePublicCount"/> --> <!-- <rule ref="rulesets/codesize.xml/TooManyFields"/> --> <rule ref="rulesets/codesize.xml/NcssMethodCount"/> <rule ref="rulesets/codesize.xml/NcssTypeCount"/> <rule ref="rulesets/codesize.xml/NcssConstructorCount"/> <!-- <rule ref="rulesets/codesize.xml/TooManyMethods"/> --> <rule ref="rulesets/finalizers.xml/EmptyFinalizer"/> <rule ref="rulesets/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/> <rule ref="rulesets/finalizers.xml/FinalizeOverloaded"/> <rule ref="rulesets/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/> <rule ref="rulesets/finalizers.xml/FinalizeShouldBeProtected"/> <rule ref="rulesets/finalizers.xml/AvoidCallingFinalize"/> <rule ref="rulesets/logging-jakarta-commons.xml/UseCorrectExceptionLogging"/> <rule ref="rulesets/logging-jakarta-commons.xml/ProperLogger"/> <!-- <rule ref="rulesets/javabeans.xml/BeanMembersShouldSerialize"/> --> <rule ref="rulesets/javabeans.xml/MissingSerialVersionUID"/> <rule ref="rulesets/clone.xml/ProperCloneImplementation"/> <rule ref="rulesets/clone.xml/CloneThrowsCloneNotSupportedException"/> <rule ref="rulesets/clone.xml/CloneMethodMustImplementCloneable"/> </ruleset>
普段のチェックで指摘される項目で何が多いかと言えば、StringBuilderを使えやisEmpty()を使え系のうっかりミスを除けば、ParameterNumberやCyclomaticComplexityあたりの指摘でしょうか(・ω・)?
まあ、それらの大半は責務の誤りだったり冗長な記述だったりするので、人の目チェックで責務が正しくなるように指摘したり、処理を宣言的な記述になるように指摘すれば解決するといった感じです。
っということで、設定を晒してみたので突っ込み歓迎。
あと、JenkinsについてはJava以外の環境での話題なんかも欲しいですよね(・∀・)