Moss یک سیستم خودکار برای مشخص کردن میزان شباهت کد منبع برنامهها است. این ابزار در سال 1994 توسط دانشگاه استنفورد منتشر شد. از آن زمان تا به امروز یکی پرکاربردترین استفادههای این ابزار تشخیص سرقت ادبی یا کپی کردن کدهای برنامهنویسی شده توسط دانشجویان میباشد. از طرفی به دلیل استفاده از یک الگوریتم مناسب و کاربردی و نتایج قابل قبول، این ابزار در میان سایر ابزارهای تشخیص سرقت ادبی در میان کاربران (اساتید ?) بیشتر مورد استفاده قرار میگیرد. در ادامه نحوه اجرا و استفاده از این ابزار را شرح میدهم.
برای استفاده از Moss میتوانید آنرا از این لینک دانلود نمایید. مطابق عکس 1 در بخش Community Contributions میتوانید نسخه مورد نظرتان را انتخاب کنید و در صفحه گیتهاب مربوطه آنرا دانلود نمایید. من برای این مقاله از نسخه GUI for Windows استفاده میکنم.
برای اجرای این ابزار نیز باید یک نسخه از Microsoft Visual Studio را نصب کنید. من برای این مقاله از نسخه Enterprise 2017 استفاده میکنم. در هنگام نصب توجه داشته باشد حتما فریمورک ".NETFramework,Version=v4.6.1" را نمایید.
پس از دانلود و نصب ابزارهای مورد نیاز و خارج کردن ابزار از حالت فشرده، در میان فایلهای درون پوشه مطابق عکس 2 فایل MossApp.sln را با Microsoft Visual Studio اجرا نمایید.
پس از بارگذاری ابزار در صورتی که پیغام موجود در عکس 3 نمایش داده شد، گزینه " change the target to .net framework 4.6.1" را انتخاب نمایید.
پس از تکمیل بارگذاری ابزار، با کلیک بر روی start یا فشردن کلید f5 آنرا اجرا نمایید. پس از آن با پیام اخطاری مواجه میشوید آنرا تایید کنید تا اجرای ابزار کامل انجام شود. در صورتی تمام مراحل را به درستی طی کرده باشید و به خطای سیستمی برنخورید در نهایت پنجره مربوط به ابزار که در عکس 4 نشان داد شده است نمایش داده میشود.
این ابزار دارای فانکشنها و ویژگیهای بسیاری است که هر یک به طور مختصر توضیح میدهم.
User Id: برای استفاده از این ابزار باید ابتدا یک آیدی در سرور این ابزار در دانشگاه استنفورد ایجاد نمایید. برای اینکار همانطور که در عکس 5 نشان داده شده است میتوانید وارد تب Get User Id در بالای پنجره شوید و ایمیل خود را وارد نمایید. سپس یک متن نمایش داده میشود. شما باید یک ایمیل در قالب متنی که در عکس 5 درون کادر قرمز است به آدرس moss@moss.stanford.edu ارسال نمایید. سپس یک ایمیل برای شما ارسال میشود که درون آن باید به دنبال user id خود را پیدا کنید و در قسمت user id ابزار وارد نمایید.
Language: در این قسمت باید زبان کدهایی که قرار است بررسی شوند را انتخاب نمایید. Moss از زبانهای برنامهنویسی بسیاری پشتیبانی میکند که شامل زبانهای زیر میباشد.
"c", "cc", "java", "ml", "pascal", "ada", "lisp", "scheme", "haskell", "fortran", "ascii", "vhdl", "perl", "matlab", "python", "mips", "prolog", "spice", "vb", "csharp", "modula2", "a8086", "javascript", "plsql", "verilog"
Option M: این ویژگی از ابزار یک عدد میگیرد که حساسیت ابزار به عبارات برنامه را تعیین میکند. یعنی ممکن است یک عبارتی یا دستوری در مجموعه کدها وجود داشته باشد که در همه آنها مشترک است در این صورت این عبارت نمیتواند به عنوان یک کپی یا سرقت در نظر گرفته شود بلکه یک دستور معمول و مشروع است. برای مثال اگر Mرا برابر 10 بگذاریم یعنی اگر یک عبارت در بیشتر از 10 برنامه وجود داشته باشد آنگاه آن عبارت به عنوان تشابه تشخیص داده نمیشود.
Option N: در این قسمت حداکثر تعداد فایلهایی که در نتیجه بررسی نمایش داده میشود را مشخص میکنیم. مقدار پیشفرض برابر 250 میباشد و توصیه میشود تغییر ندهید.
Option C: در این قسمت یک پیام به عنوان گزارش همراه را با جواب ارسال میگردد. (خیلی کاربرد نداره ?)
Choose Base File: زمانی که یک فایل کد مبنا تعیین میکنید در فرآیند تشخیص، کد برنامهای که در فایل کد مبنا وجود دارد در فرآیند تشخص به عنوان تشابه در نظر گرفته نمیشود.
Choose Source Files: در این قسمت شما مجموعه برنامههایی که قصد دارید بررسی کنید و در یک پوشه قرار دادهاید را انتخاب مینمایید.
Use Directory Mode: با انتخاب این گزینه تعیین میکنید که کدها در قالب یک دایرکتوری ارسال شوند و در این حالت مشخص میکنید فایل موجود در یک دایرکتوری بخشی از یک برنامه یکسان هستند.
در نهایت با کلیک بر روی send request درخواست خود را به سرور ارسال میکنید. پس از گذشت چند ثانیه یک لینک در بالای این دکمه نمایش داده میشود و با کلیک بر روی آن وارد صفحه نتایج بررسی که در عکس 6 نشان داده شده است میشوید.
برای آزمایش این ابزار شش کد به زبان C که توسط اشخاص متفاوت نوشته شدهاند را برای سرور ارسال کردم. میزان مشابه و کپی بودن کدها بدون استفاده از ابزار به صورت زیر است:
Mamad:به عنوان نفر اول کد را ارسال کرده و خود آنرا انجام داده است.
Mamadmehdi:کد Mamad را به طور کامل بدون تغییر کپی کرده است.
Mamadali: کد او همانند کد Mamad دارای یک منطق دستوری میباشد با این تفاوت که دستورات شرطی را به صورت جداگانه نوشته است.
Mamadreza: کد او نیز همانند کد Mamad دارای یک منطق دستوری میباشد با این تفاوت که دستورات شرطی را جا به جا کرده است.
Mamadhasan: کد Mamad را به طور کامل کپی کرده است با این تفاوت که جملات دستوری بیفایدهای را درون کد اضافه کرده که بر روی نتیجه و عملکرد کد تاثیری نمیگذارند.
Mamadhossein: کد او از لحاظ نحوی با mamadتفاوت دارد و از دستور switchبه جای ifاستفاده نموده است ولی از لحاظ معنایی یکسان است.
همانطور که در عکس 6 مشاهده کردید ابزار فقط میزان شباهت کدهای mamad و mamadmehdi و mamadreza را تشخیص داد و نتوانست شباهتهای کدهای Mamadhasan و Mamadali را تشخیص دهد.
این شش کد را میتوانید از اینجا مشاهده نمایید. عکس 7 و 8 دو نمونه از نتیجه بررسی این ابزار برای شش کد بالا را نشان میدهند.
این ابزار یکی از کاربردیترین ابزارها در زمینه تشخیص شباهت کد و تشخیص سرقت ادبی کد است و همانطور که نشان داده شد دارای عملکردها و ویژگیهای بسیار مفید و کاربردی میباشد. اما با این حال دارای معایب و ضعیفهایی میباشد که در صورت تغییر نحوی و معنایی کد قادر به تشخیص آنها نمیباشد.
پ.ن: این مقاله تمرین درس "آزمون، اشكال زدايی و ترميم نرم افزار پيشرفته" دانشگاه شهید بهشتی است و جهت انتشار محتوای فارسی بیشتر میباشد. استفاده از این مطلب بدون ذکر منبع بلامانع است و پیگرد قانونی ندارد.?