diff --git a/ci/checkstyle/checkstyle.xml b/ci/checkstyle/checkstyle.xml
index 0b73885..08abf89 100644
--- a/ci/checkstyle/checkstyle.xml
+++ b/ci/checkstyle/checkstyle.xml
@@ -48,6 +48,11 @@
       <!-- Checks for placement of the left curly brace ('{'). -->
       <property name="severity" value="error"/>
     </module>
+    <module name="LocalVariableName">
+      <!-- Validates identifiers for local variables against the
+        expression "^[a-z][a-zA-Z0-9]*$". -->
+      <property name="severity" value="error"/>
+    </module>
     <module name="ModifierOrder"/>
     <module name="NoWhitespaceAfter">
       <!-- Checks that there is no whitespace after various unary operators.
diff --git a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTestBase.java b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTestBase.java
index c39e729..f3a4a68 100644
--- a/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTestBase.java
+++ b/common/common-rest/src/test/java/org/apache/servicecomb/common/rest/codec/query/QueryCodecTestBase.java
@@ -42,25 +42,25 @@
   }
 
   void should_decode(String value, Object decodedValue) {
-    HttpServletRequest Request = new AbstractHttpServletRequest() {
+    HttpServletRequest request = new AbstractHttpServletRequest() {
       @Override
       public String getParameter(String name) {
         return value;
       }
     };
 
-    should_decode(Request, decodedValue);
+    should_decode(request, decodedValue);
   }
 
   void should_decode(String[] value, Object decodedValue) {
-    HttpServletRequest Request = new AbstractHttpServletRequest() {
+    HttpServletRequest request = new AbstractHttpServletRequest() {
       @Override
       public String[] getParameterValues(String name) {
         return value;
       }
     };
 
-    should_decode(Request, decodedValue);
+    should_decode(request, decodedValue);
   }
 
   private void should_decode(HttpServletRequest request, Object decodedValue) {
diff --git a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TrustManagerExtTest.java b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TrustManagerExtTest.java
index f4b7d2d..f9acbc0 100644
--- a/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TrustManagerExtTest.java
+++ b/foundations/foundation-ssl/src/test/java/org/apache/servicecomb/foundation/ssl/TrustManagerExtTest.java
@@ -269,9 +269,9 @@
     MyX509Certificate myX509Certificate1 = new MyX509Certificate();
     MyX509Certificate myX509Certificate2 = new MyX509Certificate();
 
-    MyX509Certificate[] MyX509CertificateArray = new MyX509Certificate[2];
-    MyX509CertificateArray[0] = myX509Certificate1;
-    MyX509CertificateArray[1] = myX509Certificate2;
+    MyX509Certificate[] myX509CertificateArray = new MyX509Certificate[2];
+    myX509CertificateArray[0] = myX509Certificate1;
+    myX509CertificateArray[1] = myX509Certificate2;
 
     new Expectations(CertificateUtil.class) {
       {
@@ -289,8 +289,8 @@
     Assertions.assertNotNull(trustManagerExt);
     boolean validAssert = true;
     try {
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks");
-      trustManagerExt.checkServerTrusted(MyX509CertificateArray, "pks");
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks");
+      trustManagerExt.checkServerTrusted(myX509CertificateArray, "pks");
       trustManagerExt.getAcceptedIssuers();
     } catch (Exception e) {
       validAssert = false;
@@ -303,9 +303,9 @@
     MyX509Certificate myX509Certificate1 = new MyX509Certificate();
     MyX509Certificate myX509Certificate2 = new MyX509Certificate();
 
-    MyX509Certificate[] MyX509CertificateArray = new MyX509Certificate[2];
-    MyX509CertificateArray[0] = myX509Certificate1;
-    MyX509CertificateArray[1] = myX509Certificate2;
+    MyX509Certificate[] myX509CertificateArray = new MyX509Certificate[2];
+    myX509CertificateArray[0] = myX509Certificate1;
+    myX509CertificateArray[1] = myX509Certificate2;
 
     new Expectations() {
       {
@@ -324,10 +324,10 @@
     SSLEngine sslengine = null;
     boolean validAssert = true;
     try {
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks", socket);
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks", sslengine);
-      trustManagerExt.checkServerTrusted(MyX509CertificateArray, "pks", socket);
-      trustManagerExt.checkServerTrusted(MyX509CertificateArray, "pks", sslengine);
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks", socket);
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks", sslengine);
+      trustManagerExt.checkServerTrusted(myX509CertificateArray, "pks", socket);
+      trustManagerExt.checkServerTrusted(myX509CertificateArray, "pks", sslengine);
     } catch (Exception e) {
       validAssert = false;
     }
@@ -339,9 +339,9 @@
     MyX509Certificate myX509Certificate1 = new MyX509Certificate();
     MyX509Certificate myX509Certificate2 = new MyX509Certificate();
 
-    MyX509Certificate[] MyX509CertificateArray = new MyX509Certificate[2];
-    MyX509CertificateArray[0] = myX509Certificate1;
-    MyX509CertificateArray[1] = myX509Certificate2;
+    MyX509Certificate[] myX509CertificateArray = new MyX509Certificate[2];
+    myX509CertificateArray[0] = myX509Certificate1;
+    myX509CertificateArray[1] = myX509Certificate2;
 
     new Expectations() {
       {
@@ -357,7 +357,7 @@
     TrustManagerExt trustManagerExt = new TrustManagerExt(myX509ExtendedTrustManager, option, custom);
     boolean validAssert = true;
     try {
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks");
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks");
     } catch (CertificateException e) {
       Assertions.assertEquals("CN does not match IP: e=[10.67.147.114],t=null", e.getMessage());
       validAssert = false;
@@ -366,13 +366,13 @@
   }
 
   @Test
-  public void testCheckClientTrustedExecption(@Mocked CertificateUtil certificateUtil) {
+  public void testCheckClientTrustedException(@Mocked CertificateUtil certificateUtil) {
     MyX509Certificate myX509Certificate1 = new MyX509Certificate();
     MyX509Certificate myX509Certificate2 = new MyX509Certificate();
 
-    MyX509Certificate[] MyX509CertificateArray = new MyX509Certificate[2];
-    MyX509CertificateArray[0] = myX509Certificate1;
-    MyX509CertificateArray[1] = myX509Certificate2;
+    MyX509Certificate[] myX509CertificateArray = new MyX509Certificate[2];
+    myX509CertificateArray[0] = myX509Certificate1;
+    myX509CertificateArray[1] = myX509Certificate2;
 
     new Expectations() {
       {
@@ -398,10 +398,10 @@
     };
     boolean validAssert = true;
     try {
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks", socket);
-      trustManagerExt.checkClientTrusted(MyX509CertificateArray, "pks", sslengine);
-      trustManagerExt.checkServerTrusted(MyX509CertificateArray, "pks", socket);
-      trustManagerExt.checkServerTrusted(MyX509CertificateArray, "pks", sslengine);
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks", socket);
+      trustManagerExt.checkClientTrusted(myX509CertificateArray, "pks", sslengine);
+      trustManagerExt.checkServerTrusted(myX509CertificateArray, "pks", socket);
+      trustManagerExt.checkServerTrusted(myX509CertificateArray, "pks", sslengine);
     } catch (Exception e) {
       Assertions.assertEquals("java.security.cert.CertificateException", e.getClass().getName());
       validAssert = false;
diff --git a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
index fff2346..b81e070 100644
--- a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
+++ b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/refresh/ClassificationAddress.java
@@ -142,24 +142,24 @@
   }
 
   private Map<String, List<String>> generateZoneAndRegionAddress(String key) {
-    InstanceCache KieCaches = instanceCacheManager
+    InstanceCache kieCaches = instanceCacheManager
         .getOrCreate(REGISTRY_APP_ID, key, DefinitionConst.VERSION_RULE_LATEST);
-    List<CacheEndpoint> CacheEndpoints;
+    List<CacheEndpoint> cacheEndpoints;
     if (REGISTRY_SERVICE_NAME.equals(key)) {
-      CacheEndpoints = KieCaches.getOrCreateTransportMap().get(defaultTransport);
-      maxRetryTimes = CacheEndpoints.size();
+      cacheEndpoints = kieCaches.getOrCreateTransportMap().get(defaultTransport);
+      maxRetryTimes = cacheEndpoints.size();
     } else {
-      if (KieCaches.getInstanceMap().size() <= 0) {
+      if (kieCaches.getInstanceMap().size() <= 0) {
         return null;
       }
-      CacheEndpoints = KieCaches.getOrCreateTransportMap().get(defaultTransport);
+      cacheEndpoints = kieCaches.getOrCreateTransportMap().get(defaultTransport);
     }
     Map<String, List<String>> zoneAndRegion = new HashMap<>();
-    dataCenterInfo = findRegion(CacheEndpoints);
+    dataCenterInfo = findRegion(cacheEndpoints);
 
     Set<String> sameZone = new HashSet<>();
     Set<String> sameRegion = new HashSet<>();
-    for (CacheEndpoint cacheEndpoint : CacheEndpoints) {
+    for (CacheEndpoint cacheEndpoint : cacheEndpoints) {
       if (regionAndAZMatch(dataCenterInfo, cacheEndpoint.getInstance())) {
         sameZone.add(cacheEndpoint.getEndpoint());
       } else {
diff --git a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java
index 3e34874..7f17858 100644
--- a/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java
+++ b/service-registry/registry-service-center/src/test/java/org/apache/servicecomb/serviceregistry/client/TestIpPortManager.java
@@ -103,12 +103,11 @@
     // mock endpoint list
     Map<String, List<CacheEndpoint>> addresses = new HashMap<>();
     List<CacheEndpoint> cacheEndpoints = new ArrayList<>();
-    MicroserviceInstance Instance = new MicroserviceInstance();
-    Instance.setDataCenterInfo(null);
-    cacheEndpoints.add(new CacheEndpoint("http://127.0.0.1:9982", Instance));
+    MicroserviceInstance instance = new MicroserviceInstance();
+    instance.setDataCenterInfo(null);
+    cacheEndpoints.add(new CacheEndpoint("http://127.0.0.1:9982", instance));
     addresses.put("rest", cacheEndpoints);
-    ClassificationAddress classificationAddres = new ClassificationAddress(config, cacheManager);
-    manager.classificationAddress = classificationAddres;
+    manager.classificationAddress = new ClassificationAddress(config, cacheManager);
     new Expectations() {
       {
         cacheManager.getOrCreate("default", "SERVICECENTER", "latest");
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/PropertyModelConverterExt.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/PropertyModelConverterExt.java
index 1a876c8..0cf56e4 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/PropertyModelConverterExt.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/extend/PropertyModelConverterExt.java
@@ -51,9 +51,8 @@
       return;
     }
 
-    List<String> _enum = intEnum.stream()
-        .map(value -> value.toString())
-        .collect(Collectors.toList());
-    ((ModelImpl) model).setEnum(_enum);
+    ((ModelImpl) model).setEnum(intEnum.stream()
+        .map(Object::toString)
+        .collect(Collectors.toList()));
   }
 }
