بخشی از مقاله
چرخش آلفا ـ امگا
آلفا و امگا دو وضعيت نگاه دارنده مكان ميباشند كه چرخش زندگي هر شئ را به هم ميكند. (وضعيتهاي آلفا و امگا ـ بخش 7). وضعيت آلفا ابزار شئ را قبل از اينكه ساخته شود نشان و ارائه ميدهد. وضعيت امگا لاشه يك شئ را بعد از اينكه از بين رفت يا اينكه خراب شد نشان ميدهد. هيچ آزمايش و تستي براي اشياء در اين وضعيتها انجام نشده است. چرخش آلفا ـ امگا شئ را تحت آزمايش از وضعيت آلفا به وضعيت امگا با فرستادن پيام با هر روش حداقل يك بار ميبرد.
مجموعه تست چرخش آلفا ـ امگا نشان مي دهد كه همه روشها در يك گروه به طور جزئي قابل عمل ميباشند. گذشتن اين چرخه به معني اين است كه گروه تحت تست آماده آزمايشات و تستهاي پر هزينهتر ميباشد. عناصر چرخه آلفا ـ امگا در (گراهام 94+، اوربك 94، فاير اسميت 95، و فاير اسميت 96) فهرست شده است. يك مجموعه تست آلفا ـ امگا ابتدا روشهاي ساده را امتحان ميكند. هيچ كوششي براي به دست آوردن پوشش جملهاي يا امتحان كردن
همه مسئوليتها انجام نميگيرد. اين كوشش بعداً انجام ميشود، بعد از اينكه گروه به اندازه كافي و خوب به منظور حمايت تستهاي وسيعتر، كار كند. يك چرخه آلفا ـ امگا شش مرحله اصلي دارد. تست كننده يك پيام به هر يك از روشهاي زير در ترتيب تعيين شده ميفرستد.
1. روش جديد يا سازنده
2. روش دست يابنده
3. روش بولين (شرطي)
4. روش اصلاح كننده (تغيير دهنده)
5. روش تكرار كننده
6. روش از بين برنده و خراب كننده
درون هر يك از اين مرحلهها، روشهاي خصوصي اول امتحان ميشود كه به وسيله روشهاي حفاظت شده و سرانجام روشهاي عمومي دنبال ميشود. از آنجا كه روشهاي عمومي به طور نمونه بستگي به روشهاي حفاظت شده و خصوصي دارد، هنگام دخالت يك روش محافظت شده با يك تست روش عمومي به وجو ميآيد. امتحان كردن روشهاي عمومي بعد از روشهاي محافظت شده و خصوصي ميتواند مانع بعضي از اين موانع شود. ترتيب دوباره توالي پايه به منظور همراهي كردن وابستگيهاي ويژه گروهي ديگر ممكن است لازم و ضروري باشد. در كاملسازي و تركيب يك طرفه فرض ميشود كه همه يا بيشتر گروه توسعه يافته است. هنگامي كه يك گروه رشد پيدا ميكند همان روش دنبال ميشود. تست كننده با رشد عملكردي گروه به طور صفوار افزايش پيدا ميكند. پيامهاي آزمايشي ممكن است به حركت كننده مانند روشهايي كه به گروه اضافه
ميشود، اضافه شود. اگر فاصله گروهي كامل توسعه پيدا كند اما بعضي از روشها به عنوان شاخههاي درخت اجرا شود، پس پيامهاي تستي مطابق ممكن است شاخه درخت را امتحان كند يا اينكه تا زمان كامل شدن شاخه درخت به تأخير بيفتد. چرخه آلفا ـ امگا ممكن است يك روش مناسب براي روشهاي افزايشي باشد و روشها ميتوانند در ترتيب آلفا ـ امگا طراحي شوند. اول سازندهها، بعد دستيابندهها، بعد بولينها، و غيره. يك تست كننده كه اين چرخه را اجرا ميكند اسكلتي را ايجاد ميكند كه به آساني ميتواند با موارد آزمايشي بر پايه الگو توسعه پيدا كند
.
مدلهاي تستي بر پايه اجرا
نقش پوشش قانوني: يك مدل پوشش قانوني شامل قسمتهايي از اجرا ميشود كه بايد براي برآوردن مدل تستي بر پايه اجرا برآورده شود. پوشش به عنوان يك متريك، درصدي از اين قسمتهاي آزمايش شده به وسيله يك مجموعه تستي ميباشد. براي مثال هر مجموعه تستي كه باع
ث ميشود هر زيرحساب حداقل يكبار امتحان شود، 100 درصد پوشش زيرحسابي يا به طور ساده پوشش زيرحساب تهيه ميكند. صدها پوششي از اواخر 1960 استفاده، نشر و تجزيه و تحلي
ل شد. تقريباً همه تستهاي بر پايه اجراي حمايتي، به استثناي نمودار جريان گروهي، هيچ مدل پوششي قانوني جديد مهمي براي اهداف سازگار با سافتور پيشنهاد يا توسعه نشده است. مدلهاي پوششي و قانوني دامنه روش در اين جا مرور ميشود. و هر كدام به وسيله ابزار پوششي در دسترس تجاري حمايت ميشوند كه اين براي شش زبان يا شرح دادن مفهوم ت
ستي مهم ميباشد. بعضي از پيشنهادات پوششي براي اهداف سازگار با قوانين در بخش 4-4 (مدلهاي پوششي براي اهداف سازگار با تست) خلاصهميشود. در روش تستينگ، پوشش به وسيله معيار كفايت تعريف ميشود كه اين عناصر يك IVI تمرين شده به وسيله يك استراتژي تستي را تعيين ميكند. (ويوكر 88). يك مجموعه تستي اگر همه عناصر امتحان شده، امتحان شده باشند، كافي ميباشد. استراتژي تستي X گفته ميشود كه زيرمجموعه استراتژي y باشد اگر همه عناصري كه y امتحان ميكند، همچين به وسيله X نيز امتحان شوند. براي مثال گفته ميشود كه پوشش شاخهاي زيرمجموعه پوشش زيرحسابي (جملهاي) باشد. زيرا امتحان همه شاخهها ضرورتاً همه زيرحساب را امتحان ميكند. سلسلهبندي زير مجموعهاي درجهبندي تحليلي پوششها ميباشد. هيچ نتايج قابل عمومي شدهاي درباره تأثيرات خرابي پيدا شده نسبي وجود ندارد كه به درجهبندي ارتباط داشته باشد. زيرا هيچ مورد جامعي در مورد شمار و انواع باگهايي كه باقي ميمانند نميتواند اشاره شود و رسيدن به يك هدف پوشيده چيزي مانند تناسب براي استفاده را نميرساند. يك پوشش پائينتر در اين سلسله بندي بر اين دلالت نميكند كه يك معيار بالاتر ضرورتاً براي پيدا كردن نتايج باگي براي يك استفاده خاص و بالعكس ضروري ميباشد. براي دلايل شرح داده شده در بخش 9، نقش مناسب تجزيه و تحليل پوشش قانوني براي تستهاي مسئوليتي، ايجاد يك مدل تكميلي و تركيبي ميباشد. از يك مدل پوششي كدي به عنوان يك مدل تستي استفاده نكنيد. براي طراحي كردن مجموعه تستي به مدلهاي پوششي كدي تكيه نكنيد و از تستيهاي مسئوليتي و گزارشات پوششي براي تجزيه و تحليل كفايت مجموعه تستي استفاده كنيد. پوشاندن بعضي از جنبههاي يك روش يا گروه هرگز ضمانتي براي سافتور بدون باگ نميباشد. با وجود اين، تجزيه و تحليل كدي و پوشش كدي نقش مهمي در نتايج سازگار با تست دارد. گزارشات پوششي ميتواند به مجموعه تستي ناكافي اشاره كند. گزارشات پوششي ممكن است وجود شگفتيهد را اشاره كند. گزارشهاي پوششي ميتواند به تعيين ساختهاي اجرايي كه به طرحي تستي بر پايه اجرا يا رشد توسعه شاخهها و حركتكنندههاي ويژه نياز دارند، كمك ميكند، شايد بيشترين استفاده مهم تحليل پوششي ملايم كردن نقاط كور غير قابل اجتناب
ميباشد. هر دو تست كنندگان غير وابسته و توسعهدهنگان به طور مداوم قادر به طرح و تدبير مجموعه تستهاي پوششي بالا تنها به وسيله تجزيه و تحليل وظيفه نيستند. مجومعههاي تستي اگرچه اغلب كامل به نظر ميرسند، اما به بيشتر از 60 درصد جمله يا پوشش شاخه اي نميرسند. براي مثال، يك مطالعه انجام شده به وسيله يك فروشنده يك آناليز كننده پوششي C++ رايج نشان داده است كه مجموعه تستهاي تابعي وسيع انجام شده براي يك استفاده هوا فضايي تنها 40 درصد شاخههاي عضو برد تابع را آزمايش كرده است. هورگان تجربه و آزمايشي را توضيح ميدهد كه همين تأثيرات مشابه را نشان ميدهد (هورگان 96+). اين آزمايش دو برنامه سودمند استفاده شده به طور وسيع پيچيده انجام شده است. TEX و AWK. اين برنامهها به
وسيله اشكال راهنما در علم كامپيوتر و برنامهنويسي توسعه يافته است (به ترتيب دونالد توت و پرين كرينگان) و براي سالهاي زيادي به وسيله متقاضيان استفاده شده است. كد منبعي C و مجموعه تستها براي شش برنامه به طور رايگان در دسترس ميباشند. اگر چه اين مجموعه تستها آناليز دقيقي از عملكرد را انعكاس ميدهد، به طور آشكار به وسيله تحليل پوششي واجد شرايط ميشوند. هورگان هر دو سيستم را وسيله قرار و مجموعه تستهاي منتشر شده را اجرا كرد. نتايج پوشيده در جدول 2-10 نشان داده ميشود. هيچكدام از مجموعه تستها به پوش
ش حكمي نرسيدهاند و تنها در حدود دو سوم شاخه پوشيده شدهاند. (مراجعه شود به بخش پوشش جريان ديتا در صفحه 384 تا 389 براي توضيح استفاده پوشش C و P). در سيستمهاي بزرگ پوشش صد درصدي اغلب به خاطر راههاي غير عملي، كد مرده، و جابجايي استثنا غير قابل دسترسي ميباشد. تا 10 تا 15 درصد اجازه براي چنين ناهمساني در سيستمهاي پيچيده وجود دارد (در سيستمهاي پيچيده بزرك، ميانگين 80 تا 85 درصد پوشش شاخهاي به دست آورده ميشود. ]گردي 92، 171[) .
جدول 1-1
بنابراين حتي با اجازه غيرعملي و سوء استفاده مهم، مجموعه تستهاي عملكردي منتشر شده همه جنبههاي كد را آزمايش نميكنند. اين نتايج به طور ضعيف روي توانايي توتف كنندگان يا هر آزمايش كننده يا توسعه دهنده ديگري منعكس نميشود، اما نسبتاً نشان ميدهد كه چقدر تست كردن سيستمهاي پيچيده علاقه آكادميكي ميباشد. منبعي گروهي ابزارهاي پوششي كدي به وسيله تجزيه كردن آن براي القا كد شياري، كدگذاري ميشود. زماني كه مقصد گروه ابراز شده اجرا ميشود، حكمهاي شياري القا شده توليد يك فايل شياري ميكند. بعد از اينكه تست اجرا شده، فايل شياري براي توليد گزارش پوششي پردازش ميشود گزارش پوشيده نشان مي دهد كه كدام قسمت گروه ابراز شده براي همه اجراهاي تستي كه به يك فايل پوششي وارد شدهاند، اجرا ميشود. بخشهاي ابراز شده به وسيله مدل پوششي حفاظت شده با ابزار پوششي تعيين ميشوند. همه ابزار پوششي در دسترس از نظر تجاري داراي ارزش شاخههاي و بخشهاي حساب شده در دامنه روشي ميباشد. بعضي از ابرازها پيامهاي سرورـ مراجع را شياربندي ميكنند و از مدلهاي پوششي اضافي حمايت ميكنند، بر حسب انتشار اين كتاب، هيچ ابزاري كه بتواند تحليل پوششي را در دامنه گروهي يا دامنه گروهي صاف شده حمايت كند، در دسترس نميباشد.اگرچه گروه بزرگ، گروههاي تحت تست ابزاريابي داشتهاند، تحليل پوششي به ما
مطلب كمي در مورد خصوصياتي توارثي آزمايش شده يا نشده، اگر چيزي وجود داشته باشد، ميگويد. روشهاي انتزاعي (يك فاصله بدون اجرا) داراي هيچ قسمتي نميباشد و در اينجا، بعضي از ابزار 5 درصد پوشش و بقيه 100 درصد پوشش را گزارش ميدهند. يك تحليلگر پوششي يك قسمت ضروري ابزار كار امتحان كننده و تستكننده ميباشد. ابزار دستي خطاپذير و وقيتگي
ر ميباشند. در مقابل ابزار اتوماتيك و ساختن دوباره معمولاً چند ثانيه طول مي كشد. ابزارآرايي به طور نمونه روي يك كپي از منابع گروهي تحت تست انجام ميشود. تغييرات اشكالزدائي براي كدگذاري غير ابزار شده انجام ميشود. يك كپي از اين منبع ابزاريابي ميشود و مجموعه تستي دوباره اجرا ميشود. كد منبعي ابزار شده معمولاً دور ريخته ميشود يا اينكه آرشيو ميشود.
پوشش كدي FAQ
قبل از بحث در مورد اينكه مدلهاي پوششي براي شش زبان به وسيله آناليزگرهاي پوششي در دسترس به طور تجاري حمايت شدهاند، اشارات اصلي كمي بايد در مورد پوشش انجام شود. جزئيات معيار پوشش در بخشهاي زير آمده است.
آيا پوشش 100 درصدي همان پوشش جامع و فراگير ميباشد؟
نه، تست جامع به جز موارد جزئي غير ممكن ميباشد. يك مجموعه تستي جامع نياز دارد كه همه راهها براي واردات ممكن و وضعيتها امتحان شود. اگر حلفهها موجود باشد، هر تكرار ميتواند به عنوان مسير جدايي در نظر گرفته شود، بنابراين شمار مسيرها به طور نجومي افزايش پيدا ميكنند و زياد ميشود، حتي در برنامههاي ساده (مراجعه شود به بخش 3-3 محدوديتهاي آزمايش) . اندازههاي پوششي نمونه بر پايه زيرمجموعههاي كوچك آزمايش جامع ميباشد.
آيا پوشش شاخهاي همان پوشش مسيري ميباشد؟
نه، يك مجموعه تستي كه هر شاخه را يك مرتبه آزمايش ميكند، ضمانت نميكند كه همه مسيرهاي ورودي و خروجي مورد امتحان واقع شوند. اين به معني آن نيست كه همه مسيرهاي ممكن در وجود تكرار، مورد امتحان واقع شدهاند. شمار مسيرهاي ورودي ـ خروجي مورد نياز براي پوشش شاخهاي معمولاً در مقايسه با شمار كلي مسيرهاي ورودي ـ خروجي كوچك ميباشند. در چند موارد ويژه، شاخه و پوشش مسير يكي مي باشند. بعد به قسمت پوشش شاخهاي در اين بخش مراجعه شود.
آيا پوشش حكمي يا پوشش بر پايه مسير همان پوشش مسيري ميباشد؟
نه، مراجعه شود به جواب قبل.
آيا پوشش مسيري ميتواند به دست آورده شود؟
شايد، پوشش مسيري نياز به اين دارد كه:
1. شما وقت كافي براي تعيين و تست همه مسيرهاي ورودي ـ خروجي داشته باشد (رو
شي تنها با 10ها حكم كه ميتواند صدها مسير داشته باشد).
2. و با هر حلقه به عنوان بخش مجزايي با چندين موارد ويژه برخورد كنيد.
3. همه راهها و مسيرها عملي باشند.
آيا هر مسير در يك نمودار جرياني قابل تست ميباشد؟
بستگي دارد. در كدهاي خوب سازمان يافته، اكثر مسيرهاي ورود و خروج ميتوانند اجرا شوند. اينكه ما ميتوانيم مسيري را روي نمودار جريان دنبال كنيم به اين معني نميباشد كه توال
ي تطابقي حكمها آسان ميباشد. مشكل عملي بودن مسير در بخش 3-2-10، حساسيت مسير بحث ميشود.
آيا كمتراز 100 درصد پوشش قابل قبول است؟
بستگي دارد. مسيرهاي غير عملي، كدهاي مرده، و جابجايي استثنا ميتواند مانع 100 درصد پوشش از هر نوعي شوند. 10 تا 15 درصد، اجازه نمونه براي چنين سيستمهاي پيچيدهاي ميباشد.
آيا من ميتوانم در يك آزمايش داراي اطمينان خاطر بالايي باشم اگر پوشش را اندازه نگيرم؟
نه. از دست دادن يك شاخه يا قسمت آسان ميباشد حتي اگر شما يك مجموعه تستي وظيفهاي را به طور شيطاني و زيركانه توسعه دهيد (مراجعه شود به جدول 2-10 و بحث آزمايش هورگان).
آيا دسترسي به پوشش صد درصد براي X و گذراندن همه تستها به اين معني است كه من داراي كد بدون اشكال و گير مي باشم؟
نه، خيلي از اشكال و گيرها ميتوانند از مجموعه تست پنهان شوند كه پوشش بالايي را كسب ميكنند. مراجعه شود به صفحات 396 تا 399، يك بار ديگر با احساس، قسمت تاريك پوشش كدي.
چه موقع ميتوانم تست كردن را متوقف كنم؟
كمترين پوشش كدي توصيه شده براي هر الگوي طراحي آزمايش در بخش معيار خروجي مطابقش داده شده است. در عمل، چند وضعيت غير معمول ممكن است توسعه پيدا كند. در ليست پائين، پوشش به پوشش صد درصدي براي همه مدلهاي آزمايشي انتخاب اشاره ميكند كه اين در پوشش شاخهاي دامنه ميباشد. پوشش به دست آورده ميشود، اما بعضي از تست ها انجام نميشود. كار تا زماني كه همه تستها انجام نشود و پوشش به دست نيايد، انجام نميشود. بالا بردن IUT و آزاد كردن كد بدون تصحيح همه اشكال قابل قبول ميباشد اگر:
1. اشكال شناخته شده غير انتقادي باشند (اشتباهات آرايشي در فرمت كردن GUI، براي مثال)
2. اگر شما يك ليست اشكال شناخته شده را با مستندسازي آزاد سازي شامل كنيد.
همه تستها انجام شود، اما پوشش به دست آورده نشود. (بخش 3-2-10 حساسيت مسير) يا اينكه قسمتهاي اضافي گران باشد. پوشش به دست آورده نشود و بعضي از تستها انجام نشود. شما ممكن است در موقعيتي باشيد كه نتوانيد كد را عوض كنيد. بعضي از اشكال ميتوانند از پوشش جلوگيري كنند. اگر شما نتوانيد كد را عوض كنيد، پس شما نميتوانيد پوشش دست پيدا كند. سعي كنيد موارد تستي را پيدا كنيد كه اشكال و گيرها را دور خواهد زد (ناديده خواهد انگاشت) و پوشش بالاتري توليد كند. پوشش به دست آورده ميشود. همه تستها انجام ميشود يا اينكه شما تصميم گرفتهايد پوشش اضافي ضمانت نشود يا اينكه عملي نباشد. شما تقريباً انجام دادهايد. اين ابزارسازي كه احتياج به اندازهگيري پوشش دارد ميتواند گاهي اوقات باعث شكستهاي ساختگي شود. مطمئن باشيد كه همه ثابتهاي اشكالي واقع كار ميكند. هميشه براي ساختن اجراي دوباره نهايي مجموعه تست پوششي كلي روي يك اجراي غير ابزاري برنامهريزي كنيد. پوشش به دست ميآيد و همه تستها روي كد غير ابزاري انجام ميشود. تبريك ـ شما يك تست مناسب را اجرا كرده ايد.
روش مدلها پوشش كدي دامنهاي
نمودار جريان كنترلي
يك اصطلاح و عبارت شرطي شامل يك وضعيت يا وضعيتهايي ميشود كه درست يا غلط را ارزيابي ميكند. شرطي ها در حكم هاي كنترلي استفاده ميشوند.و مانند اگر. يك شرطيا هر عمل كننده بوليني در يك عبارت ظرطي تطابق ميكند. يك شرظ با چند وضعيت و شرطف يك شرط تركيبي ناميده ميشود. ارزيابي عبارت شرطي به طور نمونه منجر به انتقال كنترل به يكي از چندين بخشها مجزاي كدي ميشود. يك بخش مجزا يك يا دو جمله دائمي لغوي با هيچ جمله شرطي اجرا شده ميباشد. يعني اينكه به محضش اينكه يك بخش مجزا وارد شدف همه جملات در بخش مجزا اجرا خواهند شد(اين تداوم محيط با وقت طي شده را نشان ميدهد ـ ما در مورد
شكستهاي نيرو يا مشكلات فاجعهبار مشابه نگران نيستيم. آخرين جمله در يك بخش مجزا بايد شرط، يك كنترل حلقهاي، خروجي روش ديگري باشد. آخرين قسمت مجزا شامل شرط يا عبارت خروجي ميباشد كه قطعه ديگري را انتخاب ميكند اما شامل كد قطعه بعدي نميشود. شكل 2-10 قسمت ميانگير دايرهاي گروه جواوا را نشان ميدهد. يك ميانگير داره وار مانند يك حلقه ضبط كار ميكند. پيامها به طور متوالي تا زماني كه حد ميانگير به دست آيد، ضبط مي شوند. سپس پيام بعدي روي قديميترين پيام نوشته ميشود. ميانگير (بافر) ميتواند شمار ثابتي از بيشترين پيام هاي اخير را نگه دارد. روش Display lastMsy، اخيرترين n پيام اضافه شده را به نمايش مي گذارد. اگر ميانگير خالي باشدف هيچ پيامي اجرا نميشود. اگر n بزرگتر شمار پيامهاي در دسترس باشد، همه پيامها به نمايش گذارده مي شوند. در اين روش فرض ميشود كه اشاره گر به آخرينت پيام به عنوان پيامهايي كه به ميانگير ميشود، نگهداري ميشود. كد لازم براي Display lastMsy (اجراي آخرين پيام) و قسمت از ميانگير دايرهاي شكل گروه در شكل 2-10 به نمايش كشيده شده است.
جدول 2
برچسبهاي قطعات مطابق برچسبهاي گره در شكل 3-10 مي اشد. همه مدلهاي پوشيده كدي به طور نمونه از بعضي اشكال نمودار جريان كنترل استفاده ميكنند. (مبحث 77). اين گراف نشان مي دهد كه كدام قطعات برنامه اي ممكن است به وسيله ديگران دنبال شود شكل 3-10 نمودار جريان كنترلي را براي Display lastMsy نشان ميدهد.
يك قطعه به وسيله يك گره در يك نمودار كنترلي (يك دايره) نشان داده ميش ود. گرهها ميتوانند به وسيله هر قرارداد مفيدي نامگذاري يا شمارش شوند. حروف بزرگك در اينجا استفاده مي شوند. انتقال شرطي كنترل شاخه يا انشعاب ميباشد. يك انشعاب به وسيله يك لبه برونرو (ورودي) در يك نمودا ركنترلي نشان داده ميشود. يك لبه مستقيم ()پيكان) نشان مثيدهد كه قطعه ديگري ميتواند از قطعه ديگري به دست آيد. پيكان با هيج حكم ويژهاي تطبيق نميكند. نقطه ورودي يك روش به وسيله گره ورودي نشان داده ميشودف كه يك گره بدون لبههاي درون سوي ميباشد. يك روش متشكل از قسمتهايي است كه به وسيله پيكانها به هم مربوط مي شوند.و يك مسي
ر ورودي ت خروجي ـ مسير ياست كه از گره ورودي شروع ميشود و به گره خروجي ختم ميشود. يك مسير به وسيله گرههايي كه مسير را تشكيل ميدهند ساخته شده است. حلقهها به وسيله قطعاتيدرون پرانتزها نمايش داده مي شوند و به وسيله ستارهاي كه نشان مي دهد اين گروه ممكن است از صفر تا nبار تكرار شود، دنبال مي شوند. اين رشتهها اصطلاحات و عبارت هاي مسيري ميباشند (بيزر 90). مسيرها ممكن است از طريق گراف كنترلي در خيلي از روشها دنبال شوند. با در نظر گرفتن تكرار،شمار مسيرهاي ورود و خروج براي اهداف عملي نامحدود ميشود. (به بخش 3-3 محدوديتهاي آزمايش مراجعه شود)
همه زبانهاي برنامهنويسي موجود در اين كتاب از شرطهاي تركيبي حمايت ميكنند. براي مثال به هر وضعيت در سه شرط تركيبي Display lastMsy به عنوان يك بخش مجزا در شكل 7-10 نشان داده ميشود. جعبههاي انداخته شده در اطراف گره ها در شكل 3-10 دلالت مي كند كه ممكن است آنها در همان حكم اتفاق بيفتند. شرطهاي تركيبي بايد به طور جداگانه مدلسازي شوند. همه تركيبات غلط ـ صحيح در يك شرط تركيبي مييتوانند آناليز شوند و تآثيرات ارزيابي بوليني محيط كوچك واضح و روشن ميشود. C++، جاوا، و C عيني از معاني C استفاده ميكنند. ارزيابي بوليني محيط كوچك براي همه اصطلاحات بوليني چند شرطي به كار ميرود. ارزيباي اصطلاحي زماني كه آپوند (عملوند) سمت چپ يك اپراتور || درست ميباشد، متوقف ميشود. ارزيابي زماني كه آپرند يك اپراتور && غلط ميباشد، متوقف ميشود و انشعاب غلط گرفته ميشود. براي مثال اگر زماني كه X صفر نباشد، y/x ارزيابي نميشود و اجرا حكم به حكم بدي ادامه پيدا مي كند. اين روش از تقسيم به وسيله صفر جلوگيري ميكند. زماني كه X صفر ميباشد. پيام Foo تنهاي زماني
فرستاده ميشود كه هر دو قسمت شرط درست باشد. Adu 95 به صورت اتوماتيك توليد ارزيابي محيط كوچك نميكند، اما ايجاد اپراتورهاي محيط كوتاه و "سپس" و " اگر نه" ميكند. اين عملگرها ترتيب ارزيابي و پايان را تعيين ميكنند. اپرند سمت راست عملگر "و سپس" تنها زمانيكه آپرند در سمت چپ درست باشد، ارزيابي ميشود. ارزيابي در اپرند سمت چپ غلط اوليه تمام ميشود، و انشعاب غلط گرفته ميشود. اپرند سمت راست "و اگرنه" زماني كه اپرند سمت چپ غلط باشد، ارزيابي ميشود. ارزيابي در اولين اپرند سمت چپ صحيح پايان ميبايد و اشنعاب درست گرفته ميشود. براي مثال:
واضح است كه هر ارزيابي محيط كوتاهي ارزيابي ميشود. افيل ايجاد عملگرهاي " و سپس"
و " و اگرنه" ميكند، كه معاني Ada را دنبال ميكند. كلمات كليدي تحويل شده توانايي مشابهي را نشان ميدهد.
نشان ميدهد
اختلاطها ارزيابي بوليني محيطي كوتاهي را با پيامهاي بلوك شده اجرا ميكنند و: يك بلوك و يا: و يك بلوك پيامها تنها ميتوانند به اپرند بوليني فرستاده شوند. زماني كه دريافت كننده و : يك بلوك درست باشد، يك بلوك ارزيابي ميشود و به علاوه دريافت كننده ميشود. زماني كه دريافت كننده غلط باشد، يك بلوك ارزيابي نميشود و عبارت به عنوان درست ارزيابي ميشود. زماني كه دريافت دريافت كننده غلط باشد، يك بلوك ارزيابي ميشود و با غلط ارزيابي ميشود.
اگر X درست باشد.
پوشش جملهاي
پوشش جمله اي زماني به دست ميآيد كه همه جملات در يك روش حداقل يك بار اجرا شوند. اين به عنوان پوشش CL، پوشش خطي، پوشش قطعهاي يا پوشش بلوكي شناخته ميشود. پوشش بلوكي پايه و قطعهاي، قطعات را به جاي حكمهاي شخصي و انفرادي محاسبه ميكنند. استفاده قطعات به عنوان واحد از بعضي از تحريفهاي گزارش شده اجتناب ميكند. فرض كنيد كه يك روش دو قطعه داشته باشد، P و Q. Pداراي يك حكم ميباشد و Q داراي 9 حكم. 10 درصد پوشش
حكمي به وسيله اجراي P و 90 درصد پوشش حكمي به وسيله Q به دست آورده ميشود. اگرچه قسمت جملات تمرين شده درست ميباشد، شماره ها شمار تستهاي اضافي مورد نياز را منعكس نميكنند. تحت پوشش قطعهاي، 50 درصد پوشش براي امتحان كردن هر قطعه گزارش ميشود با اشاره به اين كه مجموعه تستي به طور ناقص براي به دست آوردن پوشش قطعه اي ميباشد. اگر ما بتوانيم يك مسير ورودي خروجي پيدا كنيم كه شامل همه قطعات بشود، ما ميتوانيم 100 درصد پوشش حكمي با يك مورد تستي ساده تشخيص دهيم (هيچ ضمانتي وجود ندارد كه چنين مسير وجود خواهد داشت) مسير 12 D
isplay lastMsy، ABC(DEF)*DGH(IGK)*IL چنين مسير ميباشد. حلقهها نياز دارند كه به اندازه كافي براي به دست آوردن همه حكم ها در بدنه حلقه، تكرار شوند. سادگي پوشش حكمي جذاب و گيرا ميباشد. اما اشكال ظريف و پر سر و صدا ميتوانند از مجموعه تستي كه اين نوع پوشش را به دست ميآورد، پنهان شوند. فرض كنيد كه شرط در گروه B به طور غلط به عنوان محاسبهگر msg كدگذاريس شده است. . هر مجموعه تستي كه محاسبهگر پيامي را مجبور به صفر بو.دن حداقل يكبار نكند، اين خطا را از دست خواهد داد. شمار زيادي از مجموعههاي تستي ميتوانند پوشش جملهاي را بدون ديدن اين وضعيت تهيه كنند. از آنجا كه همه جملات در بدنه حلقه گذرگاه تك اشكالهاي كنترلي حلقهاي رايج را آشكار كند. پوشش جملهاي به طور نمونه بدون امتحان كردن هم تركيبات صحيح ـ غلط يك شرط ساده ميتواند به وجود آيد. با بعضي از ساختارهاي كدي، پوشسش جمله اي و همچنين پوشش شاخهاي را به دست ميآورد.
براي مثال ما بايد هر دو شاخهها را براي به دست آوردن همه جملات در FOO بگيريم. با وجود اين، همه حكم ها در يك nule else، Until loop و case بدون ساختارهاي عيوبي ميتوانند بدون امتحان كردن همه شعبه ها به دست آورده شوند. شكل 8-10 اين موقعيتها را نشان ميدهند. با يك nule else مسير ABC پوشش حكمي را بدون امتحان كردن شاخه روي مسير AC نشان ميدهد. براي مثال پوشش حكمي FOO به وسيله قرار دادن x و y به طور مساوي به تست آورده ميشود. زماني كه موقعيت غلط ميباشد، كد توليد يك از كار افتادگي غلط، و اشاره گر غلط مي كند. در
until loop مسير AB توليد پوشش حكمي بدون انجام تكرارهاي حلقهاي ميكند. در ساختار case بدون عيب پوشش جمله اي به وسيله يك مجموعه تستي كه همه مسيرهاي AB، ACD، ACEF و ACEFG امتحان ميكند، تهيه ميشود. شاخه QI از آخرين شرط حذف ميشود. همه اين مثال هاساختارهاي برنامهنويسي سازمان يافتني قانوني مي باشند كه ميتواند اشكال را از مجموعه تستي پوشش حكمي پنهان كند. ساختن يك case براي كمتر از 100 درصد پوشش جملهاي
سخت ميباشد. به طور وضوح، اگر يك گير در يك حكم وجود داشته باشد و آن حكم اجرا نشود، ما هيچ براي آشكار كردن گير و اشكال نداريم. پوشش حكمي كمترين مورد نياز به وسيله معيارهاي
مهندسي سافتور IEEE ميباشد. [IEE E 1008] و استاندارد به ثبت رسيده IBM برا ي مدت 30 سال بود. همان طور كه مثالهاي قبل نشان داد، اين يك معيار ضعيف ميباشد و به عنوان خاليترين مينيمم ميباشد.
پوشش شاخهاي (انشعابي)
پوشش شاخهاي زماني كه هر مسير از يك گره حداقل يك بار به وسيله مجموعه تستي اجرا ميشود، به دست آورده ميشود.اين به عنوان پوشش حكمي، پوشش لبهاي، يا پوشش C2 شناخته ميشود. پوشش شاخهاي روي پوشش حكمي به وسيله نياز به اينكه هر شاخه حداقل يك مرتبه گرفته ميشود، پيشرفت پيدا ميكند. (حداقل يك ارزيابي درست و يك ارزيابي غلط). اين شرط تركيبي را به عنوان يك حكم كلي در نظر مي گيرد. يك عبارت شرطي با n وضعيت، بيشترين تركيبات 2n نتايج صحيح ـ غلط دارد. پوشش شاخهاي نياز به اين داردكه تنها 2 تا آزمايش شود. ما براي مسير گرفته شده از شرط اعتبار دريافت ميكنيم و مهم نيست كه كدام وضعيت به شاخه ختم ميشود. نمودار پوشش شاخهاي Display last msg مانند شكل 7-10 به نظر ميرسد. با گرههاي تركيبي {A,B}، {D,E} و {I,J} طوري رفتار ميشود كه انگار به ترتيب گرههاي X، y و z ساده ميباشند.
چند مسير بايد براي كسب پوشش شاخهاي پوشش داده شود؟
با هيچ حلقه و گرههاي شاخهاي 2 مسير D، پوشش شاخهاي نياز به مسيرهاي بيشتر از D+1 ندارد. اين همچنين براي گرافهاي با حلقه در مسبرهاي كمتر از D+1 ممكن است به دست آورده شود. براي مثال در Display last msg پوشش شاخهاي ميتواند در 3 مسير به دست آورده شود. . در اين مثال ما مي توانيم شاخه ورودي حلقه و شاخه خروجي حلقه را روي يك مسير بگيريم. مانند پوشش جملهاي (حكمي) پوشش شاخهاي هيچ محدوديت ويژهاي را روي شمار تكرارها قرار
نميدهد. اين ميتواند به وسيله چندين مسير مختلف به دست آيد و هر مسير به وسيله مقادير آزمايشي مختلف ممكن است فعال شود. پوشش شاخهاي پيشرفتي روي پوشش حكمي ميباشد زيرا هر نتيجه عبارت شرطي بايد حداقل يك مرتبه مورد آزمايش و امتحان واقع شود. با وجود اين، اين داراي نقاط كور خودش ميباشد. ارزيابي محيط كوتاه به معني آن است كه هر پوشش شاخهاي ممكن است براي شروط تركيبي بدون آزمايش همه وضعيتها به دست آيد. براي مثال در روش C++ يا جاوا، شاخه ++X زمانيكه a==b ميشود گرفته ميشود و مقدار xو y ه
ر چي ميباشد و اين ( ) خالي ميباشد. شاخه --x زمانيكه a!=bو x!=y گرفته خواهد شد، هرچه به وسيله اين برگشت داده ميشود خالي ميباشد. پوشش شاخهاي مسيرهاي غير صريح را كه از شروط تركيبي منتج ميشود ناديده ميگيرد. نمودارجريان كنترلي كه از بسط كامل Display last msg منتج ميشود، داراي مسير ورود و خروج 22 ميباشد كه اين در مقايسه با 11 براي مدل مجموعه ميباشد. پوشش شاخهاي ضمانت نميكند كه همه مسيرهاي ورود و خروج اجرا شوند. تنها 3 تا از 11 مسير احتمالي براي Display last msg مورد نياز ميباشد. اين نقطه كور ميتواند بر مجموعه تست پوششي تأثير كند. حتي در مسيرهاي ساده با شرو ع ساده. براي مثال پوشش شاخهاي براي روش ميتواند با 2 آزمايش به دست آورده شود: {a=0, b=0, x=0, y=0} و {a=0, b=1, x=0, y=1}. در حقيقت چها رمسير ورود ـ خروج وجود دارد: صحيح ـ صحيح، صحيح ـ غلط، غلط ـ صحيح ، غلط ـ غلط. هر مسير محاسبه مختلفي را نشان ميدهد.در مسير صحيح ـ صحيح، x عوض نميشود اما به وسيله هر دو شاخه تغيير ميكند. اين به وسيله يكي روي صحيح ـ غلط افزايش پيدا ميكند و به وسيله غلط ـ صحيح كاهش پيدا مي كند. و روي غلط ـ غلط غير متغير و غير ملموس باقي مي ماند.
پوشش چند وضعيتي
پوشش شاخهاي نياز به امتحان هر وضعيت در يك شرط تركيبي يا تركيبات صحيح ـ غلط يك شرط تركيب ندارد.و خيلي از اشكال رايج بنابراين ميتوانند از مجموعه تست شاخهاي پنهان شوند. مير 3 مدل پوششي متناوب براي امتحان اين روابط آناليز ميكند. (مير 79)پوشش وضعيتي نياز به اين دارد كه هر روش وضعيتي حداقل يك بار به عنوان صحيح يا غلط ارزيابي ميشود. اين نياز به تست كردن همه شاخههاي ممكن ندارد زيرا امكان عوض كردن يك شاخه و تمرين همه وضعيتها وجود ندارد. پوشش وضعيتي بنابراين ميتواند گرهها را از دست بدهد و به طور احتمالي ما را با كمتر از
پوشش حكمي كامل قرار دهد. پوشش شرطي / شاخهاي به وسيله نياز به اينكه هر وضعيت حداقل يك بار صحيح يا غلط ارزيابي شود، روي اين روش پيشرفت ميكند. با شرطهاي پيچيده ويژه، پوشش وضعيتي / شاخهاي اينكه همه تركيبات صحيح /غلط شرايط آزمايش شوند، را ضمانت نميكند. پوشش چند وضعيتي نياز به اين دارد كه همه تركيبات صحيح /غلط شرايط ويژه حداقل يك بار مورد آزمايش واقع شوند. حداكثر 2 تركيب صحيح /غلط براي حكم شرطي با n وضعيت ساده وجود دارد. اگر پوشش چند وضعيتي به دست آيد، سپس همه حكمها، شاخهها و وضعيتها لز
وماً پوشيده ميشوند. اين نوع پوشش، پوشش مسيري را ضمانات نميكند. اگر همه شرايط در يك روش به جدول حقيقي انداخته شود، پوشش چند وضعيتي همان پوشش همه تغييره ميباشد (مراجعه شود به بخش6، مدلهاي تركيبي). موانع عملي ممكن است ما را از تشخيص پوشش چند وضعيتي مانع كند. رسيدن به همه تركيبات شرطي ممكن به خاطر ارزيابي محيط كوتاه غير ممك
ن باشد. شرايط جامع دو طرفه كه چندين اصطلاح شرطي را احاطه مي كند ممكن است مانع تركيبات ويژه شود. اگرچه ما معمولاً به موارد دستي 2n براي پوشش چند وضعيتي احتياج نداريم، موارد تستي بيشتري در مقايسه با يك حكم يا مجموعه تستي پوشش شاخهاي مورد نياز ميباشد. بعضي از ابزارهاي پوشش حدي را گزاري ميدهند كه در آن همه تركيبات صحيح / غلط مشروط تركيبي فعال شدهاند اما معمولاً نميتوانند تعيين كنند كه كدام تركيبات حذف شده غي
ر عملي مي باشند. چندين تركيب صحيح /غلط بر پايه ساختارعملگرهاي "و" و "يا" در يك عبارت شرطي تركيبي ممكن است مفيد به اثبات برسد اگر پوشش چند وضعيتي غير عملي باشند. (مراجعه شود به بخش 6)
پوشش كدي مقصد
پوشش كدي مقصدي به وسيله ابزارسازي القا شده9 در كد مقصد توليد به وسيله همگردان اندازهگيري ميشود. اين پوشش براي تصديق بعضي از استفادههاي امنيتي لازم ميباشد. ابزارهاي پرفايل كردن اجرايي به طور نمونه در اين سطح كار ميكنند و ميتوانند ايجاد قطعات مقصد كنند يا اينكه ايجاد يك پوشش شاخه اي مقصد به عنوان يك تأثير جانبي كنند. نتايج يك آناليزگر پوششي مقصد براي بيان كردن سخت ميباشد. بهينه كردن همگردان، براي مثال، ايجاد كد مقصدي ميكند كه ساختمانش از ساختار كد منبعي به طور اصلي فرق ميكند. خيلي از همگردانها براي ماشينها RISC فراخوانهاي عملكردي را براي افزايش تأثير ذخيره شدگي به صف خواهد كرد. حلقه ها با شمار ثابت ممكن است باز شود و غيره. اگر عملكردهاي داخلي داراي شاخه يا حلقه باشد، كد مقصدي ممكن است شامل شاخههاي بيشتري نسبت به منبع باشد. ماكرهاي C ـ عيني و C++ به شاخههاي غير منتظره و ناهمسانيهاي ديگر منجر ميشوند. اين پوشش همه قدرت و ضعف پوشش كدي منبعي را در بر ميگيرد اما بار اضافي بيان تجزيه و تحليل پوششي روي كد مقصد تحميل مي كند.
هر رويدادي پيشنهاد نميكند كه پوشش كدي مقصد به دست آمده اشكال بيشتري را نسبت به پوشش كدي منبع آشكار ميكند
مدل ـ پايهاي ـ مسيري مدل آزمايشي پايهاي مسيري (كه به عنوان آزمايش شناخته شده شناخته ميباشد) براي آزمايش مسيرهاي ورودي ـ خروجي مختلف C فرا ميخواند. C يك متريك پيچيدگي برنامه ميباشد، c=e-n+2، جايي كه e شمار لبه ها و n شمار گرهها در نمودار جريان كنترلي براي IUT ميباشد. فرمولي كه از تئوري نموداري مشتق گرفته ميشود، متريك پيچيده سايكل متريك بيان ميشود.[MCCABE 76] اين براي پيچيدگي برنامهاي يك خروج و تك ورودي به عنوان C متريك بيان ميشود. تقريباً همه آناليزگرهاي پوششي كدي اين متريك را توليد ميكنند، بنابراين
بحث اهميت آن ضمانت ميشود. هيچ مطالعه تحقيقاتي تا كنون ارتباط مهم بين C، شمار عيوب و قيمت نگهداري را نشان نداده است. اگرچه بعضي از مطالعات [MCCABE +89] ارتباط مهمي بين عيوب در كد طرز عمل و C پيدا كردهاند، متريك به طور عمده اطلاعات بيشتري درباره مشكلات نهفته نسبت به شمارش خطوط كد تهيه نكرده است [Gill 91, Kan 95]. يك C 10 يا بالاتر الزاماً
متمايل به اشكال دلالت نميكند. مطالعات در دسترس كد سازگار با مقصد ارتباط مهمي بين عيوب و C نشان نميدهد (بخش 1-2-4مشاهده شود، چه چيزي اشتباه است؟) . در روش دامنه و برد، C معمولاً اطلاعات بيشتري نسبت به شمارش خطوط كد تهيه نميكند ]لي 93[. روشها بيشتر از شش خطوط، كمتر از 10 درصد همه روشها در يك سيستم را محاسبه ميكنند ] لجنر 92، لي 93، والد 93، لرنز 94[ . اگر Cيك روش 10 يا بيشتر باشد، گروه و روش ممكن است به طور ضعيف طراحي شود يا اينكه ممكن كيس مخصوصي براي اندازه غير معمول يا پيچيدگي كه ضمانت ميشود باشد. اگر روشهاي زيادي وجود داشته باشد كه در آن است،