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

ایفل استودیو شامل ترکیبی از ابزارهای یکپارچه شده تحت یک رابط کاربری واحد است: کامپایلر، مفسر، دیباگر، مرورگر، ابزار متریک، نمایه‌ساز، نمودار و ابزار بازرس کد. رابط کاربری بر روی تعدادی از پارادایم های رابط کاربری خاص، به ویژه "انتخاب و رها کردن" برای مرور موثر استوار است.

ایفل استودیو بر روی پلتفرم‌های مختلفی از جمله ویندوز، لینوکس، مک او اس، RaspberryPi, VMS, Solaris در دسترس است. منبع تحت GPL موجود است؛ مجوزهای تجاری دیگر نیز در دسترس است.

وضعیت، مجوز و فرآیند جامعه
--------------------------

ایفل استودیو یک توسعه متن باز است که نسخه های بتا نسخه بعدی را به طور مرتب در دسترس قرار می دهد.

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

فناوری کامپایل
--------------

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

اگرچه چنین برنامه‌های «Melted» را می‌توان ارائه داد، اما روش معمول این است که قبل از انتشار یک مرحله «نهایی‌سازی» انجام شود. نهایی سازی یک فرم بسیار بهینه از کامپایل است که زمان بیشتری می برد اما فایل های اجرایی بهینه سازی شده را تولید می کند.

بخش مفسر ایفل استودیو به یک ماشین مجازی بایت کد گرا متکی است. کامپایلر C یا CIL .NET(زبان متوسط مشترک) را تولید می کند.

مهندسی دو سره
-------------

ابزار نمودار ایفل استودیو یک نمای گرافیکی از ساختارهای نرم افزار ارائه می دهد و در هر دو حالت زیر قابل استفاده است :

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

این ابزار یکپارچگی تغییرات ایجاد شده در هر دو سبک را برای "مهندسی دو سره" کامل تضمین می کند.

نماد گرافیکی BON (Business Object Notation، به کتابشناسی مراجعه کنید) یا UML است. BON پیش فرض است.

پارادایم رابط کاربری
--------------------

ایفل استودیو امکان نمایش بسیاری از **نما**های مختلف از کلاس ها و ویژگی ها را فراهم می کند: نمای متن (متن کامل برنامه)، نمای قرارداد (فقط رابط، با قراردادها)، نمای flat (که شامل ویژگی های ارث بری است)، کلاینت ها (همه کلاس ها و ویژگی هایی که از یک کلاس یا ویژگی خاص استفاده می کنند)، تاریخچه ارث بری (چه اتفاقی برای یک ویژگی در بالا و پایین ساختار ارث بری می افتد) و بسیاری دیگر.

ایفل استودیو بر پارادایم رابط کاربری اصلی مبتنی بر "توسعه اشیا"، "pebble ها" و "حفره‌ها" تکیه دارد. همانطور که شی گرایی در ایفل با اشیا در حین اجرا سروکار دارد، توسعه دهندگان با انتزاعاتی که نشان دهنده کلاس ها، ویژگی ها، break point ها (برای دیباگ کردن)، خوشه ها (گروه هایی از کلاس ها) و سایر **اشیاء توسعه** هستند، سر و کار دارند. یک شی توسعه در ایفل استودیو را می توان در هر کجا که در رابط ظاهر می شود و صرف نظر از نمایش بصری آن (نام شی، نماد بصری یا موارد دیگر )انتخاب کرد.

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

یا نمادی که حفره‌ای را با همان شکل کلی نشان می‌دهد (حفره ی کلاس، حفره ی breakpoint، حفره ویژگی و غیره) یا یک پنجره با یک تیپ سازگار.

تاثیر قرار دادن یک pebble در یک ابزار این است که کل ابزار را مجدداً به سمت شیء توسعه ای که "انتخاب شده" هدف قرار می دهد. به عنوان مثال، یک ابزار کلاس اکنون کلاس انتخاب شده را در هر نمای (متن، قرارداد، مسطح و غیره) انتخاب شده نشان می دهد. این به پارادایم "انتخاب و رها کردن" معروف است.

ترکیب نماهای متعدد و "انتخاب و رها کردن"، مرور سریع در میان سیستم‌های پیچیده و پیروی از تغییرات گاهاً گسترده‌ای را که ویژگی‌ها تحت وراثت متحمل می‌شوند، ممکن می‌سازد شامل تغییر نام، تعریف مجدد، تعریف نشدن.

تست ادغام و واحد
----------------

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

EiffelStudio AutoTest سه روش ایجاد تست موردی را در اختیار کاربر قرار می دهد.

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

دوم، EiffelStudio AutoTest روشی را برای ایجاد یک تست جدید بر اساس شکست برنامه در زمان اجرا ارائه می دهد. به این نوع تست استخراج شده می گویند. اگر در حین اجرای سیستم هدف، یک شکست غیرمنتظره رخ دهد، EiffelStudio AutoTest می‌تواند با استفاده از اطلاعات موجود در دیباگر، آزمایش جدیدی ایجاد کند که وضعیت و تماس‌هایی را که باعث شکست شده‌اند، بازتولید کند. پس از رفع مشکل، تست استخراج شده را می توان به عنوان پوششی در برابر رگرسیون های مشکل به مجموعه آزمایشی اضافه کرد.

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

تاریخ انتشار ها
---------------

ایفل استودیو ریشه های خود را به اولین پیاده سازی ایفل، توسط Interactive Software Engineering Inc. (سلف نرم افزار ایفل) که در سال 1986 منتشر شد، بازمی گردد. طراحی نسخه ایفل 3 زبان (همانطور که در Eiffel: The Language مستند شده است، به کتابشناسی مراجعه کنید). EiffelBench در حدود سال 2001 به "EiffelStudio" تغییر نام داد. این زمانی است که محیط از مبدأ یونیکس خود فراتر رفت و ویندوز و سایر پلتفرم‌ها را هدف قرار داد.

انتشارات عمده از سال 2001، و برخی از ویژگی های جدید برای هر کدام، عبارتند از:

* 5.0، ژوئیه 2001: اولین نسخه ای که "EiffelStudio" سازگار است. ادغام ابزار قبلی "EiffelCase" برای طراحی گرافیکی با Eiffel Bench، در قالب EiffelStudio Diagram Tool)
* 5.1، دسامبر 2001: اولین نسخه ای که از دات نت پشتیبانی می کند (نسخه PDF). قبل از انتشار "Eiffel#" نامیده می شد [2].
* 5.2، نوامبر 2002: Eiffel Build جدید برای طراحی رابط کاربری گرافیکی، اشکال زدایی گسترده، مکانیسم های جدید برای ادغام C و C++، امکانات رفت و برگشت بهتر برای ابزار Diagram (نسخه منتشر شده).
* 5.3، مارس 2003: فناوری کامپایلر افزایشی در دسترس برای Eiffel.NET. رابط جاوا Eiffel2Java، EiffelStore (رابط پایگاه داده رابطه ای) اکنون برای دات نت در دسترس است، اولین نسخه سیستم عامل مک، بهبود عملکرد (نسخه منتشر شده).
* 5.4، نوامبر 2003: مکانیسم تبدیل جدید، بهبودهای عمده عملکرد زمان اجرا (به ویژه برای عوامل)، بهبودهای عمده سرعت کامپایل، پشتیبانی بهبودیافته برای multithreading، پیشرفت‌های عمده EiffelBuild، اولین پشتیبانی برای مکانیسم‌های جدید تعریف شده توسط کمیته ECMA Eiffel، پشتیبانی برای پیش‌شرط‌ها و پیش‌شرط‌ها در روال‌های خارجی (مثلاً C)، روشی شفاف برای فراخوانی روتین‌های دات‌نت پربار از ایفل (نسخه منتشر شده).
* 5.5، سپتامبر 2004: داکینگ، دیباگر بهبودیافته، ویژگی های جدید زبان ECMA (نسخه منتشر شده).
* 5.6، آگوست 2005: ابزار نمودار پیشرفته (پشتیبانی از UML، نمودارهای اجباری، رفت و برگشت بهتر)، ویزارد جدید EiffelCOM برای تولید اجزای Microsoft COM، تکمیل کلاس بهتر، تولید کد NET سریعتر (نسخه منتشر شده).
* 5.7، اکتبر 2006: افزودن ISO/ECMA ایفل (عوامل درون خطی، معناشناسی جدید "گسترش یافته"، تاپل های نامگذاری شده، پشتیبانی از یونیکد)، امکانات بازسازی، روش جدید برای پیکربندی سیستم پروژه، معیارها (نسخه منتشر شده).
* 6.0، ژوئن 2007: افزودن ISO/ECMA ایفل (محدودیت چندگانه، نماد هشت و دودویی برای اعداد صحیح)، ویرایشگر زبانه‌های جدید، امکانات اتصال جدید به کاربر برای تعریف فضای کاری، منوی زمینه علاوه بر انتخاب و رها کردن، ابزار وابستگی در دسترس است. (نسخه منتشر شده).
* 6.1، نوامبر 2007: (نسخه منتشر شده).
* 6.2، مه 2008: (نسخه منتشر شده).
* 6.3، دسامبر 2008: (نسخه منتشر شده).
* 6.4، ژوئن 2009: (نسخه منتشر شده).
* 6.5، نوامبر 2009: (نسخه منتشر شده).
* 6.6، مه 2010: (نسخه منتشر شده).
* 6.7، نوامبر 2010: (نسخه منتشر شده).
* 6.8، مه 2011. شامل اولین اجرای تسهیلات پشتیبانی از SCOOP، برنامه نویسی شی گرا همزمان ساده است. (نسخه منتشر شده).
* 7.0، نوامبر 2011. شامل بهبود عملکرد و عملکرد تسهیلات توسعه موازی SCOOP، کتابخانه رابط کاربری گرافیکی و پشتیبانی ابزار برای ساختارهای رابط نواری، پشتیبانی بهبودیافته برای توسعه نرم‌افزار ایمن خالی، و بسیاری از پیشرفت‌های دیگر.
* 7.2، فوریه 2013.
* 7.3، ژوئیه 2013.
* 13.11، دسامبر 2013. این نسخه شروع استفاده از طرح شماره گذاری نسخه جدید را نشان می دهد. (یادداشت انتشار) (نسخه منتشر شده).
* 14.05، مه 2014. شامل ابزار جدید Eiffel Inspector (ابزار تجزیه و تحلیل استاتیک برای کمک به حفظ کیفیت بالای کد). (نسخه منتشر شده).
* 15.01، ژانویه 2015. زمان اجرا SCOOP جدید بهبود عملکرد قابل توجهی را به همراه دارد. (نسخه منتشر شده).
* 15.08، آگوست 2015. بهبود راه حل EiffelWeb برای ساخت برنامه وب سرور. (نسخه منتشر شده).
* 15.12، دسامبر 2015. بهبود زبان (نماد نوع عامل جدید). (نسخه منتشر شده).
* 16.05، مه 2016. انتشار تعمیر و نگهداری. (نسخه منتشر شده).
* 17.01، ژانویه 2017. مکانیسم قابلیت کتابخانه برای مستندسازی و اجرای گزینه‌های تالیف پشتیبانی شده. الگوهای کد (نسخه 17.01)
* 17.05، مه 2017. تشخیص بهتر ویژگی های منسوخ شده. برای متغیرهای محلی انتخاب و رها کنید. (نسخه 17.05)
* 18.01، فوریه 2018. تحلیلگر کد یکپارچه عمیق تر. قوانین نوع بهبود یافته برای عبارات شرطی و آرایه های مانیفست. ویژگی های کلاس (نسخه 18.01).
* 18.07، ژوئیه 2018. قوانین آرام برای ویژگی های کلاس. عبارات براکت بعدی اهداف پروژه از راه دور (نسخه 18.07).
* 18.11، دسامبر 2018. همه کانتینرها را می توان به شکل تکرار یک حلقه استفاده کرد و موارد خطی را می توان از دیگران مقداردهی کرد. (نسخه 18.11).
* 19.05، مه 2019. اپراتورهای یونیکد، HiDPI، حذف «کلاس» مرده، بهینه‌سازی کامپایلر. (نسخه 19.05).
* 20.05، مه 2020. عبارت چند شاخه ای، ارزیابی رشته مانیفست بدون تایپ بر اساس محتوا. (نسخه 20.05).
* **20.11**، نوامبر 2020. یک بار کلاس، WrapC. (نسخه 20.11).

تحلیلگر کد
----------

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

تحلیلگر کد یک ابزار تحلیل کد استاتیک مبتنی بر قانون است که هم از حالت تعبیه شده در ایفل استودیو و هم از خط فرمان عمل می کند. از درخت نحو انتزاعی (AST) تولید شده توسط کامپایلر ایفل استفاده می کند و سپس یک نمودار جریان کنترل (CFG) تولید می کند که توسط یک ماژول کد در ابزار محاسبه می شود. سپس CFG و AST توسط تعدادی از قوانین تعریف شده بازدید می شوند. نقض هر قانون به عنوان خطا، هشدار یا راهنمایی به کاربر گزارش می شود. هر نقض قانون دقیقاً گزارش می دهد که کدام قانون نقض شده است.

هم چنین ببینید
--------------

* ایفل (زبان برنامه نویسی)
* لیست محیط های توسعه یکپارچه

یک پنجره containing three panes: an editor pane containing class source code, a features pane containing a list of features of the class source code under edit, and a diagram pane showing the class as an icon with relationships to other classesنمایش پنجره‌های ویرایشگر، ویژگی‌ها و نمودار در نسخهٔ ۷٫۲ ایفل‌استودیو

منابع
-----

کتاب شناسی
----------

* نرم افزار Eiffel: راهنمای EiffelStudio. آنلاین در https://www.eiffel.org/documentation

* Bertrand Meyer: *Eiffel: The Language*, Prentice Hall, 1991 (second revised printing, 1992).

* Bertrand Meyer.: An Object-Oriented Environment: Principles and Applications, Prentice Hall. 1995 (describes the principles underlying the original EiffelBench).

* Kim Waldén and Jean-Marc Nerson: *Seamless Object-Oriented Software Architecture*, Prentice Hall, 1995 (contains a description of the BON method and notation).

* مشارکت‌کنندگان ویکی‌پدیا. «EiffelStudio». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۸ نوامبر ۲۰۲۱.

پیوند به بیرون
--------------

* Eiffel Community
* Eiffel Software's home page at eiffel.com
* For open-source contributors: Eiffel home page at ETH Zurich
* EiffelStudio at SourceForge
* EiffelStudio release notes