مهندسی معکوس (Reverse Engineering) در طراحی چیست؟
💡 این متن «بازنویسی آزاد» است: ایدهها و مفاهیم مطلب اصلی با نگارش کاملاً مستقل فارسی و مثالهای تازه بازگو شدهاند و ترجمهٔ کلمهبهکلمه نیست. بخشهای افزودهٔ مترجم در جعبهٔ منبع مشخص شدهاند. ترجمه و بازنویسی این متن با کمک هوش مصنوعی انجام شده است.
بیشتر ما طراحی را با کپی کردن یاد گرفتیم. صفحهای را که دوست داشتیم در ابزار طراحی دوباره کشیدیم، پیکسل به پیکسل. بعد از چند بار، کپیهایمان خیلی شبیه اصل شدند. ولی هنوز نمیدانستیم چرا آن صفحه آنطور طراحی شده بود.
فرق کپی کردن و مهندسی معکوس دقیقاً همین «چرا» است. کپی کننده خروجی را تکرار میکند. مهندس معکوس از خروجی به تصمیمهایی برمیگردد که آن را ساختهاند.
مهندسی معکوس چیست؟
مهندسی معکوس (Reverse Engineering) به تعریف منبع، روشی برای بررسی محصولی تمامشده است که دیگران ساختهاند. طراح یا برنامهنویس با این کار میفهمد محصول چطور ساخته شده و میتواند فرایند ساختش را بازسازی کند. هدف این است که از محصول به اندازهٔ کافی اطلاعات بیرون کشیده شود تا معلوم شود اجزایش چطور با هم کار میکنند.
منبع تأکید میکند که هیچ فرایند واحدی برای این کار نیست. مهندسی معکوس یک نرمافزار با مهندسی معکوس یک دارو یا یک قطعهٔ مکانیکی کاملاً فرق دارد. منبع از مثالهای گوناگونی هم نام میبرد. پژوهشگرانی میکوشند کارکرد مغز را از روی رفتارش بفهمند. مهندسانی خودرو را قطعه به قطعه باز میکنند. برنامهنویسانی هم هستهٔ لینوکس را مطالعه میکنند.
این مقاله روی شکلی از مهندسی معکوس تمرکز دارد که به کار طراح تجربهٔ کاربری میآید: باز کردن یک رابط یا یک جریان کاربری برای فهمیدن تصمیمهای پشت آن.
دلیلهای به کار بستن آن
منبع سیزده دلیل برای مهندسی معکوس برمیشمارد. من آنها را در سه دسته گذاشتهام.
فهمیدن و یادگرفتن. شناختن الگوهای طراحی موفق برای آموزش، و شناخت رقبا. این دسته بیشترین کاربرد را برای طراح دارد.
نگهداری و نوسازی. بهروز کردن نرمافزار قدیمیای که دانش ساختنش دیگر در دسترس نیست. بهتر کردن مستندات محصول. رفع ایراد، و برنامهریزی برای قطعههایی که دیگر تولید نمیشوند.
اتصال و بازطراحی. ساختن رابطی که سامانهها را به هم وصل کند، وقتی سامانهٔ قدیمی مستند ندارد. کم کردن هزینه، بازطراحی و استفادهٔ تازه از یک محصول، و ساختن سازوکارهای امنیتی.
همان مسیر، در جهت برعکس
این بخش افزودهٔ من است. برای طراح، سادهترین راه فهمیدن مهندسی معکوس این است که آن را طراحی در جهت برعکس ببیند.
نمودار بالای صفحه این را نشان میدهد. طراحی از یک نیاز شروع میشود. نیاز به چند تصمیم میرسد، مثلاً اینکه کدام کار مهمتر است. تصمیمها یک ساختار میسازند، یعنی چیدمان، جریان و اجزا. ساختار در نهایت به محصول تبدیل میشود. مهندسی معکوس از محصول شروع میکند و همین مسیر را برعکس میرود.
نکتهٔ مهم این است که هرچه در این مسیر عقبتر برویم، حدس بیشتر میشود و داده کمتر. ساختار را میشود با دیدن محصول تقریباً دقیق بیرون کشید. تصمیمها را فقط میشود حدس زد: چرا این دکمه بالاتر است؟ شاید به خاطر هدف فروش، شاید به خاطر یک آزمون. نیاز کاربر را هیچوقت نمیشود فقط از روی محصول فهمید. آن را باید با خود کاربر تأیید کرد.
این یعنی مهندسی معکوس یک رقیب، جایگزین تحقیق کاربر نیست. نقطهٔ شروعی است که فرضیه میسازد. فرضیهای که بعد باید با کاربر خودتان آزموده شود.
کالبدشکافی یک صفحه
این بخش هم افزودهٔ من است. وقتی یک صفحه یا یک جریان را کالبدشکافی میکنید، کمک میکند لایهبهلایه جلو بروید.
سطح. رنگ، حروف، فاصلهها و آیکونها. این لایه را همه میبینند و بیشتر کپیها همینجا متوقف میشوند. یک کار مفید در این لایه اندازه گرفتن است: فاصلهها چندتاییاند؟ چند اندازهٔ حروف به کار رفته؟
اجزا. دکمهها، کارتها، فرمها و حالتهای مختلفشان: عادی، فشردهشده، غیرفعال، خطا. فهرست کردن اجزا نشان میدهد پشت صفحه چه سیستم طراحیای هست، یا نیست.
ساختار. منو، دستهبندی و سلسلهمراتب. نقشهٔ صفحهها را بکشید و ببینید چه چیزی در سطح اول است و چه چیزی سه کلیک پایینتر. این همان معماری اطلاعات محصول است.
جریان. کاربر برای انجام یک کار مشخص از چه گامهایی میگذرد؟ کجا انشعاب دارد، و کجا بنبست؟ یک کار واقعی را از ابتدا تا انتها انجام دهید و هر صفحه را ثبت کنید. جریان کاربر ابزار ثبت همین است.
تصمیم. پایینترین لایه، و سختترین. چرا این گزینه جلوتر از آن یکی است؟ چرا ثبتنام در ابتداست و نه در انتها؟ جواب این پرسشها معمولاً در هدف کسبوکار است. شما فقط میتوانید حدسش بزنید، ولی همین حدس است که مهندسی معکوس را از کپی جدا میکند.
یک نکتهٔ عملی هم دربارهٔ ثبت کردن. نتیجهٔ کالبدشکافی را در یک سند ساده بنویسید، نه فقط در ذهنتان. برای هر لایه، آنچه دیدهاید را از آنچه حدس زدهاید جدا کنید. مثلاً «دکمهٔ خرید همیشه در پایین صفحه ثابت است» یک مشاهده است. «احتمالاً چون بیشتر کاربران با یک دست خرید میکنند» یک حدس است. این جداسازی بعدها، وقتی میخواهید تصمیمی را بر پایهٔ این کالبدشکافی بگیرید، نشان میدهد کجا باید اول با کاربر بیازمایید.
پیش از بازطراحی: محصول خودتان
این بخش هم افزودهٔ من است. مهندسی معکوس فقط برای محصول رقیب نیست. یکی از مفیدترین کاربردهایش، باز کردن محصول خودتان پیش از بازطراحی است.
بسیاری از محصولاتی که سالها کار کردهاند، مستند درستی ندارند. کسانی که آنها را ساختهاند شاید دیگر در شرکت نباشند. رفتارهایی در محصول هست که هیچکس دقیق نمیداند چرا آنجاست، ولی گروهی از کاربران به آنها تکیه کردهاند. منبع هم نوسازی نرمافزار قدیمی را یکی از دلیلهای اصلی مهندسی معکوس میداند.
پیش از بازطراحی چنین محصولی، سه کار کمک میکند. یک، فهرست کامل صفحهها و حالتها، از جمله پیامهای خطا و صفحههای کمدیده. دو، ثبت همهٔ قاعدههای پنهان، مثلاً اینکه فلان فیلد فقط برای گروه خاصی از کاربران ظاهر میشود. سه، پرسیدن از پشتیبانی که کاربران بیشتر به کدام رفتار عجیب محصول عادت کردهاند. بازطراحیای که این مرحله را حذف کند، معمولاً چیزی را میشکند که هیچکس نمیدانست وجود دارد. بازرسی طراحی همین کار را از زاویهٔ کیفیت انجام میدهد.
قانون و اخلاق
منبع به نکتهٔ مهمی اشاره میکند. محیط قانونی مهندسی معکوس از کشوری به کشور دیگر فرق دارد، و پیش از شروع پروژه باید با متخصص حقوقی مشورت کرد. منبع اضافه میکند که فرایندهای ثبتشده در حق اختراع از قبل عمومیاند و برای شناختنشان به مهندسی معکوس نیازی نیست.
من دو نمونه از این تفاوتهای قانونی را اضافه میکنم. در اتحادیهٔ اروپا، رهنمود حمایت از نرمافزار در سال ۱۹۹۱ اجازه داد برای ساختن نرمافزاری که با برنامهٔ دیگری کار کند، در شرایط مشخصی کد آن برنامه باز شود. در آمریکا هم قانون حق نشر هزارهٔ دیجیتال در سال ۱۹۹۸ برای هدف مشابهی استثنا گذاشت. اینها نشان میدهند که قانونگذاران معمولاً میان «باز کردن برای اتصال» و «باز کردن برای کپی» فرق میگذارند.
برای طراح تجربهٔ کاربری، مرز اخلاقی معمولاً روشنتر از مرز قانونی است. مشاهده و کالبدشکافی محصولی که برای همه در دسترس است، کار رایج و درستی است. کپی کردن ظاهر یک محصول و عرضهاش به نام خود، حتی اگر قانون جلویش را نگیرد، کار درستی نیست. ارزیابی اکتشافی رقبا یک راه مجاز و مفید برای همان یادگیری است.
در بافت فارسی
چند نکته برای طراحی که در ایران محصول دیگران را کالبدشکافی میکند.
یک: فهمیدن با کلون کردن فرق دارد. در بازار ما ساختن نسخهٔ ایرانی یک محصول خارجی رایج است. مهندسی معکوس میتواند به این کار کمک کند، ولی فقط وقتی که به لایهٔ تصمیم برسد. کلونی که فقط سطح را کپی کرده، اولین بار که با کاربر ایرانی روبهرو شود، ترک برمیدارد.
دو: اپ خارجی برای بازار دیگری تصمیم گرفته. تصمیمهایی که در لایهٔ پنجم پیدا میکنید، برای بازاری دیگر، با قاعدههای پرداخت و رفتار کاربری دیگر، گرفته شدهاند. هر تصمیم را جداگانه بپرسید: آیا دلیلش در ایران هم هست؟
سه: سامانههای قدیمی دولتی و بانکی مستند ندارند. بسیاری از سامانههایی که طراحان ایرانی بازطراحیشان میکنند، سالها پیش و بدون مستند ساخته شدهاند. پیش از هر تغییری، رفتار فعلی سامانه را کامل ثبت کنید. کاربرانی که سالها با آن کار کردهاند، به قاعدههای پنهانش تکیه دارند.
چهار: نسخهٔ فارسی رقیب را هم کالبدشکافی کنید. اگر رقیب خارجی نسخهٔ فارسی یا عربی دارد، آن را جداگانه بررسی کنید. ببینید راستبهچپ، متن دوجهته، رقم و تقویم را چطور حل کرده، و کجا شکست خورده. این کالبدشکافی معمولاً بیشتر از نسخهٔ انگلیسی یاد میدهد.
پنج: قانون هر کشور فرق دارد. به گفتهٔ منبع، پیش از هر کاری فراتر از مشاهده باید مشاورهٔ حقوقی گرفت. باز کردن کد یا استفاده از دادهٔ یک سامانه از این دستهاند، بهخصوص وقتی محصول رقیب در کشور دیگری ثبت شده است.
جمعبندی
مهندسی معکوس یعنی بررسی محصولی تمامشده برای فهمیدن اینکه چطور ساخته شده. برای طراح، شکل مفیدش طراحی در جهت برعکس است: از محصول به ساختار، از ساختار به تصمیم، و از تصمیم به نیاز. هرچه عقبتر برویم، حدس بیشتر میشود. پس نتیجهاش فرضیه است، نه جایگزین پژوهش.
کالبدشکافی لایهبهلایه، یعنی سطح، اجزا، ساختار، جریان و تصمیم، کمک میکند از کپی سطحی عبور کنید. مهندسی معکوس محصول خودتان پیش از بازطراحی هم جلوی شکستن رفتارهایی را میگیرد که کسی نمیدانست هستند. قانون از کشوری به کشور دیگر فرق دارد، ولی مرز اخلاقی روشن است: یاد بگیرید، کپی نکنید.
اگر بخواهم یک پرسش بگذارم: در آخرین محصولی که از آن الهام گرفتید، به کدام لایه رسیدید؟
منبع
این نوشته «بازنویسی آزاد» است از موضوع What is Reverse Engineering? منتشرشده در وبسایت بنیاد طراحی تعامل (Interaction Design Foundation — IxDF؛ بدون نام نویسندهٔ مشخص)، بههمراه مقالهٔ همراه آن، Reverse-Engineering Conceptual Definition. مفاهیم پایهٔ برگرفته از این منبع — تعریف مهندسی معکوس بهعنوان بررسی محصول تمامشده برای فهم و بازسازی فرایند ساخت، نبود فرایند واحد در صنایع مختلف، مثالهای مغز، خودرو و هستهٔ لینوکس، سیزده دلیل به کار بستن آن از یادگیری و شناخت رقیب تا نوسازی نرمافزار قدیمی و ساختن رابط اتصال، و تفاوت قانون در کشورهای مختلف و لزوم مشاورهٔ حقوقی — از این منبع گرفته شده، اما متن فارسی و توضیحها کاملاً مستقل نوشته شدهاند.
متن مقالهٔ اصلی تحت هیچ لایسنس بازی منتشر نشده است؛ به همین دلیل اینجا ترجمهٔ کلمهبهکلمه ارائه نشده و متن کامل انگلیسی (بههمراه همهٔ تصاویر) در لینک زیر در دسترس است.
ارجاعهای بیرونی: رهنمود اتحادیهٔ اروپا دربارهٔ حمایت حقوقی از برنامههای رایانهای (۱۹۹۱)؛ و قانون حق نشر هزارهٔ دیجیتال آمریکا (DMCA، ۱۹۹۸).
بخشهای افزودهٔ مترجم: بند آغازین دربارهٔ یادگرفتن با کپی و تفاوتش با مهندسی معکوس؛ سهدسته کردن دلیلها؛ کل بخش «همان مسیر، در جهت برعکس» شامل نمودار دو جهت و رابطهٔ آن با تحقیق کاربر؛ کل بخش «کالبدشکافی یک صفحه» شامل نمودار پنج لایه، پرسش هر لایه و جدا کردن مشاهده از حدس در ثبت نتیجه؛ کل بخش «پیش از بازطراحی: محصول خودتان»؛ دو نمونهٔ قانونی از اروپا و آمریکا و مرز اخلاقی مشاهده و کپی؛ و کل بخش «در بافت فارسی» شامل کلون، تصمیمهای بازار دیگر، سامانههای قدیمی بیمستند، کالبدشکافی نسخهٔ فارسی رقیب و مشاورهٔ حقوقی.
تصاویر: نمودار خودرو در صفحهٔ منبع با لایسنس CC BY-SA 3.0 و دو تصویر دیگر با لایسنس CC BY 2.0 آمدهاند؛ هیچکدام اینجا بازتولید نشدهاند. هر سه نمودار این صفحه طراحی اختصاصی مترجم است.
مشاهدهٔ مقالهٔ اصلی
مهندسی معکوس در طراحی