SLOCCOUNT(1) SLOCCount SLOCCOUNT(1)

sloccount - شمارش خطوط فیزیکی کد مبدأ (SLOC)

sloccount [--version] [--cached] [--append] [ --datadir directory ] [--follow] [--duplicates] [--crossdups] [--autogen] [--multiproject] [--filecount] [--wide] [--details] [ --effort F E ] [ --schedule F E ] [ --personcost cost ] [ --overhead overhead ] [ --addlang language ] [ --addlangall ] [--] directories

دستور sloccount تعداد خطوط فیزیکی کد مبدأ (SLOC) موجود در زیرمجموعه‌های دایرکتوری‌های مشخص‌شده را شمارش می‌کند. این ابزار به‌طور خودکار تشخیص می‌دهد که کدام فایل‌ها فایل‌های کد مبدأ هستند و زبان رایانه‌ای به‌کاررفته در هر فایل را نیز به‌صورت خودکار تعیین می‌کند. به‌طور پیش‌فرض، نتایج SLOC را خلاصه کرده و برآوردهای گوناگونی (مانند میزان تلاش و هزینه برای توسعه) ارائه می‌دهد، اما خروجی آن را می‌توان با گزینه‌های مختلف کنترل کرد.

اگر به sloccount فهرستی از دو یا چند دایرکتوری بدهید، شمارش‌ها بر اساس آن فهرست تفکیک خواهند شد. یک محدودیت مهم وجود دارد: نام‌های پایهٔ (basenames) دایرکتوری‌های ارائه‌شده به‌عنوان پارامتر باید با یکدیگر متفاوت باشند، زیرا از آن نام‌ها برای گروه‌بندی اطلاعات خلاصه استفاده می‌شود. بنابراین، نمی‌توانید دستور “sloccount /usr/src/hello /usr/local/src/hello” را اجرا کنید. این محدودیت فقط بر پارامترهای sloccount اعمال می‌شود - زیردایرکتوری‌های مشتق‌شده از دایرکتوری‌های بالادست می‌توانند نام پایهٔ یکسانی داشته باشند.

اگر به sloccount تنها یک دایرکتوری منفرد بدهید، تلاش می‌کند تا به‌طور خودکار تفکیکی منطقی برای مقاصد گزارش‌دهی بیابد (تا گزارشی سودمند تولید کند). در این حالت، اگر دایرکتوری دست‌کم دو زیردایرکتوری داشته باشد، از آن زیردایرکتوری‌ها برای تفکیک گزارش استفاده خواهد شد. اگر این تک دایرکتوری علاوه بر دایرکتوری‌ها شامل فایل‌ها نیز باشد (یا اگر چند فایل را به‌عنوان پارامتر به sloccount بدهید)، آن فایل‌ها به دایرکتوری “top_dir” اختصاص داده می‌شوند تا بتوانید آن‌ها را از سایر محتویات تشخیص دهید. در نهایت، اگر زیردایرکتوری‌ای به نام “src” وجود داشته باشد، آن زیردایرکتوری مجدداً تفکیک می‌شود و پیشوند “src_” به تمام زیردایرکتوری‌های بعدی آن اضافه می‌شود. بنابراین، اگر دایرکتوری “X” دارای زیردایرکتوری “src” باشد که خود شامل زیردایرکتوری “modules” است، ابزار sloccount یک شمارش جداگانه برای “src_modules” گزارش خواهد کرد.

ابزار sloccount معمولاً تمام زیرمجموعه‌ها و فرزندان این دایرکتوری‌ها را در نظر می‌گیرد، اگرچه مگر در صورت تعیین خلاف آن، پیوندهای نمادین (symbolic links) را نادیده می‌گیرد.

دستور sloccount پیشانهٔ (front-end) معمول مجموعه ابزارهایی به نام “SLOCCount” است. توجه داشته باشید که نام کل بسته با حروف بزرگ نوشته می‌شود، در حالی که نام این برنامهٔ پیشانه با حروف کوچک است.

ابزار sloccount معمولاً برآوردهایی از زمان‌بندی، میزان تلاش و هزینه گزارش می‌دهد، و برای پروژه‌های منفرد، میانگین تعداد توسعه‌دهندگان فعال را نیز تخمین می‌زند. این مقادیر صرفاً برآورد هستند و وحی مُنزل نیستند؛ می‌توانید پارامترهای استفاده‌شده را برای بهبود و دقت بیشتر برآوردها تغییر دهید.

شماره نسخهٔ SLOCCount را گزارش کرده و بلافاصله خارج می‌شود. این گزینه را نمی‌توان به‌طور مفید با هیچ گزینهٔ دیگری ترکیب کرد.
محاسبهٔ مجدد انجام نده؛ در عوض، از نتایج کَش‌شده از اجرای قبلی استفاده کن. بدون گزینهٔ --cached یا --append، ابزار sloccount به‌طور خودکار دایرکتوری داده را حذف کرده و مجدداً آن را می‌سازد.
محاسبات قبلی را از دایرکتوری داده حذف نکن؛ در عوض، این تحلیل را به محتویات فعلی دایرکتوری داده اضافه کن.
داده‌های کَش‌شده را در دایرکتوری دادهٔ مشخص‌شده ذخیره کرده یا از آن استفاده کن؛ مقدار پیش‌فرض “~/.slocdata” است.
پیوندهای نمادین را دنبال کن.
تمام موارد تکراری را شمارش کن. به‌طور معمول، اگر فایل‌ها محتوای یکسانی داشته باشند (که با استفاده از مقادیر درهم‌سازی MD5 مشخص می‌شود)، تنها یکی از آن‌ها شمارش می‌شود.
موارد تکراری را در صورتی که در بخش‌های متفاوتی از تفکیک رخ دهند شمارش کن. بنابراین، اگر دایرکتوری بالادست شامل پروژه‌های مختلف فراوانی است، و می‌خواهید فایل‌های تکراری در پروژه‌های مختلف در هر پروژه محاسبه شوند، این گزینه را انتخاب کنید.
فایل‌های کد مبدأیی را که به نظر می‌رسد به‌طور خودکار تولید شده‌اند شمارش کن. این فایل‌ها معمولاً نادیده گرفته می‌شوند.
دایرکتوری‌های مختلف بیانگر پروژه‌های متفاوتی هستند؛ در غیر این صورت، فرض می‌شود تمام کدهای مبدأ متعلق به یک پروژهٔ واحد هستند. این گزینه تعداد کل فایل‌ها یا مقادیر SLOC را تغییر نمی‌دهد، اما بر برآوردهای تلاش و زمان‌بندی اثر می‌گذارد. با ارائهٔ این گزینه، تلاش به‌طور جداگانه برای هر پروژه محاسبه می‌شود (و سپس با هم جمع می‌شود)، و زمان‌بندی برابر با برآورد زمان‌بندی بزرگ‌ترین پروژه خواهد بود.
نمایش تعداد فایل‌ها به جای SLOC.
نمایش در قالب “عریض” (جداسازی‌شده با تب).
نمایش جزئیات، یعنی نتایج به ازای هر فایل کد مبدأ.
تغییر ضریب و توان برای مدل تلاش. میزان تلاش (بر حسب نفر-ماه) به‌صورت F*(SLOC/1000)^E محاسبه می‌شود.
تغییر ضریب و توان برای مدل زمان‌بندی. زمان‌بندی (بر حسب ماه) به‌صورت F*(effort)^E محاسبه می‌شود.
تغییر میانگین حقوق سالانه به cost.
تغییر مقدار هزینهٔ بالاسری به overhead. هزینهٔ تخمینی به‌صورت effort * personcost * overhead محاسبه می‌شود.
افزودن زبانی که به‌طور پیش‌فرض به‌عنوان یک “زبان” برای گزارش‌دهی شناخته نمی‌شود. در حال حاضر تنها مقادیر مجاز برای language عبارت‌اند از “makefile”، “sql” و “html”. این فایل‌ها معمولاً در شمارش‌های SLOC گنجانده نمی‌شوند، اگرچه مقدار SLOC آن‌ها به‌طور درونی محاسبه شده و در تعداد فایل‌ها نمایش داده می‌شوند. اگر می‌خواهید بیش از یک زبان از این دست را بگنجانید، این کار را با ارسال چندبارهٔ --addlang انجام دهید، مانند: --addlang makefile --addlang sql.
افزودن تمام زبان‌هایی که به‌طور معمول در گزارش‌های نهایی لحاظ نمی‌شوند.

همانند بسیاری از برنامه‌های دیگری که از گزینه‌های مشابه یونیکس استفاده می‌کنند، دایرکتوری‌هایی که نام آن‌ها با خط تیره (“-”) آغاز می‌شود ممکن است به‌اشتباه به‌عنوان گزینه تفسیر شوند. اگر ممکن است دایرکتوری‌های مورد تجزیه‌وتحلیل با خط تیره شروع شوند، پیش از فهرست کردن دایرکتوری‌ها، از خط تیرهٔ دوتایی (“--”) برای مشخص کردن پایان فهرست گزینه‌ها استفاده کنید.

نام فایل‌هایی که خط جدید (newline) در آن‌ها قرار دارد (در دایرکتوری‌ها یا زیرمجموعه‌های آن‌ها) به‌درستی مدیریت نخواهند شد؛ آن‌ها در جاهایی که خط جدید درج شده است به‌صورت نام فایل‌های مجزا تفسیر می‌شوند. یک مهاجم می‌تواند با ایجاد نام فایل‌هایی به شکل /normal/directory ... NEWLINE/dev/zero مانع از کارکرد sloccount شود. چنین نام فایل‌هایی در کد مبدأ بسیار نادر هستند زیرا کار کردن با آن‌ها در سایر ابزارها نیز دردسرساز است. نسخه‌های آیندهٔ sloccount ممکن است برای حل این مشکل، در ساختار درونی خود از نام فایل‌های جداشده با NUL (مانند دستور -print0 در GNU find) استفاده کنند.

زبان‌های بسیار دیگری نیز وجود دارند که هنوز توسط SLOCCount پشتیبانی نمی‌شوند.

ابزار SLOCCount تنها خطوط فیزیکی کد مبدأ را گزارش می‌کند. بسیار سودمند خواهد بود اگر بتواند خطوط منطقی کد و شاید سایر معیارهای متداول مانند معیارهای پیچیدگی مک‌کیب (McCabe) و چگالی پیچیدگی (پیچیدگی/SLOC برای هر تابع یا رویه) را نیز گزارش کند.

به وب‌سایت SLOCCount در http://www.dwheeler.com/sloccount مراجعه کنید. توجه داشته باشید که مستندات مفصل‌تر هم در وب‌سایت و هم همراه با بستهٔ SLOCCount در دسترس است.

David A. Wheeler (dwheeler@dwheeler.com).

31 July 2004 SLOCCount