بررسی ابزار تشخیص شباهت کد Moss

Moss یک سیستم خودکار برای مشخص کردن میزان شباهت کد­ منبع برنامه‌­ها است. این ابزار در سال 1994 توسط دانشگاه استنفورد منتشر شد. از آن زمان تا به امروز یکی پرکاربرد­ترین استفاده‌­های این ابزار تشخیص سرقت ادبی یا کپی کردن کدهای برنامه‌­نویسی شده توسط دانشجویان می­‌باشد. از طرفی به دلیل استفاده از یک الگوریتم مناسب و کاربردی و نتایج قابل قبول، این ابزار در میان سایر ابزار­های تشخیص سرقت ادبی در میان کاربران (اساتید ?) بیشتر مورد استفاده قرار می­‌گیرد. در ادامه نحوه اجرا و استفاده از این ابزار را شرح میدهم.فهرست مطالبدانلود ابزارهای مورد نیازنحوه اجرا ابزاربررسی نحوه عملکرد ابزارنتیجه‌­گیریدانلود ابزار­های مورد نیازبرای استفاده از Moss می‌­توانید آن­را از این لینک دانلود نمایید. مطابق عکس 1 در بخش Community Contributions می‌توانید نسخه­ مورد نظرتان را انتخاب کنید و در صفحه گیت‌­هاب مربوطه آن‌­را دانلود نمایید. من برای این مقاله از نسخه GUI for Windows استفاده می‌­کنم.عکس 1برای اجرای این ابزار نیز باید یک نسخه از Microsoft Visual Studio را نصب کنید. من برای این مقاله از نسخه Enterprise 2017 استفاده می‌­کنم. در هنگام نصب توجه داشته باشد حتما فریم­‌ورک ".NETFramework,Version=v4.6.1" را نمایید.نحوه اجرای ابزارپس از دانلود و نصب ابزار­های مورد نیاز و خارج کردن ابزار از حالت فشرده، در میان فایل‌­های درون پوشه مطابق عکس 2 فایل MossApp.sln را با Microsoft Visual Studio اجرا نمایید.عکس 2پس از بارگذاری ابزار در صورتی که پیغام موجود در عکس 3 نمایش داده شد، گزینه " change the target to .net framework 4.6.1" را انتخاب نمایید.عکس 3پس از تکمیل بارگذاری ابزار، با کلیک بر روی start یا فشردن کلید f5 آن‌­را اجرا نمایید. پس از آن با پیام اخطاری مواجه می‌­شوید آن‌­را تایید کنید تا اجرای ابزار کامل انجام شود. در صورتی تمام مراحل را به درستی طی کرده باشید و به خطای سیستمی برنخورید در نهایت پنجره مربوط به ابزار که در عکس 4 نشان داد شده است نمایش داده می‌­شود.عکس 4بررسی نحوه عملکرد ابزاراین ابزار دارای فانکشن‌­ها و ویژگی‌­های بسیاری است که هر یک به طور مختصر توضیح می‌­دهم.User Id: برای استفاده از این ابزار باید ابتدا یک آیدی در سرور این ابزار در دانشگاه استنفورد ایجاد نمایید. برای اینکار همانطور که در عکس 5 نشان داده شده است می‌­توانید وارد تب Get User Id در بالای پنجره شوید و ایمیل خود را وارد نمایید. سپس یک متن نمایش داده می­‌شود. شما باید یک ایمیل در قالب متنی که در عکس 5 درون کادر قرمز است به آدرس moss@moss.stanford.edu ارسال نمایید. سپس یک ایمیل برای شما ارسال می‌­شود که درون آن باید به دنبال user id خود را پیدا کنید و در قسمت user id ابزار وارد نمایید.عکس 5Language: در این قسمت باید زبان کدهایی که قرار است بررسی شوند را انتخاب نمایید. 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 نشان داده شده است می­‌شوید.عکس 6برای آزمایش این ابزار شش کد به زبان C که توسط اشخاص متفاوت نوشته شده‌­اند را برای سرور ارسال کردم. میزان مشابه و کپی بودن کد­ها بدون استفاده از ابزار به صورت زیر است:Mamad:به عنوان نفر اول کد را ارسال کرده و خود آن­‌را انجام داده است.Mamadmehdi:کد Mamad را به طور کامل بدون تغییر کپی کرده است.Mamadali: کد او همانند کد Mamad دارای یک منطق دستوری می­‌باشد با این تفاوت که دستورات شرطی را به صورت جداگانه نوشته است.Mamadreza: کد او نیز همانند کد Mamad دارای یک منطق دستوری می‌­باشد با این تفاوت که دستورات شرطی را جا‌ به‌ جا کرده است.Mamadhasan: کد Mamad را به طور کامل کپی کرده است با این تفاوت که جملات دستوری بی­‌فایده‌­ای را درون کد اضافه کرده که بر روی نتیجه و عملکرد کد تاثیری نمی‌­گذارند.Mamadhossein: کد او از لحاظ نحوی با mamadتفاوت دارد و از دستور switchبه جای ifاستفاده نموده است ولی از لحاظ معنایی یکسان است.همانطور که در عکس 6 مشاهده کردید ابزار فقط میزان شباهت کدهای mamad و mamadmehdi و mamadreza را تشخیص داد و نتوانست شباهت‌های کد‌های Mamadhasan و Mamadali را تشخیص دهد.این شش کد را می­توانید از اینجا مشاهده نمایید. عکس 7 و 8 دو نمونه از نتیجه بررسی این ابزار برای شش کد بالا را نشان می­دهند.عکس 7عکس 8نتیجه­‌گیریاین ابزار یکی از کاربردی­‌ترین ابزار­ها در زمینه تشخیص شباهت کد و تشخیص سرقت ادبی کد است و همانطور که نشان داده شد دارای عملکرد­ها و ویژگی‌­های بسیار مفید و کاربردی می­‌باشد. اما با این حال دارای معایب و ضعیف­‌هایی می‌­باشد که در صورت تغییر نحوی و معنایی کد قادر به تشخیص آن­‌ها نمی‌­باشد.پ.ن: این مقاله تمرین درس "آزمون، اشكال زدايی و ترميم نرم افزار پيشرفته" دانشگاه شهید بهشتی است و جهت انتشار محتوای فارسی بیشتر می‌باشد. استفاده از این مطلب بدون ذکر منبع بلامانع است و پیگرد قانونی ندارد.?