أداة مشابهة لـ cloc و sloccount و tokei. لحساب أسطر التعليمات البرمجية، والأسطر الفارغة، وأسطر التعليق، والأسطر المادية للتعليمات البرمجية المصدر في العديد من لغات البرمجة.
الهدف هو أن نكون أسرع عداد كود ممكن، ولكن أيضًا إجراء حساب COCOMO مثل sloccount، وتقدير تعقيد الكود المماثل للآلات الحاسبة المعقدة السيكلوماتيكية وإنتاج سطور فريدة من التعليمات البرمجية أو مقاييس الجفاف. باختصار أداة واحدة للحكم عليهم جميعا.
كما أن لها اسمًا قصيرًا جدًا يسهل كتابته scc
.
إذا كنت لا تحب sloc cloc وcode فلا تتردد في استخدام الاسم Succinct Code Counter
.
مرخصة بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
يدعم
ثَبَّتَ
خلفية
يقذف
الاستخدام
تقديرات التعقيد
الأسطر الفريدة من التعليمات البرمجية (ULOC)
كوكومو
تنسيقات الإخراج
أداء
تطوير
إضافة/تعديل اللغات
مشاكل
الشارات (تجريبية)
دعم اللغة
استخدام scc
تجاريا؟ إذا كنت تريد دعمًا ذا أولوية لـ scc
فيمكنك شراء https://boyter.gumroad.com/l/kgenuv لمدة عام، مما يؤهلك للحصول على أولوية الدعم المباشر عبر البريد الإلكتروني من المطور.
يمكنك تثبيت scc
باستخدام سلسلة أدوات go القياسية.
لتثبيت أحدث إصدار ثابت من scc:
go install github.com/boyter/scc/v3@latest
لتثبيت نسخة التطوير:
go install github.com/boyter/scc/v3@master
لاحظ أن scc
يحتاج إلى الإصدار>= 1.22.
التثبيت المفاجئ موجود بفضل ريكاردو.
$ sudo snap install scc
ملحوظة: لا يمكن تشغيل تطبيقات Snap المثبتة خارج /home
https://askubuntu.com/questions/930437/permission-denied-error-when-running-apps-installed-as-snap-packages-ubuntu-17 لذلك قد تواجه مشكلات إذا كنت تستخدم snap وتحاول التشغيل خارج هذا الدليل.
أو إذا كان برنامج Homebrew مثبتًا لديك
$ brew install scc
على نظام التشغيل macOS، يمكنك أيضًا التثبيت عبر MacPorts
$ sudo port install scc
أو إذا كنت تستخدم Scoop على نظام التشغيل Windows
$ scoop install scc
أو إذا كنت تستخدم Chocolatey على نظام التشغيل Windows
$ choco install scc
أو إذا كنت تستخدم WinGet على نظام التشغيل Windows
winget install --id benboyter.scc --source winget
في FreeBSD، يتوفر scc كحزمة
$ pkg install scc
أو، إذا كنت تفضل البناء من المصدر، يمكنك استخدام شجرة المنافذ
$ cd /usr/ports/devel/scc && make install clean
انتقل إلى الدليل الذي تريد تشغيل scc منه.
قم بتشغيل الأمر أدناه لتشغيل أحدث إصدار من scc على دليل العمل الحالي لديك:
docker run --rm -it -v "$PWD:/pwd" ghcr.io/lhoupert/scc:master scc /pwd
تتوفر الثنائيات لأنظمة Windows وGNU/Linux وmacOS لكل من الأجهزة i386 وx86_64 من صفحة الإصدارات.
https://about.gitlab.com/blog/2023/02/15/code-counting-in-gitlab/
إذا كنت ترغب في المساعدة في إضافة scc
إلى apt/chocolatey/etc... يرجى إرسال بيان علاقات عامة أو على الأقل إثارة مشكلة تتعلق بالتعليمات.
اقرأ كل شيء عن كيفية ظهوره جنبًا إلى جنب مع معايير الأداء،
https://boyter.org/posts/sloc-cloc-code/
https://boyter.org/posts/why-count-lines-of-code/
https://boyter.org/posts/sloc-cloc-code-revisited/
https://boyter.org/posts/sloc-cloc-code-performance/
https://boyter.org/posts/sloc-cloc-code-performance-update/
بعض المراجعات لـ scc
https://nickmchardy.com/2018/10/counting-lines-of-code-in-koi-cms.html
https://www.feliciano.tech/blog/determine-source-code-size-and-complexity-with-scc/
https://metaredux.com/posts/2019/12/13/counting-lines.html
محاضرة ألقيت في مؤتمر GopherCon AU الأول حول scc
(اضغط على S لرؤية ملاحظات المتحدث)
https://boyter.org/static/gophercon-syd-presentation/
https://www.youtube.com/watch?v=jd-sjoy3GZo
لمعرفة الأداء، راجع قسم الأداء
مشاريع أخرى مماثلة،
SLOCC قم بحساب عداد sloc الأصلي
كلوك، مستوحاة من SLOCCcount؛ تم تنفيذها في بيرل لسهولة النقل
gocloc عداد sloc في Go مستوحى من tokei
تنفيذ loc Rust مشابه لـ tokei ولكنه أسرع في كثير من الأحيان
تم كتابة تنفيذ loccount Go وصيانته بواسطة ESR
عداد ATS متعدد اللغات
tokei سريع ودقيق ومكتوب بالصدأ
عداد كود sloc Coffeescript
stto عداد كود Go الجديد مع التركيز على الأداء
قراءة مثيرة للاهتمام حول مشاريع عد الأكواد الأخرى tokei وloc وpolyglot وloccount
https://www.reddit.com/r/rust/comments/59bm3t/a_fast_cloc_replacement_in_rust/
https://www.reddit.com/r/rust/comments/82k9iy/loc_count_lines_of_code_quickly/
http://blog.vmchale.com/article/polyglot-comparisons
http://esr.ibiblio.org/?p=8270
مزيد من القراءة حول معالجة الملفات على أداء القرص
https://blog.burntsushi.net/ripgrep/
استخدام scc
لمعالجة 40 تيرابايت من الملفات من GitHub/Bitbucket/GitLab
https://boyter.org/posts/an-informal-survey-of-10-million-github-bitbucket-gitlab-projects/
لماذا استخدام scc
؟
إنه سريع جدًا ويصبح أسرع كلما زاد عدد وحدات المعالجة المركزية التي تستخدمها
دقيق
يعمل بشكل جيد للغاية عبر منصات متعددة دون تباطؤ (Windows وLinux وmacOS)
دعم لغة كبير
يمكن تجاهل الملفات المكررة
لديه تقديرات التعقيد
أنت بحاجة إلى معرفة الفرق بين Coq وVerilog في نفس الدليل
دعم إخراج cloc yaml لذا من المحتمل أن يكون هناك انخفاض في الاستبدال لبعض المستخدمين
يمكن تحديد أو تجاهل الملفات المصغرة
قادرة على التعرف على العديد من #! ملفات متقدمة! #115
يمكن تجاهل الملفات الكبيرة بالأسطر أو البايتات
يمكن حساب ULOC أو الأسطر الفريدة من التعليمات البرمجية حسب الملف أو اللغة أو المشروع
يدعم تنسيقات إخراج متعددة للتكامل، CSV، SQL، JSON، HTML والمزيد
لماذا لا تستخدم scc
؟
أنت لا تحب الذهاب لسبب ما
لا يمكن حساب مصدر D مع تعليقات متعددة الأسطر المتداخلة المختلفة بشكل صحيح رقم 27
هناك بعض الاختلافات المهمة بين scc
والأدوات الأخرى الموجودة هناك. فيما يلي بعض الأشياء المهمة التي يجب عليك مراعاتها.
يتم احتساب الأسطر الفارغة داخل التعليقات كتعليقات. على الرغم من أن السطر فارغ من الناحية الفنية، فقد تم اتخاذ القرار بأنه مرة واحدة في التعليق، يجب اعتبار كل شيء هناك تعليقًا حتى يتم إنهاء هذا التعليق. على هذا النحو ما يلي،
/* blank lines follow */
سيتم احتسابها على أنها 4 أسطر من التعليقات. يكون هذا ملحوظًا عند مقارنة مخرجات scc بالأدوات الأخرى الموجودة في المستودعات الكبيرة.
scc
قادر على حساب السلاسل الحرفية بشكل صحيح. على سبيل المثال في C# ما يلي،
private const string BasePath = @"a:"; // The below is returned to the user as a version private const string Version = "1.0.0";
بسبب البادئة @، تنتهي هذه السلسلة عند اللاحقة " عن طريق تجاهل حرف الهروب وبالتالي يجب احتسابها كسطرين من التعليمات البرمجية وتعليق واحد. بعض الأدوات غير قادرة على التعامل مع هذا وبدلاً من ذلك يتم العد حتى "1.0.0" كسلسلة يمكن أن تتسبب في احتساب التعليق الأوسط كرمز بدلاً من تعليق.
سيخبرك scc
أيضًا بعدد البايتات التي تمت معالجتها (بالنسبة لمعظم تنسيقات الإخراج)، مما يسمح لك بتقدير تكلفة تشغيل بعض أدوات التحليل الثابتة.
تم تصميم استخدام سطر الأوامر لـ scc
ليكون بسيطًا قدر الإمكان. يمكن العثور على التفاصيل الكاملة في scc --help
أو scc -h
. لاحظ أن ما يلي يعكس حالة الإصدار الرئيسي وليس الإصدار، حيث أن الميزات المذكورة أدناه قد تكون مفقودة من التثبيت الخاص بك.
Sloc, Cloc and Code. Count lines of code in a directory with complexity estimation. Version 3.5.0 (beta) Ben Boyter+ Contributors Usage: scc [flags] [files or directories] Flags: --avg-wage int average wage value used for basic COCOMO calculation (default 56286) --binary disable binary file detection --by-file display output for every file -m, --character calculate max and mean characters per line --ci enable CI output settings where stdout is ASCII --cocomo-project-type string change COCOMO model type [organic, semi-detached, embedded, "custom,1,1,1,1"] (default "organic") --count-as string count extension as language [e.g. jsp:htm,chead:"C Header" maps extension jsp to html and chead to C Header] --count-ignore set to allow .gitignore and .ignore files to be counted --currency-symbol string set currency symbol (default "$") --debug enable debug output --directory-walker-job-workers int controls the maximum number of workers which will walk the directory tree (default 8) -a, --dryness calculate the DRYness of the project (implies --uloc) --eaf float the effort adjustment factor derived from the cost drivers (1.0 if rated nominal) (default 1) --exclude-dir strings directories to exclude (default [.git,.hg,.svn]) -x, --exclude-ext strings ignore file extensions (overrides include-ext) [comma separated list: e.g. go,java,js] -n, --exclude-file strings ignore files with matching names (default [package-lock.json,Cargo.lock,yarn.lock,pubspec.lock,Podfile.lock,pnpm-lock.yaml]) --file-gc-count int number of files to parse before turning the GC on (default 10000) --file-list-queue-size int the size of the queue of files found and ready to be read into memory (default 8) --file-process-job-workers int number of goroutine workers that process files collecting stats (default 8) --file-summary-job-queue-size int the size of the queue used to hold processed file statistics before formatting (default 8) -f, --format string set output format [tabular, wide, json, json2, csv, csv-stream, cloc-yaml, html, html-table, sql, sql-insert, openmetrics] (default "tabular") --format-multi string have multiple format output overriding --format [e.g. tabular:stdout,csv:file.csv,json:file.json] --gen identify generated files --generated-markers strings string markers in head of generated files (default [do not edit, ]) -h, --help help for scc -i, --include-ext strings limit to file extensions [comma separated list: e.g. go,java,js] --include-symlinks if set will count symlink files -l, --languages print supported languages and extensions --large-byte-count int number of bytes a file can contain before being removed from output (default 1000000) --large-line-count int number of lines a file can contain before being removed from output (default 40000) --min identify minified files -z, --min-gen identify minified or generated files --min-gen-line-length int number of bytes per average line for file to be considered minified or generated (default 255) --no-cocomo remove COCOMO calculation output -c, --no-complexity skip calculation of code complexity -d, --no-duplicates remove duplicate files from stats and output --no-gen ignore generated files in output (implies --gen) --no-gitignore disables .gitignore file logic --no-gitmodule disables .gitmodules file logic --no-hborder remove horizontal borders between sections --no-ignore disables .ignore file logic --no-large ignore files over certain byte and line size set by large-line-count and large-byte-count --no-min ignore minified files in output (implies --min) --no-min-gen ignore minified or generated files in output (implies --min-gen) --no-scc-ignore disables .sccignore file logic --no-size remove size calculation output -M, --not-match stringArray ignore files and directories matching regular expression -o, --output string output filename (default stdout) --overhead float set the overhead multiplier for corporate overhead (facilities, equipment, accounting, etc.) (default 2.4) -p, --percent include percentage values in output --remap-all string inspect every file and remap by checking for a string and remapping the language [e.g. "-*- C++ -*-":"C Header"] --remap-unknown string inspect files of unknown type and remap by checking for a string and remapping the language [e.g. "-*- C++ -*-":"C Header"] --size-unit string set size unit [si, binary, mixed, xkcd-kb, xkcd-kelly, xkcd-imaginary, xkcd-intel, xkcd-drive, xkcd-bakers] (default "si") --sloccount-format print a more SLOCCount like COCOMO calculation -s, --sort string column to sort by [files, name, lines, blanks, code, comments, complexity] (default "files") --sql-project string use supplied name as the project identifier for the current run. Only valid with the --format sql or sql-insert option -t, --trace enable trace output (not recommended when processing multiple files) -u, --uloc calculate the number of unique lines of code (ULOC) for the project -v, --verbose verbose output --version version for scc -w, --wide wider output with additional statistics (implies --complexity)
يجب أن يبدو الإخراج كما هو موضح أدناه لمشروع redis
$ scc redis ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── C 296 180267 20367 31679 128221 32548 C Header 215 32362 3624 6968 21770 1636 TCL 143 28959 3130 1784 24045 2340 Shell 44 1658 222 326 1110 187 Autoconf 22 10871 1038 1326 8507 953 Lua 20 525 68 70 387 65 Markdown 16 2595 683 0 1912 0 Makefile 11 1363 262 125 976 59 Ruby 10 795 78 78 639 116 gitignore 10 162 16 0 146 0 YAML 6 711 46 8 657 0 HTML 5 9658 2928 12 6718 0 C++ 4 286 48 14 224 31 License 4 100 20 0 80 0 Plain Text 3 185 26 0 159 0 CMake 2 214 43 3 168 4 CSS 2 107 16 0 91 0 Python 2 219 12 6 201 34 Systemd 2 80 6 0 74 0 BASH 1 118 14 5 99 31 Batch 1 28 2 0 26 3 C++ Header 1 9 1 3 5 0 Extensible Styleshe… 1 10 0 0 10 0 Smarty Template 1 44 1 0 43 5 m4 1 562 116 53 393 0 ─────────────────────────────────────────────────────────────────────────────── Total 823 271888 32767 42460 196661 38012 ─────────────────────────────────────────────────────────────────────────────── Estimated Cost to Develop (organic) $6,918,301 Estimated Schedule Effort (organic) 28.682292 months Estimated People Required (organic) 21.428982 ─────────────────────────────────────────────────────────────────────────────── Processed 9425137 bytes, 9.425 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
لاحظ أنه ليس عليك تحديد الدليل الذي تريد تشغيله عليه. سيفترض تشغيل scc
أنك تريد التشغيل على الدليل الحالي.
يمكنك أيضًا تشغيل ملفات أو أدلة متعددة scc directory1 directory2 file1 file2
مع تجميع النتائج في الإخراج.
نظرًا لأن scc
يكتب إلى الإخراج القياسي، فهناك العديد من الطرق لمشاركة النتائج بسهولة. على سبيل المثال، يؤدي استخدام netcat وأحد سلاسل اللصق العديدة إلى الحصول على عنوان URL عام:
$ scc | nc paste.c-net.org 9999 https://paste.c-net.org/Example
يدعم scc
في الغالب ملفات .ignore الموجودة داخل الأدلة التي يقوم بمسحها. وهذا مشابه لكيفية عمل ripgrep وag وtokei. ملفات .ignore هي 100% نفس ملفات .gitignore التي لها نفس البنية، وبالتالي فإن scc
سوف يتجاهل الملفات والأدلة المدرجة فيها. يمكنك إضافة ملفات .ignore لتجاهل أشياء مثل التبعية الموردة التي تم التحقق منها في الملفات وما شابه. تسمح لك الفكرة بإضافة ملف أو مجلد إلى git وتجاهله في العد.
كما أنه يدعم ملف التجاهل الخاص به .sccignore
إذا كنت تريد أن يتجاهل scc
الأشياء بينما يدعمها ripgrep وag وtokei وغيرهم.
يُستخدم داخل Intel Nemu Hypervisor لتتبع تغييرات التعليمات البرمجية بين المراجعات https://github.com/intel/nemu/blob/topic/virt-x86/tools/cloc-change.sh#L9 يبدو أنه يُستخدم أيضًا داخل كل من http:/ /codescoop.com/ https://pinpoint.com/ https://github.com/chaoss/grimoirelab-graal
يتم استخدامه أيضًا لحساب أنواع الأكواد والتخمين في https://searchcode.com/ مما يجعله واحدًا من أكثر عدادات الأكواد التي يتم تشغيلها بشكل متكرر في العالم.
يمكنك أيضًا ربط scc بخط أنابيب gitlab الخاص بك https://gitlab.com/guided-explorations/ci-cd-plugin-extensions/ci-cd-plugin-extension-scc
يستخدم أيضًا بواسطة CodeQL #317 وScaleway https://twitter.com/Scaleway/status/1488087029476995074?s=20&t=N2-z6O-ISDdDzULg4o4uVQ
https://docs.linuxfoundation.org/lfx/insights/v3-beta-version-current/getting-started/landing-page/cocomo-cost-estimation-simplified
https://openems.io/
يستخدم scc
آلة حالة صغيرة لتحديد حالة الكود عندما يصل إلى السطر الجديد n
. وعلى هذا النحو فهو واعي وقادر على العد
تعليقات سطر واحد
تعليقات متعددة الخطوط
سلاسل
سلاسل متعددة الخطوط
خطوط فارغة
ولهذا السبب، فهو قادر على التحديد الدقيق لما إذا كان التعليق موجودًا في سلسلة أم أنه تعليق بالفعل.
كما أنه يحاول حساب مدى تعقيد التعليمات البرمجية. يتم ذلك عن طريق التحقق من العمليات المتفرعة في الكود. على سبيل المثال، كل مما يلي for if switch while else || && != ==
إذا تمت مواجهته في Java فسيؤدي ذلك إلى زيادة تعقيد الملفات بمقدار واحد.
لنأخذ دقيقة لمناقشة تقدير التعقيد نفسه.
إن تقدير التعقيد هو في الواقع مجرد رقم لا يمكن مقارنته إلا بالملفات الموجودة بنفس اللغة. لا ينبغي استخدامه لمقارنة اللغات مباشرة دون ترجيحها. والسبب في ذلك هو أنه يتم حسابه من خلال البحث عن عبارات التفرع والحلقة في الكود وزيادة العداد لهذا الملف.
نظرًا لأن بعض اللغات لا تحتوي على حلقات وبدلاً من ذلك تستخدم التكرار، فيمكن أن يكون لها عدد تعقيد أقل. هل هذا يعني أنها أقل تعقيدا؟ ربما لا، لكن الأداة لا تستطيع رؤية ذلك لأنها لا تقوم ببناء AST للكود لأنها تقوم فقط بالمسح من خلاله.
بشكل عام، على الرغم من أن التعقيد موجود للمساعدة في التقدير بين المشاريع المكتوبة بنفس اللغة، أو للعثور على الملف الأكثر تعقيدًا في scc --by-file -s complexity
والذي يمكن أن يكون مفيدًا عندما تقوم بتقدير مدى صعوبة شيء ما صيانتها، أو عند البحث عن تلك الملفات التي من المحتمل أن يتم إعادة هيكلتها.
أما كيف يعمل.
إنه تعريفي الخاص، ولكنه يحاول أن يكون تقريبًا للتعقيد السيكلوماتي https://en.wikipedia.org/wiki/Cyclomatic_complexity على الرغم من أنه يتم ذلك على مستوى الملف فقط.
السبب في كونه تقريبيًا هو أنه يتم حسابه مجانًا تقريبًا من وجهة نظر وحدة المعالجة المركزية (نظرًا لأنه بحث رخيص عند العد)، في حين أن عدد التعقيد الدوري الحقيقي سيحتاج إلى تحليل الكود. إنه يعطي تخمينًا معقولًا في الممارسة العملية حتى لو فشل في تحديد الطرق العودية. لم يكن الهدف أبدًا أن يكون الأمر دقيقًا.
باختصار، عندما تبحث scc في ما حددته كرمز، إذا لاحظت ما هي عادةً شروط فرعية، فسوف تقوم بزيادة العداد.
يتم تجميع الشروط التي يبحث عنها في الكود ويمكنك الحصول على فكرة عنها من خلال النظر إلى JSON داخل المستودع. راجع https://github.com/boyter/scc/blob/master/languages.json#L3869 للحصول على مثال لما يبحث عنه لملف Java.
تحدث الزيادة لكل شرط من الشروط المطابقة وتنتج الرقم الذي تراه.
يرمز ULOC إلى الخطوط الفريدة من التعليمات البرمجية ويمثل الخطوط الفريدة عبر اللغات والملفات والمشروع نفسه. هذه الفكرة مأخوذة من https://cmcenroe.me/2018/12/14/uloc.html حيث يتم تقديم الحساب باستخدام أدوات Unix القياسية sort -u *.h *.c | wc -l
. هذا المقياس موجود للمساعدة في تقدير مدى التعقيد داخل المشروع. نقلا عن المصدر
في رأيي، يجب أن يكون العدد الناتج عن ذلك تقديرًا أفضل لمدى تعقيد المشروع. بالمقارنة مع SLOC، لا يتم خصم الأسطر الفارغة فحسب، بل يتم أيضًا خصم الأسطر ذات الأقواس القريبة والرموز المتكررة الأخرى مثل التضمينات الشائعة. من ناحية أخرى، يقوم ULOC بإحصاء التعليقات، التي تتطلب نفس القدر من الصيانة مثل الكود المحيط بها، مع تجنب تضخيم النتيجة برؤوس الترخيص التي تظهر في كل ملف، على سبيل المثال.
يمكنك الحصول على ULOC عن طريق توفير الوسيطة -u
أو --uloc
إلى scc
.
يحتوي على DRYness %
مترية مقابلة وهي النسبة المئوية لـ ULOC إلى CLOC أو DRYness = ULOC / SLOC
. كلما زاد الرقم كلما زاد الجفاف (لا تكرر نفسك) يمكن النظر في المشروع. بشكل عام، القيمة الأعلى هنا هي الأفضل لأنها تشير إلى تعليمات برمجية أقل تكرارًا. تم أخذ مقياس الجفاف من تعليق بواسطة minimax https://lobste.rs/s/has9r7/uloc_unique_lines_code
للحصول على مقياس الجفاف، يمكنك استخدام الوسيط -a
أو --dryness
إلى scc
، والذي سيؤدي ضمنيًا إلى تعيين --uloc
.
لاحظ أن هناك عقوبة على الأداء عند حساب مقاييس ULOC والتي يمكن أن تضاعف وقت التشغيل.
عند تشغيل حسابات uloc وDRYness مقابل كود C، يؤدي استنساخ redis إلى إنتاج مخرجات على النحو التالي.
$ scc -a -i c redis ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── C 419 241293 27309 41292 172692 40849 (ULOC) 133535 ─────────────────────────────────────────────────────────────────────────────── Total 419 241293 27309 41292 172692 40849 ─────────────────────────────────────────────────────────────────────────────── Unique Lines of Code (ULOC) 133535 DRYness % 0.55 ─────────────────────────────────────────────────────────────────────────────── Estimated Cost to Develop (organic) $6,035,748 Estimated Schedule Effort (organic) 27.23 months Estimated People Required (organic) 19.69 ─────────────────────────────────────────────────────────────────────────────── Processed 8407821 bytes, 8.408 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
يمكن العثور على مزيد من القراءة حول حساب ULOC على https://boyter.org/posts/sloc-cloc-code-new-metic-uloc/
يمكن تكوين إحصائيات COCOMO المعروضة أسفل أي تشغيل لسطر الأوامر حسب الحاجة.
Estimated Cost to Develop (organic) $664,081 Estimated Schedule Effort (organic) 11.772217 months Estimated People Required (organic) 5.011633
لتغيير معلمات COCOMO، يمكنك إما استخدام أحد نماذج COCOMO الافتراضية.
scc --cocomo-project-type organic scc --cocomo-project-type semi-detached scc --cocomo-project-type embedded
يمكنك أيضًا توفير المعلمات الخاصة بك إذا كنت معتادًا على COCOMO على النحو التالي،
scc --cocomo-project-type "custom,1,1,1,1"
انظر أدناه للحصول على تفاصيل حول كيفية اختيار النماذج والمعلمات التي تستخدمها.
عضوي – يقال أن المشروع البرمجي هو نوع عضوي إذا كان حجم الفريق المطلوب صغيرًا بشكل كافٍ، وكانت المشكلة مفهومة جيدًا وتم حلها في الماضي، كما أن أعضاء الفريق لديهم خبرة رمزية فيما يتعلق بالمشكلة.
scc --cocomo-project-type "organic,2.4,1.05,2.5,0.38"
شبه منفصل – يقال أن المشروع البرمجي هو نوع شبه منفصل إذا كانت الخصائص الحيوية مثل حجم الفريق والخبرة والمعرفة ببيئة البرمجة المختلفة تقع بين الخصائص العضوية والمضمنة. تعتبر المشاريع المصنفة على أنها شبه منفصلة أقل شهرة نسبيًا ويصعب تطويرها مقارنة بالمشاريع العضوية وتتطلب المزيد من الخبرة وتوجيه وإبداع أفضل. على سبيل المثال: يمكن اعتبار المترجمين أو الأنظمة المدمجة المختلفة من النوع شبه المنفصل.
scc --cocomo-project-type "semi-detached,3.0,1.12,2.5,0.35"
مضمن - يندرج مشروع برمجي يتطلب أعلى مستوى من التعقيد والإبداع والخبرة ضمن هذه الفئة. تتطلب مثل هذه البرامج حجم فريق أكبر من النموذجين الآخرين، كما يجب أن يتمتع المطورون بالخبرة والإبداع الكافيين لتطوير مثل هذه النماذج المعقدة.
scc --cocomo-project-type "embedded,3.6,1.20,2.5,0.32"
يمكنك جعل scc
يستبعد الملفات الكبيرة من الإخراج.
خيار القيام بذلك هو --no-large
والذي سيستبعد بشكل افتراضي الملفات التي يزيد حجمها عن 1,000,000 بايت أو 40,000 سطر.
يمكنك التحكم في حجم أي من القيمتين باستخدام --large-byte-count
أو --large-line-count
.
على سبيل المثال، لاستبعاد الملفات التي يزيد حجمها عن 1000 سطر و50 كيلو بايت، يمكنك استخدام ما يلي،
scc --no-large --large-byte-count 50000 --large-line-count 1000
يمكنك تحديد scc
وإزالة الملفات المحددة على أنها تم تصغيرها أو إنشاؤها من المخرجات بشكل اختياري.
يمكنك القيام بذلك عن طريق تمكين العلامة -z
مثل scc -z
والتي ستحدد أي ملف بمتوسط حجم بايت سطر > = 255 (افتراضيًا) على أنه مصغر.
تظهر الملفات المصغرة هكذا في الإخراج.
$ scc --no-cocomo -z ./examples/minified/jquery-3.1.1.min.js ─────────────────────────────────────────────────────────────────────────────── Language Files Lines Blanks Comments Code Complexity ─────────────────────────────────────────────────────────────────────────────── JavaScript (min) 1 4 0 1 3 17 ─────────────────────────────────────────────────────────────────────────────── Total 1 4 0 1 3 17 ─────────────────────────────────────────────────────────────────────────────── Processed 86709 bytes, 0.087 megabytes (SI) ───────────────────────────────────────────────────────────────────────────────
تتم الإشارة إلى الملفات المصغرة بالنص (min)
بعد اسم اللغة.
تتم الإشارة إلى الملفات التي تم إنشاؤها بالنص (gen)
بعد اسم اللغة.
يمكنك التحكم في متوسط حجم بايت السطر باستخدام --min-gen-line-length
مثل scc -z --min-gen-line-length 1
. يرجى ملاحظة أنك تحتاج -z
لأن تعديل هذه القيمة لا يعني ضمنًا اكتشافًا مصغرًا.
يمكنك استبعاد الملفات المصغرة من العدد تمامًا باستخدام العلامة --no-min-gen
. سيتم استبعاد الملفات التي تطابق الاختيار المصغر من الإخراج.
قد لا تحتوي بعض الملفات على امتداد. سيتم فحصهم لمعرفة ما إذا كانوا #! ملف. إذا كانت كذلك، فسيتم إعادة تعيين اللغة إلى اللغة الصحيحة. وإلا فلن تتم المعالجة.
ومع ذلك، قد يكون لديك موقف حيث تريد إعادة تعيين هذه الملفات بناءً على سلسلة بداخلها. للقيام بذلك يمكنك استخدام --remap-unknown
scc --remap-unknown "-*- C++ -*-":"C Header"
ما ورد أعلاه سوف يقوم بفحص أي ملف بدون امتداد بحثًا عن السلسلة -*- C++ -*-
وإذا تم العثور عليه، فسيقوم بإعادة تعيين الملف ليتم حسابه باستخدام قواعد C Header. يمكنك الحصول على قواعد إعادة رسم خريطة متعددة إذا لزم الأمر،
scc --remap-unknown "-*- C++ -*-":"C Header","other":"Java"
هناك أيضًا المعلمة --remap-all
التي ستعيد تعيين جميع الملفات.
لاحظ أنه في جميع الحالات إذا لم يتم تطبيق قاعدة إعادة التخطيط # العادية! سيتم تطبيق القواعد.
بشكل افتراضي، سيتم إخراج scc
إلى وحدة التحكم. ومع ذلك، يمكنك إنتاج الإخراج بتنسيقات أخرى إذا طلبت ذلك.
الخيارات المختلفة هي tabular, wide, json, csv, csv-stream, cloc-yaml, html, html-table, sql, sql-insert, openmetrics
.
لاحظ أنه يمكنك كتابة مخرجات scc
على القرص باستخدام الخيار -o, --output
. يتيح لك هذا تحديد ملف لكتابة الإخراج الخاص بك إليه. على سبيل المثال scc -f html -o output.html
سيقوم بتشغيل scc
على الدليل الحالي، ويخرج النتائج بصيغة html إلى الملف output.html
.
يمكنك أيضًا الكتابة إلى ملفات إخراج متعددة، أو أنواع متعددة إلى stdout إذا كنت تريد استخدام خيار --format-multi
. يعد هذا مفيدًا للغاية عند العمل في أنظمة CI/CD حيث تريد أن تكون تقارير HTML بمثابة قطعة أثرية أثناء عرض الأعداد في stdout أيضًا.
scc --format-multi "tabular:stdout,html:output.html,csv:output.csv"
سيتم تشغيل ما سبق مقابل الدليل الحالي، وإخراج الإخراج الافتراضي إلى الإخراج القياسي، بالإضافة إلى الكتابة إلىoutput.html وoutput.csv بالتنسيقات المناسبة.
هذا هو تنسيق الإخراج الافتراضي عند تشغيل SCC.
ينتج Wide بعض المعلومات الإضافية وهي مقياس التعقيد/الخطوط. يمكن أن يكون هذا مفيدًا عند محاولة تحديد الملف الأكثر تعقيدًا داخل المشروع بناءً على تقدير التعقيد.
JSON ينتج مخرجات JSON. تم تصميمه في الغالب للسماح scc
بالتغذية في البرامج الأخرى.
لاحظ أن هذا التنسيق سيمنحك حجم البايت لكل ملف يقرأه scc
مما يسمح لك بالحصول على تفاصيل لعدد البايتات التي تمت معالجتها.
يعد ملف CSV كخيار جيدًا للاستيراد إلى جدول بيانات للتحليل.
لاحظ أن هذا التنسيق سيمنحك حجم البايت لكل ملف يقرأه scc
مما يسمح لك بالحصول على تفاصيل لعدد البايتات التي تمت معالجتها. لاحظ أيضًا أن ملف CSV يحترم --by-file
وبالتالي سيُرجع ملخصًا افتراضيًا.
يعد csv-stream خيارًا مفيدًا لمعالجة المستودعات الكبيرة جدًا حيث من المحتمل أن تواجه مشكلات في الذاكرة. تنسيق الإخراج الخاص به هو 100٪ نفس تنسيق CSV.
لاحظ أنه لا ينبغي عليك استخدام هذا مع خيار format-multi
لأنه سيتم طباعته دائمًا إلى الإخراج القياسي، وبسبب كيفية عمله سوف يلغي توفير الذاكرة الذي يكسبه عادةً. التوفير الذي يوفره هذا الخيار. لاحظ أنه لا يوجد أي فرز مطبق مع هذا الخيار.
هو انخفاض في استبدال cloc باستخدام خيار إخراج yaml الخاص به. يُستخدم هذا غالبًا للانتقال إلى أنظمة البناء الأخرى ويمكن أن يساعد في استبدال cloc إذا لزم الأمر.
$ scc -f cloc-yml processor # https://github.com/boyter/scc/ header: url: https://github.com/boyter/scc/ version: 2.11.0 elapsed_seconds: 0.008 n_files: 21 n_lines: 6562 files_per_second: 2625 lines_per_second: 820250 Go: name: Go code: 5186 comment: 273 blank: 1103 nFiles: 21 SUM: code: 5186 comment: 273 blank: 1103 nFiles: 21 $ cloc --yaml processor 21 text files. 21 unique files. 0 files ignored. --- # http://cloc.sourceforge.net header : cloc_url : http://cloc.sourceforge.net cloc_version : 1.60 elapsed_seconds : 0.196972846984863 n_files : 21 n_lines : 6562 files_per_second : 106.613679608407 lines_per_second : 33314.2364566841 Go: nFiles: 21 blank: 1137 comment: 606 code: 4819 SUM: blank: 1137 code: 4819 comment: 606 nFiles: 21
تنتج خيارات إخراج HTML الحد الأدنى من تقرير html باستخدام جدول إما أن يكون html
مستقلًا أو مجرد جدول html-table
والذي يمكن إدراجه في صفحات HTML الخاصة بك. والفرق الوحيد بين الاثنين هو أن خيار html
يتضمن علامات html للرأس والنص مع الحد الأدنى من التصميم.
تم تصميم العلامات للسماح بتطبيق الأنماط المخصصة الخاصة بك. تقرير مثال هنا للعرض.
لاحظ أن خيارات HTML تتبع خيارات سطر الأوامر، لذا يمكنك استخدام scc --by-file -f html
لإنتاج تقرير بكل ملف وليس الملخص فقط.
لاحظ أن هذا التنسيق، إذا كان يحتوي على خيار --by-file
، سيمنحك حجم البايت لكل ملف يقرأه scc
مما يسمح لك بالحصول على تفاصيل لعدد البايتات التي تمت معالجتها.
تنسيق إخراج SQL متوافق "في الغالب" مع تنسيق إخراج SQL الخاص بـ cloc https://github.com/AlDanial/cloc#sql-
على الرغم من أن جميع الاستعلامات الموجودة في وثائق cloc يجب أن تعمل كما هو متوقع، فلن تتمكن من إلحاق المخرجات من scc
و cloc
في نفس قاعدة البيانات. وذلك لأن تنسيق الجدول يختلف قليلاً عن حساب scc بما في ذلك أعداد التعقيد والبايتات.
الفرق بين sql
و sql-insert
هو أن sql
سيتضمن إنشاء الجدول بينما الأخير سيحتوي فقط على أوامر الإدراج.
الاستخدام هو 100٪ مثل أي أمر scc
آخر ولكن إخراج SQL سيحتوي دائمًا على تفاصيل الملف. يمكنك حساب الإجماليات بنفسك باستخدام SQL، ومع ذلك ستظهر حسابات COCOMO مقابل