بررسی کیفیت کدهای اندروید

آشنایی با ابزارهای تجزیه و تحلیل کد: چگونه کیفیت کدهای اندروید را بسنجیم؟ - بخش اول


توسعه دهندگان مایل به نوشتن کدهای باکیفیت و عاری از خطا هستند و ابزارهایی در این راستا به کمک آنها می آیند تا از کیفیت کدهای نوشته شده خود مطمئن شوند. در این مطلب قصد داریم به معرفی چندین ابزار کارآمد در این زمینه، شامل CheckStyle ،PMD ،FindBugs و Lint از اندروید استودیو بپردازیم. تمامی این ابزارها رایگان و اپن سورس هستند.

ابزارهای تحلیل کد کدامند؟

این ابزارها جهت پارس کردن و تحلیل کد منبع، بدون اجرای واقعی آنها مورد استفاده قرار میگیرند وهدف آنها یافتن باگ ها و حفره های امنیتی میباشد. ابزاری مانند FindBugs کد را بر اساس یک مجموعه قوانین بررسی میکند و اگر کد شما از این قوانین پیروی نکرده باشد، حاکی از این است که جایی مشکل دارید. در واقع ابزارهای تحلیل کد یک کامپایلر اضافی هستند که باید پیش از کامپایل نهایی به زبان سیستم، اجرا شوند.

در بسیاری از کمپانی های نرم افزاری، پروژه ها علاوه بر بازنگری کد و تست واحد در فرآیند بیلد، باید برخی تست های کد استاتیک را نیز پشت سر بگذرانند. تحلیل استاتیک در برخی از پروژه های اپن سورس نیز در فرآیند بیلد انجام میشود. از این رو یادگیری تحلیل کد گام مهمی در نوشتن کدهای باکیفیت تلقی میشود.

 

ابزارهای تحلیل کد با عنوان تست جعبه سفید نیز شناخته شده اند، اما به هیچ وجه جایگزینی برای تست واحد کدهای سورس نمیباشند.

در این مطلب آموزشی با چندین ابزار محبوب تحلیل کد آشنا خواهید شد که برای اندروید و جاوا در دسترسند. اما اول از همه بهتر است با مزایای استفاده از این ابزارها آشنا شوید:

 

مزایا:

  • در تشخیص باگ های بالقوه که حتی در تست واحد و دستی نیز ممکن است از قلم بیفتد یاری میرسانند
  • قوانین مختص به پروژه را تعریف میکنند. برای مثال تحلیل استاتیک به عنوان بخشی از زنجیره بیلد، به افراد تازه کار کمک میکند تا با استانداردهای کد تیم جدید خود آشنا شده و همه چیز را سریعا یاد بگیرند
  • در بهبود دانش خود درباره یک زبان جدید کمک میکنند
  • کل پروژه شامل فایل هایی را که ممکن است تا به حال نخوانده باشید، اسکن میکنند

 

راه اندازی:

تمامی ابزارهای تحلیل کد معرفی شده در این مطلب، به صورت پلاگین های Gradle نیز در دسترس میباشند، لذا میتوانید برای هریک از آنها تسک های جداگانه Gradle بسازید. در اینجا از یک فایل گرادل که تمامی آنها را در خود جای داده استفاده کرده ایم. اما پیش از آن یک فولدر میسازیم که تمامی فایل ها برای تحلیل کد را در خود جای میدهد.

اندروید استودیو را باز کرده و در داخل ماژول اپلیکیشن (در ویوی Project) یک فولدر جدید به نام code_quality_tools بسازید. این فولدر فایل های XML برای ابزارهای تحلیل کد و یک فایل Gradle، یعنی quality.gradle را در خود جای خواهد داد که برای اجرای تسک های تحلیل استفاده میشود.

 

بررسی کیفیت کدهای اندروید

 

به فایل build.gradle در فولدر ماژول اپلیکیشن مراجعه کرده و خط زیر را به آخر فایل اضافه کنید.

 

apply from: '/code_quality_tools/quality.gradle'

 

در اینجا اسکریپت quality.gradle با یک رفرنس به مکان فایل لوکال بکار رفته است.

 

Checkstyle

Checkstyle با توجه به قوانینی که در فایل XML برای کدنویسی تعیین کرده اید، کد را مورد ارزیابی قرار میدهد.

این ابزار اپن سورس میباشد و علاوه بر این میتوانید بررسی های کاستوم خود را ساخته یا بررسی های کنونی را بر اساس نیازمندی های خود تغییر دهید. برای مثال Checkstyle میتواند نام های ثابت در کلاس ها را چک کند (final ،static یا هردو). اگر نام های ثابت شما از قانون نوشته شدن با حروف بزرگ و جدا کردن کلمات با اندراسکور پیروی نکند، این مشکل در گزارش نهایی ابزار نمایش داده میشود.

 

// incorrect 

private final static String myConstant = "myConstant";

// correct

private final static String MY_CONSTANT = "myConstant";

 

یکپارچه سازی Checkstyle

در ادامه به نحوه یکپارچه سازی Checkstyle را در پروژه اندروید استودیو میپردازیم و از یک مثال عملی کمک میگیریم:

اول از همه ما باید قوانین کدنویسی خود را بسازیم. در داخل فایل checkstyle.xml چندین قانون پیکربندی میسازیم که کد بر اساس آنها سنجیده میشود.

 

<?xml version="1.0"?><!DOCTYPE module PUBLIC

"-//Puppy Crawl//DTD Check Configuration 1.2//EN"

"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">

<module name="FileTabCharacter"/>

<module name="TreeWalker">

<!-- Checks for Naming Conventions -->

<!-- See http://checkstyle.sourceforge.net/config_naming.html -->

<module name="MethodName"/>

<module name="ConstantName"/>

<!-- Checks for Imports -->

<!-- See http://checkstyle.sourceforge.net/config_imports.html-->

<module name="AvoidStarImport"/>

<module name="UnusedImports"/>

<!-- Checks for Size -->

<!-- See http://checkstyle.sourceforge.net/config_sizes -->

<module name="ParameterNumber">

<property name="max" value="6"/>

</module>

<!-- other rules ignored for brevity -->

</module>

 

در کد بالا، قوانینی را که مایلیم Checkstyle کد منبع را بر اساس آنها اعتبارسنجی کند، درج کرده ایم. یکی از قوانین AvoidStarImport که درج عبارت هایی مانند *.java.util در کد را بررسی میکند. (باید صریحا پکیج موردنظر برای درج شدن را مشخص کنید، برای مثال java.util.Observable)

برخی قوانین ویژگی هایی دارند که میتوان مشابه ParameterNumber آنها را تعیین کرد. در ParameterNumber عدد مشخص شده تعداد پارامترهای یک متد یا کانستراکتور را محدود میکند. به طور پیشفرض ویژگی max مقدار 7 را دارد، اما آن را به 6 تغییر داده ایم.

برای انجام این بررسی باید یک تسک گرادل بسازیم، به فایل quality.gradle مراجعه کرده و یک تسک به نام checkstyle بسازید:

 

apply plugin: 'checkstyle'

task checkstyle(type: Checkstyle) {

description 'Check code standard'

group 'verification'

configFile file('./code_quality_tools/checkstyle.xml')

source 'src'

include '**/*.java'

exclude '**/gen/**'

classpath = files()

ignoreFailures = false

}

 

توجه داشته باشید که در کد بالا، اول از همه پلاگین Checkstyle Gradle را بکار برده ایم و آن را همراه با یک توضیح، به گروه گرادل به نام verification که از پیش تعریف شده اضافه کرده ایم.

تسک Checkstyle Gradle شامل ویژگی های کلیدی زیر میباشد:

 

configFile: فایل تنظیمات Checkstyle

IgnoreFailures: مشخص میکند که در صورت خطا فرآیند بیلد ادامه پیدا کند یا خیر

Include: مجموعه ای از الگوهای include

Exclude: مجموعه ای از الگوهای exclude که در این حالت کلاس های تولید شده را اسکن نمیکنیم

 

در نهایت، میتوانید اسکریپت گرادل را با مراجعه به پنجره ابزار گرادل در اندروید استودیو اجرا کنید، گروه verification را باز کرده و برای اجرای تسک، بر روی checkstyle کلیک کنید.

 

بررسی کیفیت کدهای اندروید

 

روش دیگر استفاده از کامند لاین میباشد:

 

gradle checkstyle

 

پس از اینک اجرای تسک به پایان رسید، گزارشی تولید میشود که از طریق app> module> build> reports> checkstyle در دسترس میباشد و میتوانید با باز کردن checkstyle.html، گزارش را مشاهده کنید.

 

بررسی کیفیت کدهای اندروید

 

Checkstyle plugin به صورت رایگان برای اندروید استودیو یا IntelliJ IDEA در دسترس است و این پلاگین فایل های جاوا را به صورت ریل تایم اسکن میکند.

 

PMD

PMD یکی دیگر از ابزارهای تحلیل کد اپن سورس برای تحلیل کد منبع میباشد. این ابزار خطاهای رایج مانند متغیرهای استفاده نشده، بلوک های catch خالی و ساخت آبجکت های غیرضروری را می یابد. PMD مجموعه قوانینی دارد که میتوانید آنها را انتخاب کنید. مورد زیر یکی از قوانینی است که بخشی از Design Rules set میباشد:

simplifyBooleanExpressions: از مقایسه های غیرضروری در عبارت های بولین که یک کد ساده را پیچیده میکنند جلوگیری میکند، برای مثال:

 

public class Bar {

// can be simplified to

// bar = isFoo();

private boolean bar = (isFoo() == true);

public isFoo() { return false;}

}

 

PMD توسط یک فایل pmd.xml پیکربندی میشود که برخی از قوانین پیکربندی برای Android ،Naming و Design را درون آن قرار میدهیم.

 

<?xml version="1.0"?>

<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Android Application Rules"

xmlns="http://pmd.sf.net/ruleset/1.0.0"

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>Custom ruleset for Android application</description>

<exclude-pattern>.*/R.java</exclude-pattern>

<exclude-pattern>.*/gen/.*</exclude-pattern>

<!-- Android --->

<!-- http://pmd.sourceforge.net/pmd-4.3.0/rules/android.html -->

<rule ref="rulesets/java/android.xml"/>

<!-- Design -->

<!-- http://pmd.sourceforge.net/pmd-4.3.0/rules/design.html -->

<rule ref="rulesets/java/design.xml">

<exclude name="UncommentedEmptyMethod"/>

</rule>

<!-- Naming -->

<!-- http://pmd.sourceforge.net/pmd-4.3.0/rules/naming.html -->

<rule ref="rulesets/java/naming.xml/ShortClassName">

<properties>

<property name="minimum" value="3"/>

</properties>

</rule>

<!-- other rules ignored for brevity -->

</ruleset>

 

مشابه کاری که برای Checkstyle انجام دادیم، باید یک تسک PMD Gradle برای اجرا در فایل quality.gradle بسازیم.

 

apply plugin: 'pmd'

task pmd(type: Pmd) {

description 'Run PMD'

group 'verification'

ruleSetFiles = files("./code_quality_tools/pmd.xml")

source 'src'

include '**/*.java'

exclude '**/gen/**'

reports {

xml.enabled = false

html.enabled = true

}

ignoreFailures = false

}

 

PMD به صورت پلاگین گرادل نیز در دسترس است.

 

تسک ساخته شده شامل ویژگی های کلیدی زیر میباشد:

ruleSetFiles: فایل های ست کردن قوانین مورد استفاده

Source: منبع این تسک

Reports: گزارشاتی که باید برای این تسک تولید شوند

 

در نهایت، میتوانید اسکریپت Gradle را با مراجعه به پنجره ابزار گرادل اجرا کنید، فولدر verification را باز کرده و با کلیک بر روی pmd تسک را به اجرا درآورید، میتوانید از کامند لاین نیز برای این کار استفاده کنید:

 

gradle pmd

 

پس از اجرای تسک گزارشی تولید میشود که از مسیر app> module> build> reports> pmd در دسترس است. پلاگین PMD plugin نیز برای InteliiJ یا اندروید استودیو در دسترس بوده و میتوانید آن را دانلود و یکپارچه سازی نمایید.

در مطلب بعدی به معرفی و نحوه استفاده از FindBugs و Lint خواهیم پرداخت، با ما همراه باشید.

 

https://code.tutsplus.com برگرفته از

اینها را هم بخوانید