phone numbers

مهندسی معکوس در نرم افزار ( Reverse Engineering soft ware): 
بحث در مورد علم مهندسی معکوس از سال 1990 میلادی آغاز شده و در بعضی مجله های علمی مثل IEEE Software به صورت یک طبقه بندی علمی از آن صحبت میشود.
مهندسی معکوس عبارت است از توانایی گرفتن اطلاعات از کد منبع و ایجاد یا ارتقاء مدل Rose .
یکی از موانع موجود بر سر راه پروژه های فناوری اطلاعات سازگار نگاه داشتن مدل آبجکت با کد است . با تغییر نیازها ، تغییر مسقیم کد می تواند وسوسه انگیز باشد ، تا اینکه مدل را تغییر دهید و سپس کد تغییر یافته را از مدل تولید کنید . مهندسی معکوس به ما این امکان را می دهد تا همیشه مدل را با کد همسان نگاه داریم . 
در فرایند مهندسی معکوس ، Rose نسبت به خواندن بسته ، Component ها ، کلاسها رابطه ها ، صفات و عملیات از کد اقدام خواهد کرد . هنگامی که این مدل در یک مدل Rose قرار می گیرد ، می توانید هر تغییر لازمی را ایجاد کرده سپس کد را از طریق امکانات مهندسی مستقیم Rose مجدداً تولید کنید . 
گزینه هایی که در اختیار شما قرار خواهند گرفت به نسخه مورد استفاده شما بستگی خواهد داشت . 
• Rose Modeler : شامل هیچ گونه عملیات مهندسی معکوس نخواهد بود . 
• Rose Professional : شامل قابلیت های مهندسی معکوس به یک زبان است . 
• Rose Enterprise : شامل مهندسی معکوس C++ ،  Visual C++ ، Visual Basic و جاوا خواهد بود .همانطور مهندسی معکوس شمای Oracle 8 را نیز شامل خواهد بود . 
• Add_ins : متعلق به Rose قابلیتهای مهندسی معکوس در زبانهای دیگر نظیر PowerBuilder یا Forte را به شما خواهند داد .
عناصر مدل ایجاد شده در طول مهندسی معکوس : 
در طول مهندسی معکوس ، Rose به جمع آوری اطلاعاتی درباره موارد زیر خواهد پرداخت . 
• کلاسها 
• صفات 
• روابط 
• عملیات 
• بسته ها 
• component ها 
با استفاده از این اطلاعات ، Rose اقدام به ایجاد یا ارتقاء یک مدل Object خواهد کرد . 
مجموعه ای حساس از تکنیکها و ابزارها برای فهمیدن اینکه محتوای یک نرم افزار شامل چه چیزهایی میباشد.  به عبارت دیگر عمل تجزیه و تحلیل یک سیستم برای مشخص کردن مولفه های سیستم و رابطه متقابل آنها به منظور نمایش سیستم به شکلی دیگر یا در سطحی بالاتر میباشد. این نوع تکنیکها باعث میشود تا ساختار یک نرم افزار را نمایان نموده و راههای عملکرد آن و همچنین ویژگیهایی که طبق آن حرکت میکند را مشخص کنیم. در واقع مهندسی معکوس زمانیکه شخصی کد شخص دیگری را کاوش کند نیز اتفاق می افتد. 
آیا شما مهندسی معکوس را نادیده میگیرید؟
فرض کنید شما نرم افزاری را توسعه داده و به فروش رسانده اید! آیا نمیخواهید دیگران به حقوق کپی (Copyright) شما احترام بگذارند؟ این بحث معمولا" از معانی منفی عبارت مهندسی معکوس به خصوص در صنعت نرم افزار سازی شروع میشود.
به هر حال تکنیکهای مهندسی معکوس راه هایی هستند برای تولید کننده ها و مصرف کننده های نرم افزار که با مقوله عرضه اقتصادی در یک زنجیره قرار میگیرند. در نظر داشته باشید که این ابزار (راهکار) به طور ذاتی خوب یا بد نیست، موضوع قابل توجه این است که این ابزار در چه راه هایی مورد استفاده قرار میگیرد. مهندسی معکوس به ویژه در نرم افزارهای پیشرفته برای اهداف خاص مورد استفاده قرار میگیرد :
-         یافتن کدهای مخرب: تعدادی از تکنیکهای ویروس یابی از مهندسی معکوس برای دستیابی به ساختار و عملکرد این کدهای مخرب استفاده میکنند. به وسیله این تکنیکها نرم افزارهایی تولید میشود که برای مبارزه با ویروس های کامپیوتری مورد استفاده قرار میگیرد.
-    کشف خطاهای ذاتی (Bug) و نقص های غیر منتظره: حتی بهترین سیستمهای نرم افزاری میتواند دارای خطا باشد که با استفاده از مهندسی معکوس میتوان آنها را پیدا کرده و رفع نمود (Debug).
 
نرم افزارهای سطح پایین
این نوع نرم افزارها شامل ابزارهای توسعه از قبیل Compiler، Linker، Debugger، سیستم های عامل (Operating System) و زبان های برنامه نویسی سطح پایین مثل Assembly میباشد. در واقع لایه ای است که جداکننده توسعه دهندگان نرم افزار و برنامه های کاربردی از سخت افزار میباشد. اگر شخصی بخواهد در زمینه مهندسی معکوس مهارت به دست آورد باید فهم کاملی نسبت به نرم افزارهای سطح پایین داشته باشد.
 
زبان Assembly
این زبان پایین ترین سطح زبان های برنامه نویسی میباشد که به طور باورنکردنی در مهندسی معکوس مورد استفاده قرار میگیرد. اگر یک نرم افزار عملی را انجام دهد آن عمل باید به زبان Assembly قابل رویت باشد. مبحث مهم دیگر، کد ماشین است که همراه با زبان Assembly دو نوع تعریف مختلف از یک چیز میباشد. کد ماشین چیزی نیست جز رشته ای از بیتها و شامل لیستی از دستورات (در واقع نمایش متنی آن بیتها)، كه توسط CPU باید اجرا شود.
 
Compiler و Machine Code
با توجه به اینکه CPU فقط قادر است کدهای ماشین را اجرا کند با استفاده از Compiler کدهای زبانهای سطح بالا به زبان ماشین تبدیل میشوند.
زبانهایی مثل C++ و Pascal دارای این نوع Compiler هستند.
 
Virtual Machine و Byte Code
زبانهایی مانند Java دارای کامپایلری هستند که به جای Object Code (کدهایی که Compiler آنها را تولید میکند)، Byte Code تولید میکنند. Byte Code ها شبیه به Object Code ها هستند با این تفاوت که توسط یک برنامه (به جای CPU) Decode میشوند. به این برنامه Virtual Machine گفته میشود. یکی از مزایای این نوع برنامه ها مستقل بودن آنها از محیط اجرا میباشد. مبحث مهندسی معکوس در مورد Byte Code ها نسبت به کدهای ماشین کاملاً متفاوت بوده و در مقایسه با آن ساده تر میباشد.
 
شروع عملیات مهندسی معکوس
برای شروع، کار به دو بخش کلی تقسیم میگردد:
1-      System Level: داشتن دیدي کلی از تمام برنامه.
2-      Code Level: به دست آوردن اطلاعات کامل و جزیی روی قسمتی از کد برنامه.
 
ابزارهای System Monitoring 
برای بخش System Level ابزارهایی نیاز است که به وسیله آنها اطلاعات کلی در مورد برنامه (فایل اجرایی) را در اختیار قرار میدهد که معمولاً این اطلاعات توسط سیستم عامل ایجاد میگردد براي مثال مشخص ميگردد كه نرم افزار با چه ابزاري توسعه داده شده يا با چه ابزاري Protect شده است.
 
ابزارهای Code Level
Disassembler
ابزاری است که یک فایل اجرایی را دریافت نموده و یک فایل متنی که شامل کدهای زبان Assembly که مربوط به قسمتهای مختلف برنامه است را تولید میکند. Disassembler های پیشرفته یکی از ابزارهای کلیدی مهندسی معکوس به شمار میروند.
 
Debugger
Debugger برنامه ای است که به توسعه دهنده (Developer) اجازه می دهد برنامه را در حال اجرا مشاهده نماید. Debugger یکی از مهمترین ابزارهای مهندسی معکوس بوده که از یک Disassembler برای برگرداندن کدها به زبان اسمبلی استفاده مینماید.
زمانیکه یک فایل اجرایی با استفاده از یک Debugger  باز میشود حالت Register های CPU، محتویات حافظه و Stack های فعال قابل مشاهده هستند.
 
ویژگی های مهم Debugger ها :
Disassembler قدرتمند: یکی از ویژگیهای مهم و لازم برای هر Debugger بوده به طوریکه محتوای فایل اجرایی به وضوح قابل مشاهده میباشد. همچنین متدهای برنامه قابل تجزیه و تحلیل بوده و Trace کردن آنها ساده میشوند.
 
Breakpoint های سخت افزاری و نرم افزاری: یکی دیگر از ویژگیهای مهم Debugger ها بوده و هر Debugger دارای این ویژگی میباشد. Breakpoint های نرم افزاری دستوراتی هستند که در زمان اجرا (Runtime) توسط Debugger به برنامه اضافه میشوند و باعث میشوند اجرای برنامه توسط پردازشگر متوقف شده و کنترل برنامه به Debugger سپرده میشود. Breakpoint های سخت افزاری یکی از قابلیتهای ویژه CPU بوده که به پردازشگر اجازه میدهد اجرای برنامه را متوقف کرده و کنترل آنرا به Debugger منتقل نماید و زمانی اتفاق می افتد که یک آدرس از حافظه مورد دسترسی قرار گیرد.
 
دیدن Register ها و حافظه: یکی از قابلیتهای خوب Debugger ها دیدن Register ها و محتوای حافظه سیستم میباشد.
 
اطلاعات Process : یکی از قابلیتهای بسیار مفید Debugger ها دیدن جزییات Process ها در حال Debug کردن میباشد. دیدن ماجول های قابل اجرا و یا Thread هایی که در حال اجرا هستند را امکان پذیر میسازد.
 
انواع Debugger
   User Mode Debugger
بیشتر Debugger ها از این نوع هستند. این نوع Debugger ها برنامه هایی هستند که به Process های دیگر متصل شده و کنترل آنرا در دست میگیرند. مزیت دیگر آنها نصب و استفاده آسان از آنها میباشد. از طرف دیگر User Mode Debugger ها فقط میتوانند با یک Process کار کنند و کدهای User Mode درون آن Process را ببینند. گاهی اوقات شما با استفاده از این نوع Debugger برنامه ای را باز میکنید که چندین Process را شامل میشود که به نوعی به هم متصل هستند. در اینطور موارد شما ممکن است ندانید کد مورد نظر شما در کدام Process اجرا میشود. User Mode Debugger ها معمولاً مشکل خاصی ایجاد نمیکنند مگر اینکه برنامه ای که در حال Debug شدن میباشد دارای مولفه های Kernel Mode باشد (همانند Device Driver). بعضی از این نوع Debugger ها عبارتند از :
الف-        OllyDbg
این Debugger توسط Oleh Yuschuk ساخته شده که شاید یکی از بهترین ها در نوع خود باشد، این Debugger دارای یک Disassembler بسیار قدرتمند بوده که برای افرادی که در زمینه مهندسی معکوس در سطح مبتدی هستند بسیار مناسب میباشد. وجود Analyzer در این Debugger باعث میشود که حلقه های تکرار و شرطها (for،  switchو ...) و همچنین پارامترهای متدها به راحتی قابل تشخیص باشد. OllyDbg دارای امکان patching نیز میباشد به این ترتیب که میتوان تغییراتی در فایل اجرایی ایجاد نموده و آنرا ذخیزه نمود. 
ب-        WinDbg
یک Debugger رایگان بوده که سازنده آن شرکت Microsoft میباشد. در حالیکه تعدادی از ویژگیهای آن از طریق رابط کاربر قابل دسترسی هستند، دارای یک کنترلگر دستوری نیز میباشد. دارا ی یک Disassembler ضعیف بوده و امکانات دیگر آن نیز چندان برای کاربران ساده نیست.  
پ-        IDA Proیک User Mode Debugger است که دارای Assembler بسیار قدرتمند و همچنین امکانات Debug فراوان میباشد و میتوان گفت از قدرتمندترین Debuggerها میباشد. این Debugger رایگان نبوده ولی میتوان از نسخه های Trial آن استفاده نمود.

مهندسی معکوس چیست ؟

اگر سابقه صنعت و چگونگی رشد آن در کشورهای جنوب شرقی آسیا را مورد مطالعه قرار دهیم به این مطلب خواهیم رسید که در کمتر مواردی این کشورها دارای ابداعات فن آوری بوده اند و تقریبا در تمامی موارد کشورهای غربی (آمریکا و اروپا) پیشرو بوده اند. پس چه عاملی باعث این رشد شگفت آور و فنی در کشورهای خاور دور گردیده است ؟                                                                                                                     

در این نوشتار یه یکی از راهکارهای این کشورها در رسیدن به این سطح از دانش فنی می پردازیم .

در صورتی که به طور خاص کشور ژاپن را زیر نظر بگیریم، خواهیم دید که تقریبا تمامی مردم دنیا از نظر کیفیت محصولات آنها را تحسین می کنند ، ولی به آنها ایراد می گیرند که با کپی برداری از روی محصولات دیگران به این موفقیت دست یافته اند.

این بخش اگر هم که درست باشد و در صورتی که کپی برداری راهی مطمئن برای رسیدن به هدف باشد چه مانعی داردکه این کار انجام شود. این مورد ، به خصوص در باره کشورهای در حال توسعه و یا جهان سوم با توجه به شکاف عمیق فن آوری بین این کشورهای و کشورهای پیشرفته دنیا ، امری حیاتی به شمار می رود و این کشورها باید همان شیوه را پیش بگیرند ( البته در قالب مقتضیات زمان و مکان و سایر محدودیت ها ). به عنوان نمونه ، قسمتی از تاریخچه صنعت خودرو و آغاز تولید آن در ژاپن را مورد بررسی قرار می دهیم :

تولید انبوه خودرو در ژاپن قبل از جنگ جهانی دوم و در سال 1920 بوسیله کارخانه های " ایشی کاواجیما " آغاز شد که مدل ژاپنی فورد آمریکایی را کپی کرده و به شکل انبوه به بازار عرضه نمود .

همچنین شورلت ژاپنی AE جزو اولین خودروهای کپی شده آمریکایی توسط ژاپنی ها بود که به تعداد زیاد تولید می شد. سچس با تلاش فراوانی که انجام شد ( آنهم در شرایط بحرانی ژاپن در آن دوره ) مهم ترین کارخانه خودروسازی ژاپن یعنی "تویوتا" در سال 1932 فعالیت خود را با ساخت خودرویی با موتور " کرایسلر " آغاز نمودو در سال 1934 نوع دیگری از خودرو را با موتور " شورلت " ساخته و وارد بازار نموده و از سال 1936 ، اولین تلاشها برای ساخت خودرویی تمام ژاپنی آغاز شد.البته تا مدت ها ژاپنی ها مشغول کپی برداری از اتومبیل ها ی آمریکایی و اروپایی بودند. آنها خودروی پاکارد و بیوک آمریکایی و رولزرویس ، مرسدس بنز و فیات اروپایی را نیز تولید کردند که همین تولیدها زمینه ساز گسترش فعالیت خودروسازی ژاپن شد و سرانجام در دهه 1960 پس از سعی و کوشش فراوان اولین اتومبیل تمام ژاپنی که دارای استاندارد جهانی هم بود ساخته و به بازار عرضه شد.

در تمامی مطالب فوق رد پای یک شگرد خاص و بسیار مفید به چشم می خورد که " مهندسی معکوس" (Reverse engineering ) نام دارد. مهندسی معکوس روشی آگاهانه برای دستیابی به فن آوری حاضر و محصولات موجود است . در این روش متخصصین رشته ها ی مختلف علوم پایه و کاربردی از قبیل مکانیک ، فیزیک و اپتیک ، مکاترونیک، شیمی پلیمر، متالورژی، الکترونیک و… جهت شناخت کامل نحوه عملکرد یک محصول که الگوی فن آوری مذکور می باشد، گروه های تخصصی را ایجاد می کنند و با تجهیزات پیشرفته و دستگاههای دقیق آزمایشگاهی به همراه سازماندهی مناسب تشکیلات تحقیقاتی و توسعه ( R&D ) سعی در بدست آوردن مدارک و نقشه ها ی طراحی محصول فوق دارند تا پس از مراحل نمونه سازی (Prototyping ) و در صورت لزوم ساخت نیمه صنعتی (Pilot plant ) تولید محصول را طبق استاندارد فنی محصول الگو آغاز کنند. همانگونه که اشاره شد استفاده از روش مهندسی معکوس برای کشورهای در حال توسعه روش بسیار مناسبی جهت دسترسی به فن آوری ، رشد و توسعه آن می باشد. این کشورها که در موارد بسیاری از فن آوری ها در سطح پایینی قرار دارند ، در کنار روشها و سیاست ها ی دریافت دانش فنی، مهندسی معکوس را مناسب ترین روش دسترسی به فن آوری تشخیص داده و سعی می کنند با استفاده از روش مهندسی معکوس ، اطلاعات و دانش فنی محصولات موجود ، مکانیزم عمل کرد و هزاران اطلاعات مهم دیگر را بازیابی کرده و در کنارآن با روشهای مهندسی مستقیم (Forward enineering ) و روشهای ساخت قطعات ،و استفاده از تجهیزات و تسترهای خط مونتاژ و ساخت مانند قالب ها ، گیج و فیکسچرها و دستگاههای کنترل ، نسبت به ایجاد کارخانه ای پیشرفته و مجهز جهت تولید محصولات فوق اقدام نمایند.

مهندسی معکوس ممکن است در رفع معایب و افزایش قابلیت های محصولات موجود نیز مورد استفاده قرار بگیرد. به عنوان مثال در آمریکا ، مهندسی معکوس توسط شرکت " جنرال موتور" بر روی محصولات کمپانی "فورد" و نیز بر عکس ، جهت حفظ وضعیت رقابتی و رفع نواقص محصولات به کار برده می شود. 

بسیاری از مدیران کمپانی های آمریکایی ، هر روز قبل از مراجعه به کارخانه ، بازدیدی از جدیدترین محصولات عرضه شده در فروشگاه ها و نمایشگاه های برگزار شده انجام داده و جدیدترین محصولات عرضه شده مربوط به محصولات کمپانی خود را خریداری نموده و به واحد تحقیق و توسعه تحویل می دهند تا نکات فنی مربوط به طراحی و ساخت محصولات مذکور و آخرین تحقیقات ، هر چه سریعتر در محصولات شرکت خود نیز مورد توجه قرار گیرد.

جالب است بدانید که مهندسی معکوس حتی توسط سازندگان اصلی نیز ممکن است به کار گرفته شود، زیرا به دلایل متعدد ، نقشه ها ی مهندسی اولیه با ابعاد واقعی قطعات ( مخصوصا زمانی که قطعات چندین سال پیش طراحی و ساخته و مکرر اصلاح شده است) مطابقت ندارد براین مثال جهت نشان دادن چنین نقشه هایی با ابعاد واقعی قطعات و کشف اصول طراحی و تلرانس گذاری قطعات ، بخش میکرو سویچ شرکت honywell از مهندسی معکوس استفاده نموده و با استفاده از سیستم اندازه گیری CMM ( Coordinate measuring machine ) با دقت و سرعت زیاد ابعاد را تعیین نموده و به نقشه های مهندسی ایجاد شده توسط سیستم CAD منتقل می کنند.متخصصین این شرکت می گویند که روش مهندسی معکوس و استفاده از ابزار مربوطه ، به نحو موثری زمان لازم برای تعمیر و باز سازی ابزار آلات ، قالب ها و فیکسچرها ی فرسوده را کم می کند و لذا اظهار می دارند که : " مهندسی معکوس زمان اصلاح را به نصف کاهش می دهد. "

مهندسین معکوس علاوه بر اینکه باید محصول موجود را جهت کشف طراحی مورد بررسی قرار دهند، باید مراحل بعد از خط تولید یعنی انبارداری و حمل و نقل را از کارخانه تا مشتری و نیز قابلیت اعتماد را در مدت استفاده مفید مورد تجزیه و تحلیل قرار دهند. چرا که مثلا فرایند آنیلینگ مورد نیاز قطعه ، ممکن است برای ایجاد مشخصات مورد نظر در هنگام عملکرد واقعی محصول یا در طول مدت انبار داری و حمل و نقل طراحی شده و لزوم وجود آن تنها در هنگام اجرای مراحل مذکور آشکار خواهد شد.

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

از سوی دیگر مهندسین معکوس باید عوامل غیر مستقیمی را که ممکن است در طراحی و تولید محصول مذکور تاثیر بگذارند ، به دقت بررسی نماید.به دلیل اینکه بسیاری از این موارد با توجه به خصوصیات و مقتضیات زمانی و مکانی ساخت محصول مورد نظر ، توسط سازندگان اصلی ، توجیه پذیر است اما ماجرای آن به وسیله مهندسین معکوس فاجعه ساز باشد. مثلا فرایند تولید قطعات تا حدود قابل بستگی به تعداد محصولات مورد نیازو … د ارد. اگر تعداد محصولات مورد نیاز درکشور ثانویه بسیار کمتر از کشور اصلی ، که در حد جهانی و بین المللی فعالیت می کند ، باشد ؛ پس به عنوان مثال تعیین فرایند یک قطعه با باکالیتی ( نوعی پلیمر) از طریق ساخت قالب های چند حفره ای با مکانیزم عملکرد خود کار با توجه به معضلات پخت قطعه در داخل قالب ، می تواند برای مهندسین معکوس فاجعه ساز شود_ اگر که این مهندسان از فرایندهای ساده تر با توجه به تیراژ تولید محصول و نیز خصوصیات تکنولوژیکی کشور خود استفاده نکنند. بنابراین مرحله بعد از کشف طراحی، تطبیق طراحی انجام شده بر مقتضیات زمانی و مکانی کشور ثانویه می باشد که باید به دقت مورد توجه متخصصین مهندسی معکوس واقع شود.

در پایان می توان گفت که : " گرچه ممکن است مهندسی معکوس یک کاربرد غیر معقول و نامناسب از کاربرد هنرو علم مهندسی به نظر برسد اما یک حقیقت از زندگی روزمره ما به شمار می رود.

تعاريف ديگر از مهندسي معكوس:
کایزن
کایزن چیست؟ کایزن یک واژه ژاپنی است که از لغت «KAI» به معنای تغییر و «ZEN» به معنای بهبود تشکیل شده است. این مفهوم دارای دو پایه اساسی که عبارتند از بهبود مستمر و مشارکت کلیه کارکنان.

فلسفه کایزن عبارت است از رشد و توسعه تدریجی و همیشگی از طریق بهتر انجام دادن کارهای کوچک به منظور نیل به استانداردهای بالاتر و بهتر. کایزن به مفهوم بهبود مستمر و تحولی دائمی است و توأم با مشارکت همه افراد در یک شرکت یا سازمان. کایزن مفهومی است که بیشتر شیوه های خاص ژاپنی مثل مشتری گرایی&، کنترل کیفیت جامع و تولیـــد به موقع و نظام پیشنهادات و... را دربرمی گیرد و از همین جهت این واژگان تقریباً مترادف با کایزن شده اند.

از ویژگیهای جالب کایزن عدم نیاز قطعی آن به فناوری پیچیده یا آخرین دستاوردهای فناوری است.

دکتر دمینگ خطاب به ژاپنی ها اظهار داشت «شما می توانید کالای با کیفیت تولید کنید، برای بقا در بازار بــــــاید راجع به مصرف کننده تحقیق کنید، به آینده بنگرید. شما می توانید ازطریق کنترل کیفیت فرایند و نیز مشخصه هایی که درحد ممکن تغییرپذیرند همچنین درباره مصرف کننده و طراحی مجدد تولیدات به مقصود برسید. سعی نکنید تنها سازنده باشید آن هم برای فروش بلکه محصول را طراحی مجدد کنید و سپس دوباره فرایند را تحت کنترل درآورید. این کار دوباره و دوباره ادامـــــه می یابد و کیفیت همچنان افزایش می یابد».

بحث کیفیت و بهبود پیش از آنکه در ژاپن نهادینه شود در غرب پی ریزی شد.

درخصوص کایزن و کیفیت در ژاپن و غرب ملاحظه می شود غرب به روشهای مبتکرانه و جدید و نوآوری برای تحقق کیفیت تاکید می ورزد ولی در روش کایزن نیازی به فناوری پیچیده و یا آخرین دستاوردهای فناوری نیست. محور مباحث کایزن و نوآوری در غرب و اروپا کیفیت محصول تولیدشده برای تصاحب سهم بیشتری از بازار است و طرفداران کایزن اعتقاد به اصلاحات تدریجی و جزئی دارند و معتقدند نوآوری با اصلاحات کلی به عمل آمده در وضع موجود ازطریق سرمایه گذاری وسیع در فناوری و تجهیزات جدید در غرب به وجود آمده است.
روش مهندسی مجدد روش اصلاح فرایندها باتوجه به آخرین دستاوردهای فناوری است. یعنی اگر بخواهیم باتوجه به آخرین دستاوردهای فناوری مجدداً آغاز کنیم چگونه آغاز می کنیم. بنابراین، هیچ وجه مشترکی بین دیدگاه مهندسی مجدد و کایزن که توجهی به آخریـــن دستاوردهای فناوری ندارد، دیده نمی شود.

کایزن به بهبود وضعیت موجود می اندیشد و مهندسی مجدد به آنچه که باید باشد. برای طرح ریزی مجدد، اینکه افراد و شرکتها دیروز کارها را چگونه انجام می دادند اهمیتی ندارد. دیدگاه کایزن و مجموعه تحت چتر کایزن مثل
TQM وJIT و نظام پیشنهادات و... ازطریق مساعــــدت بخشهای مختلف سازمان اجرا می شود ولی مهندسی مجدد ازطریق نخبگان در صنعت و فنــاوری و کارکنان اجرایی اجرا می شود. به عبارت دیگــــر، مهندسی مجدد به وسیلـــــه متخصصان اجرا و طرح ریزی می شود ولی در مجموعه چتر کایزن با مشارکت جمعی.

TQM بهسازی مستمر کلیه مراحل و فعالیتهای تولیدی ازطریق همکاری و مساعدت بخشهای سازمان است اما در مهندسی مجدد ممکن است کلیه مراحل تولید بهسازی گردد و یا کلاً از گردونه فعالیت خارج شود. مهندسی مجدد بیشتر روی حذف لایه های اضافی سازمان تاکید دارد.

مهندسی مجدد برای رسیدن به کیفیت محصول، فرایندها را اصلاح می کند و یا بهترین فرایند را جایگزین می سازد ولی در کایزن بهبود مستمر و تدریجی است و کیفیت محصول با بهبود مستمر و تدریجی ایجـــاد می شود و از روش مهندسی معکــــــوس بهره برداری می گردد، و غرب با خلاقیت و نوآوری به دنبال آن است که کیفیت محصول تولیدشده را ارتقا بخشد.

شرط زمان برای مهندسی مجدد اصل و رکن است ولی درکایزن زمان برای تصاحب سهم بازار رکن نیست. مهندسی مجدد انقلابی و سریع است ولی کایزن رفرم است و حرکت آرام است.

بنابراین، مشخص است که مهندسی مجدد و کایزن و مجموعه تحت چتر کایزن دو روش مستقل و متفاوت از هم هستند که قابل جمع شدن با هم نیستند و در راه رسیدن به هریک از آنها نمی توان به روش دیگرنظر داشت. حال اگر وجوه مشترکی هم داشته باشند در اجرای طرح اهمیتی ندارد. اما سرعت رشد اختراع در ژاپن و شرق آسیا به قدری است که غرب نیز از تکیه بر نبــوغ مخترعان دست برداشته و به چاره اندیشــــی پرداخته و به مهندسی مجدد رو آورده است.

نکته مهم دیگری که موجب اشتباه برخی را فراهم کرده است واژه مهندسی معکوس (
REVERSE ENGINEERING) است که گاهی به جای مهندسی مجدد درنظر می گیرند. در تعریف مهندسی معکوس آورده اند «ساخت مجدد محصول در یک فرم و شکل جدید با مشخصات عملیاتی مناسب تر را مهندسی مجدد گویند که طی فرایند مهندسی معکوس محصولات و سیستم های موجود برای کشف طراحی های آنها با استفاده از اصول مهندسی مستقیم (FORWARD ENGINEERING) و تجدید ساختار این اجرای باارزش از توسعه فناوری انجام می پذیرد>».

طرفداران مهندسی مجدد بدانند که اشتباه آشکاری است که مهندسی معکوس روشی برای دسترسی به فناوری از روی فناوری و یا محصولات موجود است.
در مهندسی معکوس، محققان سعی در به دست آوردن مدارک و نقشه های طراحی محصول می کنند تا طی مراحل نمونه سازی و نیمه صنعتی در صورت لزوم، ساخت و تولید محصول طبق مشخصات و استانداردهای فنی محصول الگو، انجام پذیرد. از این جهت، مهندسی معکوس را مشابه سازی، کپی سازی، نسخه برداری و یا تقلیدی آگاهانه قلمداد کرده اند. درحالی که مهندسی مجدد یک برداشت نوین در مدیریت در رابطه با تغییر فرایند فعالیت یک سازمان است.


مهندسی نوآوری
نوآوری ازجمله واژه هایی است که تعریف جامعی ندارد و معنی آن در طول زمان دچار تغییر شده است. برخی نوآوری را همانند اختراع می دانند درحالی که نوآوری (INNOVATION) با اختراع (INVENTION) فرق دارد. نوآوری وسیعتر از اختراع است. اختراع دستیابی به چیزی یا روشی جدید است و حاصل اختراع محصولی است که مشتری آن، محققان و متخصصان هستند و نوآوری معرفی یا کاربرد چیزی یا روشی نوین است که حاصل نوآوری محصولی است که مشتری آن عموم مردم و مصرف کنندگان معمولی هستند.

اختراع همبستگی نزدیکی با اکتشاف دارد، زیرا اکتشافات اغلب به اختراع منجر می شوند ولی اختراع با خلاقیت نیز تفاوت دارد. اختراع نتیجه فعالیتهای علمی و تجربی است درحالی که خلاقیت عموماً فعالیتی آفرینشی و هنری است.

اختراع زمانی به نوآوری تبدیل می شود که در قلمرو اقتصادی به صورت کالاهای تولیدشده یا فرایندهای تازه بهبود یافته تجلی کند. برخی نیز نوآوری را به نوآوری تکنولوژیکی، نوآوری محصول و نوآوری فرایند تقسیم بندی کرده اند.

نوآوری و فرایند را نوآوری بنیادی در فناوری تولید محصول (در قالب تجهیزات جدید یا روشهای مدیریتی و یا هر دوی آنها) می دانند و معتقدند نوآوری فرایند و محصول کاملاً به یکدیگر وابسته اند و هرچه نرخ نوآوری محصول کاهش می یابد نرخ رشد نوآوری فرایند افزایش می یابد.

پیتر دراکر در سال 1991 درخصوص نوآوری مـــی گوید: نوآوری عمدتاً به آنچه می توانیم آن را کنارگذاری سازمان یافته بنامیم مربوط می شود.
اقتصاددان فرانسوی ژان باتیست سی (
J.B.SAY) در دویست سال پیش عنوان پیشتاز را رواج داد و منظورش صدور اعلامیــه ای بود که در آن به معرفی افراد خراب کننده و به هم زننده سازمان کهنه بپردازند. پس از وی «شامپیتر» تنها اقتصاددان نوینی است که پیشتازی را جدی گرفته و آن را تخریب سازنده نامید.

برای رسیدن به جانشینی نو و بهتر، به ناچار باید کهنه ها، رنگ باخته ها، منسوخ شده ها و بی بازده ها، همراه با اشتباهها، لغزشها و کجرویهای ناشی از آنها را دور ریخت.

چنانچه سازمانها نتوانند از دست زباله ها رهایی یابند خود را مسموم خواهندکرد. آنها بایستی به تخریب سازمان یافته بپردازند و این کاری بس مشکل است زیرا بیشتر سازمانها احساس ژرفی نسبت به آنچه ساخته اند پیدا می کننـــــــد که دل کندن از آنها را دشوار می سازد...

تمرین بودجه بندی دوباره و از نقطه صفر، مدیران را وامی دارد تا هر فرآورده و روشی را که در سازمان موجود است بدون نیاز به بررسی عملکرد هریک از کارکنان دوباره ارزیابی کرده و بپرسند که اگر فلان فرآورده را در میان تولیدات خود نداشتیم و تازه می خواستیم بسازیم، آیا با داشتن اطلاعات کنونی آن را همین گونه می ساختیم که اکنون هست؟ چنانچه پاسخ منفی باشد فوراً نگویید که بهتر است که از یک گروه مشاوران مدیریت دعوت کنیم تا ما را راهنمایی کنند. بلکه از خود بپرسید پس چه باید می کردیم؟ در برخی موارد پاسخ ساده کردن کار است و در پاره ای از موارد بایستی همه فرایند را متوقف ساخت و دگرگون کرد. نکته مهم آن است که باید کاری کرد و در آن صورت سازمان آماده نوآوری است.

دستــاویز متداولی که اختراع تنها ویژه نابغه هاست، دیگر رنگی ندارد. همه شرکتها، صرفنظر از رشته کاری، اینک می توانند خود را به گونه ای سازمان دهند که توان پرداختن به نوآوری و کارآفرینی هدفدار را داشته باشند.

نوآوری نظام یافته عبارت است از «جستجو درپـــی دگرگونیهای هدفدار و سازمان یافته است که در سایه تجزیه و تحلیل نظام یافته فرصتها ممکن است که نوآوریهای اقتصادی و اجتماعی به بار آورد».

سیر تحول ایجادشده در مفهوم نوآوری بیانگر آن است که غرب نیز نوآوری را صرفاً اختراع نمی داند و برخلاف تصـــــــور نظریه پردازان کایزن در تعاریف جدید، نوآوری همیشه با اصلاحات کلی ازطریق سرمـــــایه گذاری وسیع در فناوری ایجاد نمی گردد.

بحث نوآوری به معنای کنارگذاشتن سازمان یافته و تخریب سازنده بودجه بندی دوباره و از نقطه صفر با بحث مهندسی مجدد بسیار نزدیک هستند و ممکن است برخی به دلیل نزدیکی مباحث دچار اشتباه شوند.

حال بررسی می کنیم آنچه که مهندسی مجدد را به عنوان یک تئوری و متدلوژی از مباحث نوآوری جدا می کند چیست؟
چرا مهندسی مجدد یک منشور انقلابی است؟

همانگونه که می دانیم تا سال 1991 در واژگان مدیریت نامی از مهندسی مجدد برده نشده و مایکل همر اولین کسی است که واژه مهندسی مجدد را وارد ادبیات مدیریت کرده است، مقالات بسیاری از سوی سایر اندیشمندان منتشر گردیده که به ظاهر قرابت بسیاری با مباحث مهندسی مجدد دارد ولی مهندسی مجدد نیستند. پیتر دراکر در مقاله که در سال 1991 منتشر کرد مطالبی آورده اند که به ظاهر بسیار نزدیک با مهندسی مجدد است (ولی کسی مدعی نشده است که مباحث دراکر مهندسی مجــدد است). دراکر می نویسد اگر می خواستیم فلان فرآورده را تازه بسازیم با داشتن اطلاعات کنونــــی آن را همین گونه می ساختیم که اکنون هست.

چنانچه پاسخ منفی باشد، از خود بپرسید پس باید چه می کردیم، در پاره ای از موارد پاسخ ساده کردن کار است... در پاره ای از موارد بایستی همه فرایند را متوقف و دگرگون کرد.

اما دلیل اینکه مطالب فوق مهندسی مجدد نیستنـــــد این است که در مهندسی مجدد نمی پرسند چگونه می توانیم کاری را که انجام می دهیم بهتر انجام دهیم. یا چگونه می توانیم کاری را که انجام می دهیم تندتر انجام دهیم یا اینکه چطور می توان کاری را با هزینه پایین تر انجام داد. بلکه به جای آن می پرسند کاری را که انجام می دهیم چرا انجام می دهیم، واقعاً چرا؟

طرح ریزی دوباره یا مهندسی مجدد به این معنا نیست که آنچه را که از پیش وجود دارد ترمیم کنیم یا تغییراتی اضافی بدهیم و ساختارهای اصلی را دست نخورده باقی بگذاریم. طرح ریزی دوباره وصله کردن پارگیها یعنی تجهیز موقت سیستم های موجود برای بهتر کارکردن نیست. مهندسی مجدد آنچه را هست نادیده می انگارد و بر آنچه باید باشد متمرکز می کند. یعنی نادیده گرفتن تمام ساختارها و روشهای موجود و ابداع راههای کاملاً تازه در دیدگاه نوآوری می توان به اصلاحات جزئی نیز پرداخت ولی از دیدگاه مهندسی مجدد اصلاحات جزئی نیاز به مهندسی مجدد ندارد، هرچند ممکن است اصلاحات مهندسی مجدد در برخی بخشها اصلاحات و بهبود جزئی نسبت به گذشته ایجاد کند. مهندسی مجدد اصولاً برای اصلاحات چشمگیر که مستلزم تخریب ساختارهای قدیمی است به کار گرفته می شود.

تفاوت عمده بحث نوآوری با مهندسی مجدد در نحوه دگرگون سازی است (که هم «دراکر» و هم «همر» بدان اعتقاد دارند). شیوه دگرگون سازی که مبتنی بر اصلاح فرایندها باشد و از اصلاح فرایندها به اصلاح سازمان برسیم شیوه مهندسی مجدد است که «همر» آن را ارائه کرد. در صورتی که در دگرگون سازی موردنظر «دراکر» این شیوه ارائه نشده و به سایر شیوه ها (مثل تنظیم بودجه برمبنای صفر(
ZERO-BASED BUDGETING) و کارآفرینی نظر داشته اند که متد خاص خود را دارند.

بــرخی نظریه پردازان، مهندسی مجدد را رده بندی کرده و معتقدند سه رده بهبود فرایند، طراحی مجدد فرایند و دگرگون سازی سازمان برای مهندسی مجدد وجود دارد که بهبود فرایند پایین ترین رده فرایند مهندسی مجدد است و بهبــود کل آن از ابتدا تا انتهای فرایند را دربرنمی گیرد. به نظر می رسد، فلسفه مهندسی مجدد با مهندسی فرایند خلط شده و به این نظریه منجر گردیده است. در فرایندهای کار یا جریان کار سوالهای این چنینی مطرح است. آیا جریان کار خوب است، در کجا کارها کند می شوند و یا شتاب می گیرند؟ آیا در جریان کار گلوگاه وجود دارد؟ آیا مراحل کار به موقع هستند؟

بحث مهندسی مجدد این نیست که کاری که انجام می دهیم بهتر انجام دهیم یا تندتر انجام دهیم یا با هزینه پایین تر انجام دهیم، بحث این است که چرا انجام می دهیم و چرا با این شیوه انجام می دهیم. در مهندسی مجدد تغییر معیار عملکرد از فعالیت به نتیجه فعالیت است. مشتری کاری ندارد گردش کار ما چقدر خوب صورت می گیرد. در جریان کار گلوگاه وجود دارد یا خیر؟ مشتری محصول و خدماتی را می خواهد که برایش دغدغه و ناراحتی ایجاد نکند و به سهولت قابل دریافت باشد. بنابراین، هدف طرح ریزی مجدد ومهندسی دوباره فرایندها هستند نه سازمانها. 

علل عدم موفقیت مهندسی مجدد

 

مهندسی مجدد یک شعار یا علامت مرغوبیت کالا وخدمات نیست، بلکه لباس مهندسی مجدد برای بنگاههایی برازنده خواهدبود که قابلیت پذیرش آن را داشته باشند در غیر این صورت مفید که نیست بلکه هزینه گزافی است که بر بنگاه اقتصادی و یا نهاد اجتماعی تحمیل می شود. بنگاههای اقتصادی که انحصار کالا و خدماتی را داشته باشند و بازار آنها تضمین شده باشد و نخواهند وارد بازار جهانی شوند به هیچ وجه جایز نیست مهندسی مجدد کننــــد. البته به شرطی که پیش بینی برای ادامه انحصار وجود داشته باشد.

مهندسی مجدد شیوه ای از بهبود و اصلاح است که ایجاد جهش می کند. بنابراین، بنگاههایی که نیاز به جهش ندارند می توانند از سایر روشهای بهبود و اصلاح بهره گیرند. بحث زمان در مهندسی مجدد بسیار حیاتی است و باتوجه به شکل وموضوعهای مطرح، مدت زمان انجام اصلاحات به صورت جهشی تعیین می گردد. مثلاً فعالیتی که با به کارگیری سایر روشهای بهبود و اصلاح به بیست سال زمان نیاز دارد اگر در روش مهندسی مجدد در پنج سال صورت گیرد جهش محسوب می گردد و همین طور فعالیتی که با سایر روشهای بهبود و اصلاح پنج سال زمان نیاز داشته باشد اگر در دو سال صورت گیرد جهش به شمار می رود.

سازمانهایی که مشکلی به نام زمان ندارند و یا احتیاج به اصلاحات جزئی دارند بهتر است از سایر روشها استفاده کنند و یقیناً اگر چنین سازمانهایی ازمهندسی مجدد استفاده کنند موفق نخواهندبود، زیرا مهندسی مجدد برای ترمیم آنچه که از پیش وجود دارد نیست. مهندسی مجدد تجهیز موقت سیستم های موجود برای بهتر کارکردن نیست و آنهایی که می پندارند فناوری تنها عنصر اســاسی در طرح ریزی مجدد است در اشتباه هستند.

تشخیص مشکلات در بنگاه اقتصادی و نهادهای اجتماعی و پیشنهاد درمان مناسب برای اصلاح و بهبود آنها بالاترین تخصص و تجربه در مدیریت است. برخی سازمانها ممکن است با ایجاد یک سیستم نظام پیشنهادات اکثر مشکلاتشان مرتفع گردد. بنابراین، مهندسی مجدد برای سازمانهایی که بدان نیاز ندارند، موفق عمل نمی کند.

عامل دیگر عدم موفقیت مهندسی مجدد، تلفیق آن با سایر روش بهبود و اصلاح است. برخی گمان کرده اند آغاز راه اصلاحات با مهندسی مجدد و ادامه اصلاحات با
TQM است و برخی نیز معجونهای مختلفی ارائه کرده اند.

مهندسی مجدد در سایه حمایت قوی مدیریت ارشد و به کارگیری نیروهای مرتبط با فرایند و آموزش مناسب بـــــــــه کلیه دست اندرکاران امکان موفقیت دارد و چنانچه ارتباطات موثر و آموزش لازم و حمایت کافی صورت نگیرد مهندسی مجدد با ناکامی مواجه خواهدشد. در اجرا نیز بیشتر ناکامیهای مهندسی مجدد ناشی از شکست در رهبری است.


ضرورت مهندسی مجدد
مهندسی مجدد اگر چه برای اولین بار توسط مایکل همر در ادبیات مدیریت وارد شد ولی برای اولین بار توسط مایکل همر صورت نگرفت، بلکه انجام تغییرات اساسی در بنگاههای اقتصادی دچار بحران شده، تئوری مهندسی مجدد را در اندیشه مایکل همر شکوفا کرد.

بی شک مهندسی مجدد در طول تاریخ بشر بارها و بارها اتفاق افتاده است و مبدع مهندسی مجدد مایکل همر نیست. وی از نهضت حضرت موسی (ع) تحت عنوان مهندسی مجدد یاد می کند و می گوید: ما می دانیم که پیامبران دو دسته اند، برخی صاحب کتاب و شـــــریعت و ایجادکننده نهضت و برخی ادامه دهنده نهضت و پشتیبان نهضت ایجاد شده و مسئول حفظ و صیانت از نهضت بودند. پیامبرانی که ایجاد نهضت کردند مثل حضرت موسی(ع)، عیسی(ع) و حضرت محمد(ص) با اقدامات اساسی خود مهندسی مجدد کردند.

دینی که تحریف شده و از مسیر خود خارج شده به منظور بازگشت به مسیر اصلی نیاز به مهندسی مجدد دارد. اکثر مکاتب جهانی نیز معتقدند در آخرالزمان مصلحی ظهور خواهدکرد و عدالت اجتماعی را به ارمغان خواهدآورد. شیعیان نیز اعتقاد دارند زمانی که دین اسلام تحریف شده و فساد درمیان مردم رایج می شود اما موعود ظهور خواهدکرد. در اعتقادات شیعه وجود دارد که امام زمان آخرین اطلاعات و علوم را در اختیار دارد و اصلاحات را براساس آخــــرین دستاوردهای فناوری پی ریزی می کند.

بنابراین، می توان نتیجه گرفت مهندسی مجدد تنها یک ضرورت برای بنگاههای اقتصادی نیست بلکه الزامی برای بقای هر نهاد اجتماعی است. همه نهادها که دارای بحران هستند و یا پیش بینی می کنند دچار بحران خواهندشد و حتی نهادهایی که در اوج اقتدار هستند نیز می توانند برای تعالی و در اوج ماندن از مهندسی مجدد بهره مند گردند.

در تئوری استراتژی رقابت آمیز تمام سازمانها نه تنها درگیر رقابت می شوند بلکه با سرعت تغییر در رقابت مواجه می گردند. سرعتی که با هر پیشرفت فناوری جدید، هر رقیب خــــــارجی و هر موافقتنامه تجاری بین المللی جدید تحت تاثیر قرار گرفته و شتاب می گیرد. استراتژی رقابت براین نکته استوار است که با تهدیدها مواجه شده و روی فرصتها سرمایه گذاری کنیم. استراتژی رقابتی درنتیجه پاسخ به سه سوال به وجود آمده است:

1 - سازمان اکنون چه می کند؟
2 - چه اتفاقی در محیط سازمان می افتد؟
3 - سازمان در مقابل باید چه بکند؟
مهندسی مجدد رویکرد برنامه ریزی و کنترل تغییر است: توانایی ارزیابی، برنامه ریزی و اجــرای تغییر به صورت مداوم، توانایی تجزیه و تحلیل اثرات مرتبط با تغییرات.

اگر سابقه صنعت و چگونگی رشد آن در کشورهای جنوب شرقی آسیا را مورد مطالعه قرار دهیم به این مطلب خواهیم رسید که در کمتر مواردی این کشورها دارای ابداعات فن آوری بوده اند و تقریبا در تمامی موارد کشورهای غربی (آمریکا و اروپا) پیشرو بوده اند. پس چه عاملی باعث این رشد شگفت آور و فنی در کشورهای خاور دور گردیده است ؟

در این نوشتار یه یکی از راهکارهای این کشورها در رسیدن به این سطح از دانش فنی می پردازیم .

در صورتی که به طور خاص کشور ژاپن را زیر نظر بگیریم، خواهیم دید که تقریبا تمامی مردم دنیا از نظر کیفیت محصولات آنها را تحسین می کنند ، ولی به آنها ایراد می  گیرند که با کپی برداری از روی محصولات دیگران به این موفقیت دست یافته اند.

این بخش اگر هم که درست باشد و در صورتی که کپی برداری راهی مطمئن برای رسیدن به هدف باشد چه مانعی داردکه این کار انجام شود. این مورد ، به خصوص در باره کشورهای در حال توسعه و یا جهان سوم با توجه به شکاف عمیق فن آوری بین این کشورهای و کشورهای پیشرفته دنیا ، امری حیاتی به شمار می رود و این کشورها باید همان شیوه را پیش بگیرند ( البته در قالب مقتضیات زمان و مکان و سایر محدودیت ها ). به عنوان نمونه ، قسمتی از تاریخچه صنعت خودرو و آغاز تولید آن در ژاپن را مورد بررسی قرار می دهیم :

تولید انبوه خودرو در ژاپن قبل از جنگ جهانی دوم و در سال 1920 بوسیله کارخانه های " ایشی کاواجیما " آغاز شد که مدل ژاپنی فورد آمریکایی را کپی کرده و به شکل انبوه به بازار عرضه نمود .

همچنین شورلت ژاپنی AE جزو اولین خودروهای کپی شده آمریکایی توسط ژاپنی ها بود که به تعداد زیاد تولید می شد. سچس با تلاش فراوانی که انجام شد ( آنهم در شرایط بحرانی ژاپن در آن دوره ) مهم ترین کارخانه خودروسازی ژاپن یعنی "تویوتا" در سال 1932 فعالیت خود را با ساخت خودرویی با موتور " کرایسلر " آغاز نمودو در سال 1934 نوع دیگری از خودرو را با موتور " شورلت " ساخته و وارد بازار نموده و از سال 1936 ، اولین تلاشها برای ساخت خودرویی تمام ژاپنی آغاز شد.البته تا مدت ها ژاپنی ها مشغول کپی برداری از اتومبیل ها ی آمریکایی و اروپایی بودند. آنها خودروی پاکارد و بیوک آمریکایی و رولزرویس ، مرسدس بنز و فیات اروپایی را نیز تولید کردند که همین تولیدها زمینه ساز گسترش فعالیت خودروسازی ژاپن شد و سرانجام در دهه 1960 پس از سعی و کوشش فراوان اولین اتومبیل تمام ژاپنی که دارای استاندارد جهانی هم بود ساخته و به بازار عرضه شد.

در تمامی مطالب فوق رد پای یک شگرد خاص و بسیار مفید به چشم می خورد که " مهندسی معکوس" (Reverse engineering  )  نام دارد. مهندسی معکوس روشی آگاهانه برای دستیابی به فن آوری حاضر و محصولات موجود است . در این روش متخصصین رشته ها ی مختلف علوم پایه و کاربردی از قبیل مکانیک ، فیزیک و اپتیک ، مکاترونیک، شیمی پلیمر، متالورژی، الکترونیک و... جهت شناخت کامل نحوه عملکرد یک محصول که الگوی فن آوری مذکور می باشد، گروه های تخصصی را ایجاد می کنند و با تجهیزات پیشرفته و دستگاههای دقیق آزمایشگاهی به همراه سازماندهی مناسب تشکیلات تحقیقاتی و توسعه  ( R&D ) سعی در بدست آوردن مدارک و نقشه ها ی طراحی محصول فوق دارند تا پس از مراحل نمونه سازی (Prototyping ) و در صورت لزوم ساخت نیمه صنعتی (Pilot plant  ) تولید محصول را طبق استاندارد فنی محصول الگو آغاز کنند. همانگونه که اشاره شد استفاده از روش مهندسی معکوس برای کشورهای در حال توسعه روش بسیار مناسبی جهت دسترسی به فن آوری ، رشد و توسعه آن می باشد. این کشورها که در موارد بسیاری از فن آوری ها در سطح پایینی قرار دارند ، در کنار روشها و سیاست ها ی دریافت دانش فنی، مهندسی معکوس را مناسب ترین روش دسترسی به فن آوری تشخیص داده و سعی می کنند با استفاده از روش مهندسی معکوس ، اطلاعات و دانش فنی محصولات موجود ، مکانیزم عمل کرد و هزاران اطلاعات مهم دیگر را بازیابی کرده و در کنارآن با  روشهای مهندسی مستقیم (Forward enineering ) و روشهای ساخت قطعات ،و استفاده از تجهیزات و تسترهای خط مونتاژ و ساخت مانند قالب ها ، گیج و فیکسچرها و دستگاههای کنترل ، نسبت به ایجاد کارخانه ای پیشرفته و مجهز جهت تولید محصولات فوق اقدام نمایند.

مهندسی معکوس ممکن است در رفع معایب و افزایش قابلیت های محصولات موجود نیز مورد استفاده قرار بگیرد. به عنوان مثال در آمریکا ، مهندسی معکوس توسط شرکت " جنرال موتور" بر روی محصولات کمپانی "فورد" و نیز بر عکس ، جهت حفظ وضعیت رقابتی و رفع نواقص محصولات به کار برده می شود.

بسیاری از مدیران کمپانی های آمریکایی ، هر روز قبل از مراجعه به کارخانه ، بازدیدی از جدیدترین محصولات عرضه شده در فروشگاه ها و نمایشگاه های برگزار شده انجام داده و جدیدترین محصولات عرضه شده مربوط به محصولات کمپانی خود را خریداری نموده و به واحد تحقیق و توسعه تحویل می دهند تا نکات فنی مربوط به طراحی و ساخت محصولات مذکور و آخرین تحقیقات ، هر چه سریعتر در محصولات شرکت خود نیز مورد توجه قرار گیرد.

جالب است بدانید که مهندسی معکوس حتی توسط سازندگان اصلی نیز ممکن است به کار گرفته شود، زیرا به دلایل متعدد ، نقشه ها ی مهندسی اولیه با ابعاد واقعی قطعات ( مخصوصا زمانی که قطعات چندین سال پیش طراحی و ساخته و مکرر اصلاح شده است) مطابقت ندارد براین مثال جهت نشان دادن چنین نقشه هایی با ابعاد واقعی قطعات و کشف اصول طراحی و تلرانس گذاری قطعات ، بخش میکرو سویچ شرکت honywell از مهندسی معکوس استفاده نموده و با استفاده از سیستم اندازه گیری CMM ( Coordinate measuring machine ) با دقت و سرعت زیاد ابعاد را تعیین نموده و به نقشه های مهندسی ایجاد شده توسط سیستم CAD منتقل می کنند.متخصصین این شرکت می گویند که روش مهندسی معکوس و استفاده از ابزار مربوطه ، به نحو موثری زمان لازم برای تعمیر و باز سازی ابزار آلات ، قالب ها و فیکسچرها ی فرسوده را کم می کند و لذا اظهار می دارند که : " مهندسی معکوس زمان اصلاح را به نصف کاهش می دهد. "

مهندسین معکوس علاوه بر اینکه باید محصول موجود را جهت کشف طراحی مورد بررسی قرار دهند، باید مراحل بعد از خط تولید یعنی انبارداری و حمل و نقل را از کارخانه تا مشتری و نیز قابلیت اعتماد را در مدت استفاده مفید مورد تجزیه و تحلیل قرار دهند. چرا که مثلا فرایند آنیلینگ مورد نیاز قطعه ، ممکن است برای ایجاد مشخصات مورد نظر در هنگام عملکرد واقعی محصول یا در طول مدت انبار داری و حمل و نقل طراحی شده و لزوم وجود آن تنها در هنگام اجرای مراحل مذکور آشکار خواهد شد.

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

از سوی دیگر مهندسین معکوس باید عوامل غیر مستقیمی را که ممکن است در طراحی و تولید محصول مذکور تاثیر بگذارند ، به دقت بررسی نماید.به دلیل اینکه بسیاری از این موارد با توجه به خصوصیات و مقتضیات زمانی و مکانی ساخت محصول مورد نظر ، توسط سازندگان اصلی ، توجیه پذیر است اما ماجرای آن به وسیله مهندسین معکوس فاجعه ساز باشد. مثلا فرایند تولید قطعات تا حدود قابل بستگی به تعداد محصولات مورد نیازو ... د ارد. اگر تعداد محصولات مورد نیاز درکشور ثانویه بسیار کمتر از کشور اصلی ، که در حد جهانی و بین المللی فعالیت می کند ، باشد ؛ پس به عنوان مثال تعیین فرایند یک قطعه با باکالیتی ( نوعی پلیمر) از طریق ساخت قالب های چند حفره ای با مکانیزم عملکرد خود کار با توجه به معضلات پخت قطعه در داخل قالب ، می تواند برای مهندسین معکوس فاجعه ساز شود_ اگر که این مهندسان از فرایندهای ساده تر با توجه به تیراژ تولید محصول و نیز خصوصیات تکنولوژیکی کشور خود استفاده نکنند.  بنابراین مرحله بعد از کشف طراحی، تطبیق طراحی انجام شده بر مقتضیات زمانی و مکانی کشور ثانویه می باشد که باید به دقت مورد توجه متخصصین مهندسی معکوس واقع شود.

در پایان می توان گفت که : " گرچه ممکن است مهندسی معکوس یک کاربرد غیر معقول و نامناسب از کاربرد هنرو علم مهندسی به نظر برسد اما یک حقیقت از زندگی روزمره ما به شمار می رود.

تهیه ساختار سیستمهای پیچیده نرم‌افزاری با استفاده از مهندسی معکوس

درمورد بسیاری از نرم‌افزارهای پیچیده و متن‌باز با اینکه مستندات خوبی از روش کارکرد سیستم و مشخصات آن وجود دارد، نمودارها و مستندات مهندسی نرم‌افزار در مورد طراحی این سیستمها موجود نمی‌باشد. یکی از راههای تولید این نمودارها انجام عمل مهندسی معکوس بر روی کد منبع این نرم‌افزارها می‌باشد. در این مقاله به بررسی یک روش معروف در مهندسی معکوس سیستمها می‌پردازیم که مخصوصاً درمهندسی معکوس هسته سیستم عامل سیستم عامل لینوکس کاربرد دارد.

مهندسی معکوس

تعریف چیکوفسکی از مهندسی معکوس: مهندسی معکوس فرایند بررسی یک سیستم به منظور بدست آوردن مولفه‌های موجود در سیستم و روابط داخلی این مولفه‌ها و نمایش ساختار سیستم در یک فرم دیگر و در سطح دیگری از تجرد می‌باشد.

مبحث مهندسی معکوس از دو دیدگاه قابل بررسی است:

1- دید فنی:‌ بدست آوردن اطلاعات و ساختار سیستم از منابع فنی موجود مانند کد برنامه٫ مستندات داخل کد برنامه، ماژولهای اجرایی و توضیحات مربوط به روش استفاده از کل سیستم
2- برداشت فردی از سیستم

به طور کلی این فرایند از سه طریق قابل انجام است:


1- از بالا به پایین که در آن از بالاترین سطح تجرد سیستم شروع کرده و به صورت بازگشتی کل زیر بخشها را مورد بررسی قرار می‌دهیم. در این روش از روشی به نام جمع‌آوری مستندات زنده استفاده می‌کنیم. منظور از جمع‌آوری مستندات زنده، انجام مصاحبات و برگزاری جلسات با افراد و برنامه‌نویسانی است که به صورتی با پروژه در ارتباط بوده‌اند و جمع‌آوری اطلاعات از آنها می‌باشد. در این مدل از کلی‌ترین سطح شروع کرده و به تدریج با افزایش میزان اطلاعات خود، مسئله را بصورت ریزتر مورد بررسی قرار می‌دهیم.
2- از پایین به بالا که در آن از پایین‌ترین سطح سیستم شروع کرده و به تدریج به سطوح بالای سیستم می‌رسیم. در این روش با بررسی کد برنامه، قوانین موجود در آن را استخراج می‌کنیم و به تدریج با بدست آوردن روابط موجود بین این قوانین، کلیتهای بیشتری از سیستم را کشف می‌کنیم تا به بالاترین سطح تجرد برسیم.
3- مبتنی بر مدل‌بندی سیستم. در این روش یک مدل ذهنی از این که سیستم به چه شکلی کار می کند در نظر گرفته و به تدریج اطلاعات خود را در این زمینه عمیقتر می‌کنیم و ریز کار سیستم را به دست می‌آوریم.

در بعضی سیستم‌ها ساختارهای از قبل موجود و قابل قبولی وجود دارند که به ساختار مفهومی سیستم معروف هستند. در بسیاری موارد می‌توانیم به جای جمع‌آوری مستندات زنده، از ساختار های مفهومی موجود در زمینه این سیستمها استفاده کنیم. به عنوان مثال در صورتی که بخواهیم مدل هسته یک سیستم عامل را بدست آوریم، ساختارهای مفهومی بسیاری در این زمینه وجود دارد که می‌توان به راحتی از آنها استفاده کرده و به عنوان منبعی قابل اطمینان به آن نگاه کرد.

روشهایی که مطرح شد به عنوان مدلهای کلاسیک مهندسی معکوس مطرح هستند و در مدل‌بندی سیستم‌های پیچیده با مشکل برخورد می‌کنند. به همین منظور از مدلهای دیگری برای بدست آوردن ساختار سیستم‌ها به کمک مهندسی معکوس استفاده می‌شود.

یکی از مدلهای خوب در زمینه مهندسی معکوس مدلی است که در سال ‿۱۹۹۶ توسط زرپاس ارائه شد. این مدل به مدل هیبرید زرپاس معروف است.

در این مدل منابع اطلاعاتی ما شامل قوانین استخراج شده از متن برنامه‌ها،‌ کشف منطق نامگذاری فایلها در سیستم، کشف روند نامگذاری متغیرها و ساختارها در برنامه‌ها، و در نهایت بدست آوردن یک ساختار از این سیستم‌ها و بهینه‌سازی این ساختار، با استفاده از اطلاعات بدست آمده از برنامه‌نویسان و اشخاص مرتبط با این پروژه، می‌باشد.

بدست آوردن قوانین موجود در کد برنامه:

اولین کاری که به منظور مهندسی معکوس یک سیستم انجام می‌شود یدست آوردن قوانین موجود در کد برنامه می‌باشد. برای این منظور کار های مختلفی قابل انجام است:

بررسی ساختار استفاده فایلها از یکدیگر: مثلاً در زبان c بررسی دستورات include باعث می‌شود که بتوانیم اطلاعات با ارزشی از متن برنامه و روابط فایلهای موجود در شاخه‌های کد برنامه بدست آوریم.

بررسی ساختار فراخوانی توابع: در این مرحله،‌ گراف فراخوانی توابع در سیستم را مورد بررسی قرار داده و از طریق آنها قوانین وابستگی بین توابع را بدست می آوریم. بدست آوردن قوانین وابستگی بین توابع، خود به خود باعث کشف قوانین وابستگی فایلها به یکدیگر خواهد شد.

در این مرحله سعی می‌کنیم که فایلهای کد برنامه را مورد بررسی قرار داده و آنها را در گروههای با معنی و مرتبط با هم جمع‌آوری کنیم.

یکی از روشهای این کار استفاده از قوانین نامگذاری فایلها می‌باشد. در واقع در این روش به بررسی نامهای فایلها پرداخته و سعی می‌کنیم رابطه نام فایل با مورد استفاده آن را کشف کنیم و از این طریق مورد استفاده فایل در برنامه را کشف کنیم. به عنوان مثال در بسیاری از مدلهای نرم‌افزارنویسی دو حرف اول نام فایل نشان دهنده گروهی است که فایل به آن تعلق دارد.

حال سعی می‌کنیم این مدل را با اعمال قوانینی از تئوری گراف گسترده‌تر کنیم. فرض کنیم که S یک مجموعه فایل در سیستم ما باشد. در صورتی که کلیه فراخوانیها از خارج از S به داخل مجموعه از طریق یک فایل انجام شود می‌گوییم که این فایل،‌ مجموعه را می‌پوشاند.

برای این منظور نرم‌افزاری طراحی می‌کنیم که بصورت اتوماتیک مجموعه‌هایی که با استفاده از فایل‌های خاص پوشانده می‌شوند را پیدا کند. این فایل در واقع نقطه ورود مجموعه نامیده می‌شود.

بعد از فراهم کردن این مجموعه، بسیاری از فایلها هستند که در هیچ کدام از مجموعه‌ها قرار نمی‌گیرند. در واقع این فایلها بوسیله هیچ فایل دیگری- بگونه‌ای که بتوان آنها را در یک گروه خاص قرار داد- پوشانده نمی‌شوند. برای بررسی وضعیت این فایل‌ها، تنها راه تماس با برنامه‌نویسان سیستم و یا افراد مرتبط با پروژه و یا رجوع به مدل مفهومی سیستم می‌باشد.

حال این توضیحات را بصورت یک ساختار مرحله به مرحله بیان می‌کنیم که به مدل هیبرید زرپاس معروف است.

مدل هیبرید:

مراحل ذکر شده در این مدل الزاماً نباید طبق ترتیبی که ذکر شده انجام شود و مطابق با نیاز سیستم می‌توان ترتیب عمل را تغییر داد.

بعلاوه، می‌توانیم این مدل را بصورت بازگشتی نیز استفاده کنیم به این ترتیب که می‌توانیم برای بدست آوردن ساختار هر زیر سیستم نیز می‌توانیم دوباره از همین مراحل استفاده کنیم.

۱– تعیین مدل دامنه:
اولین قدم در مهندسی معکوس یک سیستم مشخص کردن یک مدل دامنه مناسب برای سیستم می‌باشد. این مدل بنا به انتظار ما از سیستم متفاوت می‌باشد و برای هر سیستم می‌تواند یک مورد خاص باشد.
بعنوان مثال می‌توانیم مدل دامنه خود را ارتباط بین فایلهای یک سیستم در نظر بگیریم و یا نوع اشتمال فایلها در یکدیگر و یا فراخوانی‌های توابع در سیستم و ....
روشن است که مدل دامنه مربوط به یک سیستم شی‌گرا کاملاً با مدل دامنه یک سیستم روال‌گرا متفاوت است.

۲– استخراج قوانین از کد برنامه:
مرحله بعدی استخراج قوانین از کد برنامه می‌باشد. این مرحله معمولاً با استفاده از ابزارهای موجود که به منظور همین عمل ساخته شده‌اند انجام می‌شود.

۳– تقسیم‌بندی سیستم به زیرسیستمها:
این مرحله مانند مرحله قبل یک مرحله اتوماتیک نیست و می‌توان آن را یک مرحله تقریبا اتوماتیک فرض کرد. تقسیم‌بندی به زیرسیستم‌ها نیز به روشهای مختلفی انجام می‌شود. مثلاً بر اساس ساختار شاخه‌های سیستم و یا دسته‌بندی بر اساس نام فایلها.

۴– بهینه‌سازی اطلاعات با استفاده از مستندات زنده:
در این مرحله با استفاده از اطلاعات برنامه‌نویسان مرتبط با پروژه و یا با استفاده از مدل مفهومی سیستم اقدام به تکمیل مدل بدست آمده از مرحله قبلی کرده و.تصحیحات لازم را بر آن سیستم اعمال می‌کنیم.

۵– تشکیل و بهینه‌سازی ترکیب سیستم با استفاده از مستندات زنده:
این مرحل را می‌توانیم به عنوان قسمتی از مرحله قبل نیز به حساب بیاوریم. در این مرحله سعی می‌کنیم طرح و ساختار سیستم را تحت یک مدل بصری و قابل فهم نمایش دهیم‌. در این مرحله یک نمودار گرافیکی استخراج می‌شود که با آن چشم انداز سیستم می‌گوییم.

ابزارهای مهندسی معکوس:

در این بخش به بررسی ابزاری به نام PBS می‌پردازیم. PBS مخفف قفسه کتاب قابل انتقال است.

PBS در واقع یک ابزار قابل انتقال در سیستمهای مختلف می‌باشد که هدف از آن بدست آوردن ساختار یک سیستم نرم‌افزاری بزرگ به گونه‌ای قابل فهم و قابل دسترسی می‌باشد.

یک Bookshelf می‌تواند شامل می‌تواند شامل مستندات، برنامه آتی و هدفهای آتی پروژه، لینکهایی به پروژه‌های دیگر و .... باشد.

یک بوک‌شلف معمولا شامل نمودارهایی می‌باشد که این نمودارها وضعیت زیرسیستمها و ارتباطات بین آنها را نشان می‌دهد. این نمودارها می‌توانند شامل وابستگیهای سیستم باشند و یا در حالتهای جامعتر شامل ارجاعات، فراخوانیها و .. نیز باشند. این نمودارها همان چشم‌انداز هستند که در بخش قبل معرفی شد.

یک چشم‌انداز متشکل از نام زیرسیستم‌ها می‌باشد که بوسیله فلشهایی به یکدیگر متصل شده‌اند . رنگهای مختلف این فلشها نماینده روابط مختلف بین زیرسیستمها می‌باشد. ابزارهای مورد استفاده در PBS با شروع از کد برنامه یک سری فعالیتها را بصورت اتوماتیک انجام داده و در نهایت به نمودار چشم‌انداز پروژه می‌رسد.

ایجاد کننده قوانین سی و سازنده پایگاه قوانین:

این ابزارها در اولین مرحله مسیر مورد استفاده قرار می‌گیرند. ایجاد کننده قوانین سی که به اختصار سی اف ایکس خوانده می‌شود، ابزاری است که با استفاده از آن می‌توان قوانین موجود در کد برنامه را استخراج کرد. این ابزار بر اساس کامپایلر GCC در دانشگاه تورنتو ساخته شده است. ابزار دوم که سازنده پایگاه قوانین خوانده می‌شود، با استفاده از قوانین ایجاد شده توسط سی اف ایکس، پایگاه اطلاعاتی شامل قوانین سیستم ایجاد می‌کند. این پایگاه اطلاعات بر اساس یک زبان ایجاد می‌شود. این زبان TA خوانده می‌شود. یکی از فرمتهای استاندارد مورد استفاده در این زبان فرمت استاندارد ریجی یا RSF می‌باشد که پایگاه اطلاعات مذکور بر اساس این استاندارد ساخته می‌شود.

Grok :

این ابزار، قوانین استخراج شده را دریافت کرده و بر اساس آن، سیستم را به زیر سیستمها تقسیم می‌کند. این تقسیم‌بندی بر اساس تعاریف متغیرها و ساختارها انجام می‌شود و با زبان TA نمایش داده می‌شود. خروجی این برنامه فایل contain.rsf- شامل زیرسیستمهای سیستم و اینکه هر مولفه به چه زیر سیستمی متعلق است- می‌باشد.

lslayout و lsadjust

این ابزار، خروجی مرحله قبل را دریافت کرده و با استفاده از آن یک چشم‌انداز ایجاد می‌کند. این چشم‌انداز نیز با استفاده از همان زبان مورد استفاده در بخشهای قبل ایجاد می‌شود و نمودار گرافیکی آن با استفاده از ابزارهایی مثل lsview قابل مشاهده است. ابزار lsedit نیز برای مشاهده و ویرایش نمودار مورد استفاده قرار می‌گیرد.