# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > مهندسی مجدد و معکوس >  مهندسی مجدد و معکوس یعنی چی؟

## maryamb

لطفا یکی به من بگه منظور از مهندسی مجدد و معکوس چیه؟

----------


## Bahram0110

سلام
یه مثال می زنم

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

----------


## whitehat

دو لينك زير را ببينيد
https://barnamenevis.org/showthread.php?t=67527
https://barnamenevis.org/showthread.php?t=67528

----------


## aram_1987f

ميتونى واسه پيدا كردن توضيحاتِ بيشتر برى به scholargoogle.com اين سايت واسه جستجوی متون تخصصی اغلب استفاده ميشه بعد بنويسى bpr كلى توضیح داستان شکست و داستانهاى موفقيت آميز از اين bpr يا همون مهندسى دوباره پيدا ميكنى 
اگرهم رشتت IT باشه تو دروس تخصصی زياد راجع بش حرف ميزنن 
موفق باشى

----------


## cups_of_java

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

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

----------


## maryam_ch

ميشه بگين چه موقع هايي مهندسي مجدد انجام ميشه؟

----------


## Pr0grammer

> ميشه بگين چه موقع هايي مهندسي مجدد انجام ميشه؟


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

موفق باشید

----------


## Pr0grammer

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


فکر نکنم این تعریف درست باشه!  :متفکر:  اگه کد برنامه ای رو داشته باشی دیگه مراحل انجام اونو هم داری خب! پس می خوای به چه مرحله ی اولیه دیگه ای برسی؟! :متعجب: 

تا اونجایی که من می دونم، برای مهندسی معکوس از  Disassembler ها  استفاده میشه که مثلاً یه فایل exe رو به اسمبلی تبدیل می کنه تا یک مهندس معکوس از اونا به نتیجه ای که مد نظر هست برسه! نه از کد؟! 

اگه اشتباه می کنم، لطفاً دوستان بگن تا منم یاد بگیرم!  :قلب:

----------


## xvision

مهندسي معكوس يعني از فراورده برسي به مواد اوليه اون ...
مثلا از برنامه اي كه داره كار مي كنه ( exe ) برسي به كد توليد كننده اش
يا مثلا از قورمه سبزي برسي به مواد اوليه اش *و* روش پختش ( اين و خيلي مهمه )

----------


## Pr0grammer

دوستان، فکر کنم صاحب تاپیک (maryamb) متوجه شد مهندسی معکوس یعنی چی؟!  :لبخند گشاده!: 
همین طور تا n تا post می خواین ادامه بدید؟ و هر کی یه جور تعریف کنه!  :خیلی عصبانی: 

بهترین و کامل ترین توضیحات رو *whitehat* با دو تا لینکی که گذاشتن معرفی کردن، من که خیلی استفاده کردم!  :متفکر:  هر چند به نظر من  عزیز maryamb باید قبل از ایجاد تاپیک یه جستجو می کرد، این موضوع چند بار قبل هم مطرح شده بود!  :لبخند گشاده!: 
بهتره مدیر بخش این تاپیک رو قفل کنه!  :لبخند گشاده!:

----------


## MrJacob

با سلام خدمت دوستان مهندسي مجدد و معكوس در ضمينه هاي مختلفي كاربرد دارهتوي پروژه هاي سازماني، اجتماعي، نظامي و ... 
اصل و مفهوم آن تو همه موارد يكسان هست، اما اينكه چه جوري ازش تو دنياي كامپيوتر استفاده مي كنند براي ما مهم هست.
به تعاريف زير دقت كنيد :
*
مهندسي مجدد نرم افزار*
"تغییر یک محصول نرم افزاری بعد از تشکیل مشکلات آن بطوریکه باعث بهبود کیفیت یا بهبود سایرمعیارهای سیستم مذکور گردد و یا اینکه باعث سازگار سازی سیستم  برای سازگاری با تغییرات بسترهای مختلف می باشد."  [1]
اساسا فرایند مهندسی مجدد، یک سیستم قدیمی موجود را که دارای هزینه نگهداری زیادی شده و یا دارای معماری یا پیاده سازی غیر قابل استفاده یا کهنه ای می باشد را به عنوان ورودی گرفته و با انجام یک سری عملیات روی سیستم با توجه به تکنولوژی های نرم افزاری و سخت افزاری روز آن را دوباره مهیا می کند. فرایند مهندسی مجدد شامل ترکیبی از فرایندهایی همچون *مهندسی معکوس*، مستند سازی دوباره سیستم، ساختار بندی دوباره سیستم، ترجمه و انتقال سیستم قبلی به سیستم جدید و در نهایت مهندسی مستقیم روی مستندات جدید برای تولید سیستم جدید می باشد.  [2]

*مهندسي معكوس نرم افزار*
سابقه مهندسي معكوس به تحليل سخت افزار براي منافع تجاري يا نظامي بر مي گردد. هدف آن، تسهيل تغييرات با ايجاد درك درباره ي ماهيت كار نرم افزار، نحوه كار آن و معماري اش است. به طور خلاصه مي توان مهندسي معكوس را "تحليل يك سيستم نرم افزاري براي تشخيص قطعات و وابستگي هاي آن ها، استخراج و ايجاد تجرد سيستم و اطلاعات طراحي" ناميده مي شود. مهندسي معكوس مشتمل بر بكارگيري سطوح تجرد با روش هاي مختلف است. اين امر شامل يافتن ساختارهاي سطح پايين پياده سازي شده و سپس جايگزيني آن ها با همتاهاي سطح بالاست. فرايند مذكور به يك فرموله سازي كلي از معماري برنامه نيز منجر خواهد شد. [3]

D.Gjörwell, S.Haglund, *Daniel Sandell. Reengineering And Reengineering Patterns*, 2002
A.Le Gear. *Thematic Review Of Software Reengineering And Maintenance* 2004
E.Hassan, "*Architecture Recovery of Web Applications*", MSc Thesis, Waterloo Univ, 2001


مهندسي مجدد نرم افزار براي خودش همانند مهندسي نرم افزار داراي الگوها ( pattern ) و قوانين خاصي هست. همچنين همان طور كه تو تعاريف ديدين مهندسي معكوس بخشي از مهندسي مجدد بوده و در حقيقت براي اينكه يك سيستم نرم افزاري رو بتونيم مهندسي مجدد روش انجام بديم در اكثر مواقع نياز پيدا مي كنيم رو سيستم مهندسي معكوس انجام بديم.

بنظرم بهتره اينجا بيشتر به software Reengineering and software Reverse Engineering بپردازيم نه به Reengineering and Reverse Engineering

----------

