چکیدهایده ی اصلی تست جهش براساس استفاده از نقصها (faults) برای شبیه سازی خطاهایی است که برنامه نویسان انجام میدهند. بروز نقصها ممکن است در دو سطح یکپارچگی و در سطح واحد اتفاق بیافتد که در بعضی موارد ممکن است جستجو و یافتن محل نقص دشوار باشد با تزریق نقصها به صورت مجازی میتوان دادهها ورودی مناسب که میتواند وجود آنها را آشکار کند پیدا کرد.انجام فرآیند تست جهش هزینه بر است این هزینهها به طور کلی از چهار منبع نشات میگیرند که عبارتند از :1- تولید ورودیهای تست 2- زمان کامپایل کد جهش یافته و کد اصلی 3- اجرا کد جهش یافته و اصلی 4- مقایسهی نتایج خروجی برنامهی اصلی با برنامهی جهش یافته. در این پایاننامه برای کاهش هزینهی اول با استفاده از الگوریتم کلونی زنبور تولید دادههای تست را به صورت خودکار انجام دادیم از طرف دیگر از طریق تکنیکهای تزریق بایت کد جاوا هزینه کامپایل را نیز به صفر رساندیم و برای بالا بردن عملکرد سیستم اجرای تست را به صورت موازی انجام دادهایم.کلید واژه: تست جهش، خودکارسازی، ورودیهای تست، موارد تست، الگوریتم کلونی زنبور. فهرست مطالبعنوان صفحه1 فصل اول مقدمه و كليات تحقيق11-1 مروری بر دغدغههای تست نرمافزار21-1-1.................................................................................................................... مقدمه21-1-2 بهره گیری از طبیعت41-1-3 هدف از انجام62 فصل دوم ادبيات و پيشينه تحقيق82-1 تست جهش92-1-1 تئوری و نظریات92-1-2............................................................................................................... متدلوژی122-1-3............................................................................................................... عملگرها142-1-4 تکینکهای کاهش هزینه202-1-5 تولید جهش کمتر212-1-6 تکنیکهای کاهش هزینه در زمان اجرای برنامه292-1-7 جهشهای برابر382-1-8 خودکار سازی تست432-2 نتیجهگیری473 فصل سوم روشتحقيق503-1 شرح روشهای مشابه513-1-1 روش مبتنی بر CBT513-1-2 روش اجرای سمبلیک523-1-3 ترکیب روش اجرای پویای سمبلیک (DSE) با اسکیما573-1-4 روشهای مبتنی بر جستجو593-2 شرح ابزار ارائه شده603-2-1 ابزارهای ارائه شدهی مبتنی بر جاوا603-2-2 تولید کنندهی جهشها633-2-3 تولید کنندهی ورودیهای تست663-2-4 الگوریتم کلونی زنبور673-2-5 کلاس تولید کنندهی موارد تست693-2-6 اجرا کنندهی تست773-2-7............................................................................................................ دستیاران783-3 نتیجهگیری824 فصل چهارم84محاسبات و يافته هاي تحقيق844-1 تاثیر تعداد نخها در از بین رفتن جهشها854-2 بررسی اثر تعداد نخها در معیار پوشش864-3 نتایج بدست آمده از تست سه برنامه885 فصل پنجم نتيجهگيريوپيشنهادات916 پیوست946-1 الگوریتم کلونی مورچه946-2 K-means986-3 Agglomerative986-4 منابع99 فهرست جداولجدول(2‑1): 22 عملگر مُدرا[9]14جدول(2‑2): عملگرهای جهش ارائه شده در سطح بین کلاس [10]18جدول(2‑3): سه جهش و [15]24جدول (2‑4): : فاصلهی همینگ سه جهش و [15]24جدول(2‑5): خلاصهی نتایج بدست آمده حاصل از اجرای روش دستهبندی بر روی پنج برنامه [15]25جدول(2‑6): تاثیر حاصل ترکیب جهش های برابر و نابرابر با یکدیگر28جدول(2‑7): محدودیتهای تولید شدهی متناظر با جهشها [29]41جدول(2‑8): مقایسه بین روشهای مختلف47جدول(3‑1): نمونهای از مسیرها و محدودیتهای انها در اجرای سمبلیک54جدول(3‑2): بررسی حالات مختلف برای محاسبهی شایستگی72جدول(4‑1): نتایج بدست آمده از تست سه برنامه88جدول(4‑2):مقایسهی روش ارائه شده با سایر ابزارها89 فهرست تصاویر و نمودارهاشکل(2‑1): چارت فرآیند تست جهش13شکل(2‑2): درصد استفادهی مقالات از تکنیکهای کاهش هزینه[2]21شکل(2‑3): چهار متغییر مقایسهی جهش ضعیف [23]32شکل (2‑4):گراف کنترل جریان برنامهی MID[30]36شکل (2‑5): نمایش دامنه قبل و بعد از تقسیم [30]36شکل (2‑6): فرآیند MSG[31]38شکل (2‑7): ارتباط دامنهی ورودی سه شرط کفایت، ضرورت و دسترسی [29] [34]43شکل (3‑1): ساختار Godzilla51شکل(3‑2): نمونهای از اجرای سمبلیک54شکل(3‑3): چهارچوب ارائه شده در مقالهی [40]58شکل(3‑4): کلونی مورچه و تست جهش59شکل(3‑5): ماژول تولید کنندهی جهش66شکل (3‑6): ماژول تولید کنندهی ورودیهای تست76شکل(3‑7): گراف کنترل جریان برنامه تشخیص نوع مثلث81شکل(3‑8): مدل روش ارائه شده83شکل(4‑1): اثر تعداد نخها در از بین بردن جهش86شکل (4‑2) پوشش مسیرهای تست در گراف CFG87شکل(4‑3): اثر تعداد نخها بر پوشش مسیرهای تست در گراف CFG87شکل(6‑1): شیوه حرکت مورچهگان در هنگام برخورد با مانع95شکل (6‑2) : گراف شهرها و مسیرها96 1-1 مروری بر دغدغههای تست نرمافزاریکی از چالشهای امروز پروژههای نرمافزار،تست است زیرا برخلاف محصولات تولید شده توسط سایر علوم مهندسی، نرمافزار محصولی غیرقابل لمس است از این جهت برای اطمینان از کیفیت، نیاز به صرف هزینه و وقت بیشتر برای تست آن است. تست در حقیقت یکی از اساسیترین روشها برای ارزیابی نرمافزار تحت توسعه است. روشهای سنتی تست نرمافزار، تنها به یافتن بعضی از خطاها [1]بعد از فاز پیادهسازی محدود میشد و از این جهت ریسک وجود خطا در نرمافزار، بعد از تحویل، افزایش می یافت و حتی وجود خطاها در نرمافزار گاهی موجب شکست [2]نرمافزار میشود اما منشاء بخشی از این خطاها در کجاست؟ منشاء بخشی از این خطاها در نقصهایی[3] است که برنامه نویسان به طور غیر عمدی و بر اثر بی دقتی وارد کد برنامه میکنند مانند: کوچکتر از حد نیاز در نظر گرفتن طول یک آرایه، اشتباه در پرانتز گذاری عبارتها، استفادهی نادرست از عملگرهای دودویی و یکانی و ... که در صورت شناسایی محل آن در بسیاری از موارد با ایجاد یک تغییر کوچک در کد برنامه قابل اصلاح است اما در صورت عدم اصلاح وجود یک یا چند نقص در برنامه سبب ایجاد یک وضعیت درونی اشتباه در برنامه شود که در برخی از موارد با وارد کردن یک ورودی خاص تحریک شده و ممکن است این وضعیت درونی به یک رفتار بیرونی اشتباه تبدیل شود و حتی در برخی از موارد موجب شکست برنامه شود به عنوان مثال اگر بدن انسان را به یک برنامهی کامپیوتری تشبیه کنیم نقصها در حقیقت عوامل بیماری زا هستند که در یک بدن سالم وارد میشوند و آن را تحت تصرف خود درمیآورند، خطاها مانند یک وضعیت درونی غیر عادی در بدن مانند فشار خون بالا، وجود یک نوع باکتری در خون، بی نظمی در نبض بیمار که پزشکان با کنارهم قرار دادن این علائم تلاش میکنند به علت بیماری پی ببرند، از کار افتادگیها در حقیقت علائم درونی هستند که از حالت نهان و درونی خود خارج شده به طوری که توسط بیمار نیز قابل تشخیص و بیان هستند.حال که توانستیم مفهوم نقص، خطا و شکست را شرح دهیم، میتوانیم میان سه مفهوم تست، تست شکست و اشکال زدایی، تمایز قائل شویم وآن عبارت است از:یکی از چالشهای عمده در این بخش یافتن نقصهای برنامه است زیرا به ازای هر نقص تعداد محدودی از ورودیها خروجی برنامه را تغییر میدهند بنابراین پیدا کردن محل نقص همواره کار سادهای نیست با در نظر گرفتن این ایده به سه شرط اساسی میرسیم که وجود آنها برای تبدیل یک نقص به یک شکست ضروری است:همانطور که در علم پزشکی پیشگیری بهتر از درمان است، برای جلوگیری از شکست برنامه بهتر است با استفاده از روشهای موجود تا آنجایی که امکان دارد از ورود نقصها به کد برنامه جلوگیری کنیم. این موضوع اولین بار توسط Myers طرح شد، وی مدعی شد تست نرمافزار موفق، تستیاست که سبب از کار افتادگی نرمافزار شود به عبارت دیگر دیدگاه Myers استفاده از نقصهای شناخته شده جهت یافتن خطاهای پنهان موجود در برنامه بود به این روش تست، تست نقص میگویند. در این روش به جای آنکه به دنبال خطا در برنامه برویم نشان می دهیم که برنامه بدون نقص است.پدیدههای طبیعی از گذشته همواره مورد توجه و الهام بخش انسان برای حل مسائل زندگی خود بوده است، یکی از جالبترین آنها اجتماع زنبوران و مورچهها است که برای حل مسائل خود (به عنوان مثال پیدا کار کردن غذا ) از راهکارهای سادهای استفاده میکنند که نه تنها قادر به حل مسائل خود هستند بلکه ما میتوانیم با مشاهده و الگو برداری از رفتار آنها بسیاری از مسائل پیچیدهای که نیاز به راه حلهای پویا دارند را به طور کارا حل کنیم، اما این الگوهای پیچیدهی رفتاری از کجا ایجاد میشود؟ پاسخ این سوال استفاده از هوش جمعی است، به عنوان مثال تصور کنید قرار است به محلی بروید که از آدرس آن به طور کامل آگاهی ندارید. یکی از راهکارهای موثر پرسش از کسانی است که در راه با آنها برخورد میکنید در برخی از موارد ممکن است پاسخهای نادرست دریافت کنید اما شما با توجه به پیش زمینه ذهنی و هدف از پیش تعریف شدهی خود تا حدی قادر به تشخیص آنها خواهید بود. در حقیقت شما ممکن است در کارهای روزمره خود بارها از هوش جمعی برای یافتن پاسخ مشکلات خود بهرهمند شوید. متاسفانه تاکنون تعریف دقیق ریاضی برای هوش جمعی وجود ندارد اما به طور کلی سیستمهایی که براساس هوش جمعی مسائل خود را حل میکنند در ویژگیهای زیر مشترک هستند:اگر به زندگی مورچهها نگاه کنیم، برای حل مسائل خود از چندین روش استفاده میکنند که یکی از مهمترین آنها مادهی شیمیایی به نام فرمون است و از خواص این ماده بوی آن است که بعد از گذشت زمان از شدت آن کاسته شده و به تدریج از بین میرود. اما این ویژگی چه کمکی به حل مسائل مورچهها میکند؟ به عنوان مثال مسئلهی یافتن کوتاه ترین مسیر را در نظر بگیرید در حقیقت مورچهها با گذشت زمان یاد گرفتهاند که برای یافتن غذا همواره کوتاهترین مسیر را از کلونی تا غذای خود پیدا کنند. هنگامی که اولین مورچه برای یافتن غذا خارج میشود یک مسیر را از میان چندین مسیر به صورت تصادفی انتخاب میکند. هر مورچه در مسیری که طی میکند از خود فرمون به جای میگذارد وبعد از یافتن غذا از مسیر پیموده شدهی خود که برروی آن فرمون به جای گذاشته است به کلونی باز میگردد. از آنجایی که تعداد مورچههای زیادی به طور همزمان برای یافتن غذا از کلونی خارج میشوند نخستین مورچهای که به کلونی باز میگردد به احتمال زیاد مسیر کوتاهتری به نسبت سایر مورچهها پیموده است و بوی فرمون آن ماندگاری بیشتری دارد چون در مدت زمان کمتری طی شده است پس آن مسیر توسط سایر مورچهها انتخاب خواهد شد.
ارائه یک روش تولید خودکار داده های ورودی برای تست جهش word
چکیدهایده ی اصلی تست جهش براساس استفاده از نقصها (faults) برای شبیه سازی خطاهایی است که برنامه نویسان انجام میدهند. بروز نقصها ممکن است در دو سطح یکپارچگی و در سطح واحد اتفاق بیافتد که در بعضی موارد ممکن است جستجو و یافتن محل نقص دشوار باشد با تزریق نقصها به صورت مجازی میتوان دادهها ورودی مناسب که میتواند وجود آنها را آشکار کند پیدا کرد.انجام فرآیند تست جهش هزینه بر است این هزینهها به طور کلی از چهار منبع نشات میگیرند که عبارتند از :1- تولید ورودیهای تست 2- زمان کامپایل کد جهش یافته و کد اصلی 3- اجرا کد جهش یافته و اصلی 4- مقایسهی نتایج خروجی برنامهی اصلی با برنامهی جهش یافته. در این پایاننامه برای کاهش هزینهی اول با استفاده از الگوریتم کلونی زنبور تولید دادههای تست را به صورت خودکار انجام دادیم از طرف دیگر از طریق تکنیکهای تزریق بایت کد جاوا هزینه کامپایل را نیز به صفر رساندیم و برای بالا بردن عملکرد سیستم اجرای تست را به صورت موازی انجام دادهایم.کلید واژه: تست جهش، خودکارسازی، ورودیهای تست، موارد تست، الگوریتم کلونی زنبور. فهرست مطالبعنوان صفحه1 فصل اول مقدمه و كليات تحقيق11-1 مروری بر دغدغههای تست نرمافزار21-1-1.................................................................................................................... مقدمه21-1-2 بهره گیری از طبیعت41-1-3 هدف از انجام62 فصل دوم ادبيات و پيشينه تحقيق82-1 تست جهش92-1-1 تئوری و نظریات92-1-2............................................................................................................... متدلوژی122-1-3............................................................................................................... عملگرها142-1-4 تکینکهای کاهش هزینه202-1-5 تولید جهش کمتر212-1-6 تکنیکهای کاهش هزینه در زمان اجرای برنامه292-1-7 جهشهای برابر382-1-8 خودکار سازی تست432-2 نتیجهگیری473 فصل سوم روشتحقيق503-1 شرح روشهای مشابه513-1-1 روش مبتنی بر CBT513-1-2 روش اجرای سمبلیک523-1-3 ترکیب روش اجرای پویای سمبلیک (DSE) با اسکیما573-1-4 روشهای مبتنی بر جستجو593-2 شرح ابزار ارائه شده603-2-1 ابزارهای ارائه شدهی مبتنی بر جاوا603-2-2 تولید کنندهی جهشها633-2-3 تولید کنندهی ورودیهای تست663-2-4 الگوریتم کلونی زنبور673-2-5 کلاس تولید کنندهی موارد تست693-2-6 اجرا کنندهی تست773-2-7............................................................................................................ دستیاران783-3 نتیجهگیری824 فصل چهارم84محاسبات و يافته هاي تحقيق844-1 تاثیر تعداد نخها در از بین رفتن جهشها854-2 بررسی اثر تعداد نخها در معیار پوشش864-3 نتایج بدست آمده از تست سه برنامه885 فصل پنجم نتيجهگيريوپيشنهادات916 پیوست946-1 الگوریتم کلونی مورچه946-2 K-means986-3 Agglomerative986-4 منابع99 فهرست جداولجدول(2‑1): 22 عملگر مُدرا[9]14جدول(2‑2): عملگرهای جهش ارائه شده در سطح بین کلاس [10]18جدول(2‑3): سه جهش و [15]24جدول (2‑4): : فاصلهی همینگ سه جهش و [15]24جدول(2‑5): خلاصهی نتایج بدست آمده حاصل از اجرای روش دستهبندی بر روی پنج برنامه [15]25جدول(2‑6): تاثیر حاصل ترکیب جهش های برابر و نابرابر با یکدیگر28جدول(2‑7): محدودیتهای تولید شدهی متناظر با جهشها [29]41جدول(2‑8): مقایسه بین روشهای مختلف47جدول(3‑1): نمونهای از مسیرها و محدودیتهای انها در اجرای سمبلیک54جدول(3‑2): بررسی حالات مختلف برای محاسبهی شایستگی72جدول(4‑1): نتایج بدست آمده از تست سه برنامه88جدول(4‑2):مقایسهی روش ارائه شده با سایر ابزارها89 فهرست تصاویر و نمودارهاشکل(2‑1): چارت فرآیند تست جهش13شکل(2‑2): درصد استفادهی مقالات از تکنیکهای کاهش هزینه[2]21شکل(2‑3): چهار متغییر مقایسهی جهش ضعیف [23]32شکل (2‑4):گراف کنترل جریان برنامهی MID[30]36شکل (2‑5): نمایش دامنه قبل و بعد از تقسیم [30]36شکل (2‑6): فرآیند MSG[31]38شکل (2‑7): ارتباط دامنهی ورودی سه شرط کفایت، ضرورت و دسترسی [29] [34]43شکل (3‑1): ساختار Godzilla51شکل(3‑2): نمونهای از اجرای سمبلیک54شکل(3‑3): چهارچوب ارائه شده در مقالهی [40]58شکل(3‑4): کلونی مورچه و تست جهش59شکل(3‑5): ماژول تولید کنندهی جهش66شکل (3‑6): ماژول تولید کنندهی ورودیهای تست76شکل(3‑7): گراف کنترل جریان برنامه تشخیص نوع مثلث81شکل(3‑8): مدل روش ارائه شده83شکل(4‑1): اثر تعداد نخها در از بین بردن جهش86شکل (4‑2) پوشش مسیرهای تست در گراف CFG87شکل(4‑3): اثر تعداد نخها بر پوشش مسیرهای تست در گراف CFG87شکل(6‑1): شیوه حرکت مورچهگان در هنگام برخورد با مانع95شکل (6‑2) : گراف شهرها و مسیرها96 1-1 مروری بر دغدغههای تست نرمافزاریکی از چالشهای امروز پروژههای نرمافزار،تست است زیرا برخلاف محصولات تولید شده توسط سایر علوم مهندسی، نرمافزار محصولی غیرقابل لمس است از این جهت برای اطمینان از کیفیت، نیاز به صرف هزینه و وقت بیشتر برای تست آن است. تست در حقیقت یکی از اساسیترین روشها برای ارزیابی نرمافزار تحت توسعه است. روشهای سنتی تست نرمافزار، تنها به یافتن بعضی از خطاها [1]بعد از فاز پیادهسازی محدود میشد و از این جهت ریسک وجود خطا در نرمافزار، بعد از تحویل، افزایش می یافت و حتی وجود خطاها در نرمافزار گاهی موجب شکست [2]نرمافزار میشود اما منشاء بخشی از این خطاها در کجاست؟ منشاء بخشی از این خطاها در نقصهایی[3] است که برنامه نویسان به طور غیر عمدی و بر اثر بی دقتی وارد کد برنامه میکنند مانند: کوچکتر از حد نیاز در نظر گرفتن طول یک آرایه، اشتباه در پرانتز گذاری عبارتها، استفادهی نادرست از عملگرهای دودویی و یکانی و ... که در صورت شناسایی محل آن در بسیاری از موارد با ایجاد یک تغییر کوچک در کد برنامه قابل اصلاح است اما در صورت عدم اصلاح وجود یک یا چند نقص در برنامه سبب ایجاد یک وضعیت درونی اشتباه در برنامه شود که در برخی از موارد با وارد کردن یک ورودی خاص تحریک شده و ممکن است این وضعیت درونی به یک رفتار بیرونی اشتباه تبدیل شود و حتی در برخی از موارد موجب شکست برنامه شود به عنوان مثال اگر بدن انسان را به یک برنامهی کامپیوتری تشبیه کنیم نقصها در حقیقت عوامل بیماری زا هستند که در یک بدن سالم وارد میشوند و آن را تحت تصرف خود درمیآورند، خطاها مانند یک وضعیت درونی غیر عادی در بدن مانند فشار خون بالا، وجود یک نوع باکتری در خون، بی نظمی در نبض بیمار که پزشکان با کنارهم قرار دادن این علائم تلاش میکنند به علت بیماری پی ببرند، از کار افتادگیها در حقیقت علائم درونی هستند که از حالت نهان و درونی خود خارج شده به طوری که توسط بیمار نیز قابل تشخیص و بیان هستند.حال که توانستیم مفهوم نقص، خطا و شکست را شرح دهیم، میتوانیم میان سه مفهوم تست، تست شکست و اشکال زدایی، تمایز قائل شویم وآن عبارت است از:یکی از چالشهای عمده در این بخش یافتن نقصهای برنامه است زیرا به ازای هر نقص تعداد محدودی از ورودیها خروجی برنامه را تغییر میدهند بنابراین پیدا کردن محل نقص همواره کار سادهای نیست با در نظر گرفتن این ایده به سه شرط اساسی میرسیم که وجود آنها برای تبدیل یک نقص به یک شکست ضروری است:همانطور که در علم پزشکی پیشگیری بهتر از درمان است، برای جلوگیری از شکست برنامه بهتر است با استفاده از روشهای موجود تا آنجایی که امکان دارد از ورود نقصها به کد برنامه جلوگیری کنیم. این موضوع اولین بار توسط Myers طرح شد، وی مدعی شد تست نرمافزار موفق، تستیاست که سبب از کار افتادگی نرمافزار شود به عبارت دیگر دیدگاه Myers استفاده از نقصهای شناخته شده جهت یافتن خطاهای پنهان موجود در برنامه بود به این روش تست، تست نقص میگویند. در این روش به جای آنکه به دنبال خطا در برنامه برویم نشان می دهیم که برنامه بدون نقص است.پدیدههای طبیعی از گذشته همواره مورد توجه و الهام بخش انسان برای حل مسائل زندگی خود بوده است، یکی از جالبترین آنها اجتماع زنبوران و مورچهها است که برای حل مسائل خود (به عنوان مثال پیدا کار کردن غذا ) از راهکارهای سادهای استفاده میکنند که نه تنها قادر به حل مسائل خود هستند بلکه ما میتوانیم با مشاهده و الگو برداری از رفتار آنها بسیاری از مسائل پیچیدهای که نیاز به راه حلهای پویا دارند را به طور کارا حل کنیم، اما این الگوهای پیچیدهی رفتاری از کجا ایجاد میشود؟ پاسخ این سوال استفاده از هوش جمعی است، به عنوان مثال تصور کنید قرار است به محلی بروید که از آدرس آن به طور کامل آگاهی ندارید. یکی از راهکارهای موثر پرسش از کسانی است که در راه با آنها برخورد میکنید در برخی از موارد ممکن است پاسخهای نادرست دریافت کنید اما شما با توجه به پیش زمینه ذهنی و هدف از پیش تعریف شدهی خود تا حدی قادر به تشخیص آنها خواهید بود. در حقیقت شما ممکن است در کارهای روزمره خود بارها از هوش جمعی برای یافتن پاسخ مشکلات خود بهرهمند شوید. متاسفانه تاکنون تعریف دقیق ریاضی برای هوش جمعی وجود ندارد اما به طور کلی سیستمهایی که براساس هوش جمعی مسائل خود را حل میکنند در ویژگیهای زیر مشترک هستند:اگر به زندگی مورچهها نگاه کنیم، برای حل مسائل خود از چندین روش استفاده میکنند که یکی از مهمترین آنها مادهی شیمیایی به نام فرمون است و از خواص این ماده بوی آن است که بعد از گذشت زمان از شدت آن کاسته شده و به تدریج از بین میرود. اما این ویژگی چه کمکی به حل مسائل مورچهها میکند؟ به عنوان مثال مسئلهی یافتن کوتاه ترین مسیر را در نظر بگیرید در حقیقت مورچهها با گذشت زمان یاد گرفتهاند که برای یافتن غذا همواره کوتاهترین مسیر را از کلونی تا غذای خود پیدا کنند. هنگامی که اولین مورچه برای یافتن غذا خارج میشود یک مسیر را از میان چندین مسیر به صورت تصادفی انتخاب میکند. هر مورچه در مسیری که طی میکند از خود فرمون به جای میگذارد وبعد از یافتن غذا از مسیر پیموده شدهی خود که برروی آن فرمون به جای گذاشته است به کلونی باز میگردد. از آنجایی که تعداد مورچههای زیادی به طور همزمان برای یافتن غذا از کلونی خارج میشوند نخستین مورچهای که به کلونی باز میگردد به احتمال زیاد مسیر کوتاهتری به نسبت سایر مورچهها پیموده است و بوی فرمون آن ماندگاری بیشتری دارد چون در مدت زمان کمتری طی شده است پس آن مسیر توسط سایر مورچهها انتخاب خواهد شد.