مهندسی نرم افزار مبتنی بر مولفه :
در نوشته های قبلی در مورد اهمیت برنامه نویسی مبتنی بر مولفه وتعاریف مربوط به مولفه آشنا شدیم در این قسمت هم می خواهیم در مورد تفاوتهای بین انواع برنامه نویسی ها و مهندسی نرم افزار مبتنی بر مولفه اشنایی مختصری داشته باشیم :
تفاوتهای COP با OOP :
-
COP مبتنی بر واسط می باشد ، در حالیکه OOP مبتنی بر اشیاست.
-
COP تکنولوژی بسته بندی و توزیع می باشد ؛ در حالیکه OOP یک تکنولوژی پیاده سازی محسوب می گردد.
-
COP از قابلیت استفاده مجدد در سطح بالا پشتیبانی می کند ، در حالیکه OOP از قابلیت استفاده مجدد در سطح پایین پشتیبانی می کند.
-
COP ، در اصل می تواند در هر زبانی نوشته شود ، در حالیکه OOP محدود به زبانهای شی گرا می باشد.
-
در COP مولفه ها ارتباطات ضعیفی (Loosely Coupled) دارند در حالیکه در OOP اشیاء وابسته به همـدیگر از طریق پیاده سازی وراثت (ارث بری ) ، دارای ارتباطات محکم ( Loosely Coupled) می باشند.
-
COP ، از واسطهای چند گانه و طراحی مبتنی بر واسط پشتیبانی می کند ، در حالیکه OOP ارتباطات واضحی از واسطها ی میان ابرکلاس و زیر کلاسها را فراهم نمی کند.
-
COP از اتصـالات و اکتشافات پویا ( اتـصال در زمان اجرا ) پشتیبانی می کند، در حالیکه OOPپشتیبانی محدودی از مـکانیزمهای ترکیب زمان اجرا و بازیـابی اشیا را فـراهم می آورد .
-
COP مکانیزمهای بهتری برای ترکیب فراهم می کند ، در حالیکه OOP شکلهای محدودی از اتصالات را از طریق فراخوانی فراهم می آورد .
-
COP از خدمات امنیتی ، تراکنشها و غیره در سطح بالایی پشتیبانی می کند ، در حالیکه OOP مجموعه محدودی از خدمات امنیتی ، تراکنشها و غیره را پشتیبانی می کند.
-
در COP ، مولفه ها با در نظر گرفتن قوانین اساسی Framework (چهارچوب ) مولفه ها ، طراحی می شوند در حالیکه OOP با در نظر گرفتن اهداف شیء گرایی طراحی می شوند .
جدول زیر بحث مختصری از شباهتها و تفاوتهای ما بین برنامه نویسی ساختیافته ، شیء گرا و مولفه ای را ارائه کرده است.
قابلیت ترکیب در برنامه نویسی ساختیافته خیلی پایین است در شیء گرا بالاست و در مولفه ای خیلی بالاست . دو واحد پیاده سازی مختلف در برنامه نویسی ساختیافته هرگز با همدیگر قابل تعویض نیستند ، در برنامه نویسی شیء گرا دو شی متفاوت پیاده سازی شده که ویژگیهای مشابه داشته باشند با همدیگر قابل تعویض هستند در حالیکه در برنامه نویسی مولفه ای ، مولفه های متفاوت با ویژگیهای مختلف با همدیگر قابل تعویض هستند .
|
قابلیتها |
COP |
OOP |
SP |
|
تقسیم و غلبه · مدیریت پیچیدگی · تقسیم کردن یک مسئله بزرگ به بخشهای کوچکتر |
√
|
√
|
√ |
|
یکپارچگی داده و تابع · یک نهاد نرم افزاری ، داده ها و عملیاتی که بر روی داده ها انجام می گیرد را ترکیب می کند. · بهبود دادن انسجام یا پیوستگی ( cohesion ) |
√
|
√ |
- |
|
کپسوله سازی · کاربر یک نهاد نرم افزاری ، از چگونگی ذخیره داده ها و پیاده سازی توابع اطلاعی ندارد. · کاستن اتصالات ( پیوستگی) |
√ |
√ |
- |
|
مشخصه · هر نهاد نرم افزاری یک مشخصه (ویژگی ) منحصر به فرد دارد . |
√ |
√ |
- |
|
واسط · وابستگی بین مشخصات را نشان می دهد. · مشخصه (ویژگی) مولفه را به واسطها تقسیم می کند · کاستن وابستگیهای داخلی مولفه ای |
√ |
- |
- |
|
پیکربندی · یک واحد انتزاعی که به طور مستقل می تواند توسعه یابد. |
√ |
- |
- |
-
SP : Structured Programming
-
OOP : Object Oriented Programming
-
COP : Component Oriented Programming
مهندسی نرم افزار مبتنی بر مولفه :
برخی اوقات COP (Component Oriented Programming ) و CBSE (Component Based Software Engineering ) در نوشتار با همدیگر اشتباه گرفته می شوند . هر چند که CBSE یک مفهوم کلی است در صورتیکه COP فقط یه عنوان قسمتی از CBSE به کار برده می شود.
CBSE= COA+COD+COP+COM
-
COA : Component Oriented Analysis
-
COD : Component Oriented Design
-
COP : Component Oriented Programming
-
COM : Component Oriented Management
COA ، COD ، COM به ترتیب نشان دهنده تحلیل مبتنی بر مولفه ، طراحی مبتنی بر مولفه و مدیریت مبتنی بر مولفه می باشند . CBSE ، به تسریع کردن توسعه نرم افزار و کاهش دادن هزینه سیستم با ترکیب نمودن مولفه های نرم افزاری از پیش ساخته شده تاکید دارد . طراحی ، توسعه و نگهداری مولفه ها ، برای استفاده مجدد فرآیند پیچیده ای است . CBSE شیوه های مهندسی نرم افزار و تکنیکهای مختلف نرم افزار را پوشش می دهد چه از نظر عملی و چه از دیدگاه تئوریک که هنوز هم به طور کامل تعریف و توسعه نیافته اند.
در مهندسی نرم افزار سنتی فرآیند توسعه نرم افزار در برگیرنده فعالیتها یا مراحل متوالی بود که عبارتنـد از : تحلیل ، طراحی ، برنامه نویسی ، تست و مجتمع سازی ( یکپارچه سازی ) . در CBSE ، مراحل اصلی توسعه ، تحلیل ، تولید و آماده سازی و اسمبل کردن می باشند. که در برنامه نویسی سنتی فعالیتهای تست و مجتمع سازی ( یکپارچه سازی ) جایگزین فعالیتهای تولید و آماده سازی مولفه و اسمبل کردن مولفه در CBSE شده است .
دو نوع اصلی از فعالیتها در CBSE وجود دارند :
-
DF ( Developing For reuse) : توسعه برای استفاده مجدد.
-
DW ( Developing Withr reuse) : توسعه با استفاده مجدد.
برای DF ، فعالیت توسعه می تواند با دنبال نمودن رویکردها یا دیدگاههای مهندسی نرم افزار سنتی تاکید بر استانداردهای مولفه ای سازماندهی گردد. برای نمونه هر مولفه ارائه کننده در برگیرنده دو نوع واسط می باشد :
-
واسط تامیین کننده : که خدمات ارائه شده توسط مولفه را تعریف می کند.
-
واسط مورد نیاز (ضروری ): که مشخص می کند سیستم استفاده کننده از مولفه ، چه خدماتی را باید ارائه کند.
اگر این واسطها مهیا نشوند ،مولفه کار نخواهد کرد . برای DW ، جستجو و بازیابی مولفه نرم افزار ، فعالیتهای تعیین کننده ای برای ساختن برنامه کاربردی دارند.
از دیدگاه فرآیند مهندسی نرم افزار ، مولفه ها می توانند به 5 فرم مختلف طبقه بندی شوند ( یعنی مولفه در طی گذراندن 5 مرحله حاصل می شود ):
1. مشخصه (ویژگی ) مولفه : این فرم مشخصه (ویژگی ) یک واحد نرم افزاری را ارائه میکند که رفتار مجموعه ای از اشیا مولفه ای را توصیف می کند و یک واحد پیاده سازی را تعریف می کند. رفتار به عنوان یک مجموعه از واسطها تعریف می شود مشخصات مولفه نهایتا در غالب پیاده سازی مولفه خواهد بود.
2. واسط مولفه : فرم واسط تعریفی از مجموعه رفتارهای مولفه را ارائه می کند که می توانند توسط اشیا مولفه ای ارائه شوند.
3. پیاده سازی مولفه : پیاده سازی مـولفه شکـلی از مـشخصه (ویژگی ) مولفه می باشد. این بدین معنی است که می توانند به طور مستقل جایگزین دیگر مولفه ها شده و نصب گردد. آن بدین معنی نیست که مولفه مستقل از دیگر مولفه هاست .بلکه ممکن است وابستگیهای زیادی داشته باشد.
4. مولفه نصب شده : فرم نصب شده که یک نسخه نصب شده یا توسعه یافته از پیاده سازی مولفه می باشد کـه با مستقر کـردن آن در مـحیط اجـرایی تـوسعـه می یابد.استقرار مولفه در محیط اجرائیش ، محیط اجرایی را قادر به شناسایی مولفه نصب شده برای استفاده از آن می کند .
5. شی مولفه ای : نمونه ای از مولفه نصب شده می باشد . مشابه OOP یک شی مولفه در COP یک شی با داده ها و مـشخصات ( ویـژگیها ی) منحصر به فرد می باشد ، که رفتار پیاده سازی شده را اجرا می کند یک مولفه نصب شده ممکن است چند شی مولفـه ای داشته باشد کـه نیازمـند ویـژگیهای صـریح و روشن می باشد.
آن سوی پنجره
در بیمارستانی دو مرد بیمار در یک اتاق بستری بودند.یکی از بیماران اجازه داشت که هر روز بعد از ظهریک ساعت روی تختش بنشيند.تخت او در کنار تنها پنجره اتاق بود. اما بیمار دیگر مجبور بود هیچ تکانی نخورد و هميشه پشت به هم اتاقیش روی تخت بخوابد .آنها ساعتها با يکديگر صحبت مي کردند. از همسر، خانواده، سربازی یا تعطیلاتشان با هم حرف می زدند.
هر روز بعد ازظهربیماری که تختش کنار پنجره بود ، می نشست و تمام چیزهایی که بیرون از پنجره می دید، برای هم اتاقیش توصيف می کرد . بیمار دیگر در مدت این یک ساعت، با شنيدن حال و هوای دنیای بیرون، جانی تازه مي گرفت.
اين پنجره، رو به يک پارک بود که دریاچه زيبایی داشت. مرغابیها و قوها در دریاچه شنا می کردند و کودکان با قایقهای تفريحشان در آب سرگرم بودند. درختان کهن، به منظره بيرون،زیبایی خاصی بخشیده بود و تصویری زیبا از شهر در افق دوردست دیده می شد. همانطور که مرد کنار پنجره این جزئیات را تصویف میکرد، هم اتاقیش چشمانش را می بست و این مناظر را در ذهن خود مجسم می کرد.روزها و هفته ها سپری شد.پرستاري كه براي حمام كردن آن ها آب آورده بود ، جسم بيجان مرد كنار پنجره را ديد كه در خواب و با كمال آرامش از دنيا رفته بود . پرستار بسيار ناراحت شد و از مستخدمان بيمارستان خواست كه آن مرد را از اتاق خارج كنند . مرد ديگر تقاضا كرد كه او را به تخت كنار پنجره منتقل كنند . پرستار اين كار را برايش انجام داد و پس از اطمينان از راحتي مرد ، اتاق را ترك كرد .آن مرد به آرامي و با درد بسيار ، خود را به سمت پنجره كشاند تا اولين نگاهش را به دنياي بيرون از پنجره بياندازد . حالا ديگر او مي توانست زيبايي هاي بيرون را با چشمان خودش ببيند . هنگامي كه از پنجره به بيرون نگاه كرد ، در كمال تعجب با يك ديوار بلند آجري مواجه شدمرد پرستار را صدا زد و پرسيد كه چه چيزي هم اتاقيش را وادار مي كرده چنين مناظر دل انگيزي را براي او توصيف كند ؟
پرستار پاسخ داد : شايد او مي خواسته به تو قوت قلب بدهد . چون آن مرد اصلأ نابينا بود و حتي نمي توانست اين ديوار را ببيند!!.
پس بیایید بهترین هدیه ای که به دیگران می توانیم بدهیم مثبت اندیشی ، مثبت نگری ، عزت نفس ، قوت قلب و اعتماد به نفس باشد و در کارهایمان مثبت اندیش باشیم چون در اینصورت نیروهای مثبت را به سمت خود جذب می کنیم ....
افسوس برای آنها که دعا نمی کنند .
«و اذا سئلک عبادی عنی فانی قریب اجیب دعوه الداع اذا دعان » ( بقره 186).
دعا را مغز و جانمایه عبادت توصیف کرده اند . روح نیایشگر ، روح پرتلاطم عاشقی است که همواره نیازمند و خواهنده طوفانی است . سکوت و سکون را هرگز بر نمی تابد .از طلب باز نمی ایستد و تو گویی همیشه ، از جدایی ها شکایت می کند . می خواهد و باز می خواهد . کودک را دیده اید ؟ فریاد می زند ، اشک می ریزد ، بر در و دیوار می کوبد . مدام و مستمر با تحکم ، با ناله ، با التماس و با تمنا و ...
تا نگرید طفل کی نوشد لبن
تا نگرید ابر کی خندد چمن ؟
و چه بلند و زیباست این سخن :
«هیچ ملتی در تاریخ ، به سقوط و زوال قطعی در نیافتاده است ، مگر آنچه از پیش ، با ترک نیایش ، خود را برای مرگ آماده کرده است .»
دعا ، خواستن است و در راه محبوب گام برداشتن و چه تیره و سرد و خاموشند ، جانهای بی درد و منجمدی که به قول دانته نه دعا می کنند و نه نفرین !؟ او می نویسد :
«همراه ویرژل می رفتم . در بیابانی سرد و در کویری پهناور ، جماعتی دیدم که حیرت زده و سرگردان و بی هدف به گرداگرد پرچمی می دوند و خسته و درمانده ، ملتمسانه کمک می خواهند .پرسیدم : اینان کدامین طایفه اند ؟ گفت : جماعتی که در دنیا نه دعا می کردند و نه نفرین! »
دعا هم زبان عشق و نیاز است و هم اسلحه جهاد و مبارزه و هم فریاد بی نیازی و استغنا بی نیازی از غیر که :
«الهی هب لی کمالالانقطاع الیک » :خداوند کمال انقطاع را بر من ارزانی کن ، و چنان رویین تنم گردان ، که جز به تو ننگرم و جز بر تو سجده نبرم و جز تو را نخوانم و جز در پیشگاه تو سر فرود نیاورم ، ... و دعا زبان عشق و دلدادگی است ، ببینید چه می گو ید :
« وان صیرتنی فی النار مع اعدائک لا قولن انی احبک » و اگر با دشمنانت در آتشم بسوزانی ، فریاد بر آورم که دوستت دارم .
آری ، دعا قرآن ساعد است و زبان عشقی سوزان .
جسم خاک از عشق برافلاک شد
کوه در رقص آمد و چالاک شد
امام علی در نیایش خود می گوید : ای مولا و سرور و آقای من ، آیا چهره ای را که در برابر عظمت تو ، سر بر سجده آورده است را در آتش می سوزانی ؟ و آیا زبانی را که صادقانه ذکر تو را خوانده است ؟، آتش انتقام و خشم می گشایی ؟ هیچگاه چنین ظن و تصوری نسبت تو احساس نمی کنم ، آن چنان کریمی که چنین خبری را به ما نمی دهی ، از فرط فضل و احسان .
حالا ای آقای من ! اگر تو بخواهی بر عذابت صبر می کنم ، اما بگو چگونه شراره های آتش فراق و دوری تو را صبر کنم ؟!
دعا سلاح مومن است و شمشیر جهاد او در مبارزه با شیطان که گفته اند :
دعا جهاد در تنهایی است و سخن گفتن در سکوت و سنگر گرفتن در شکست ، فریاد زدن در خفقان و آموختن با لبهای دوخته و سلاح گرفتن یک خلع سلاح شده ! و این همان بعد اجتماعی دعا در لسان ائمه شیعه است که در طول تاریخ دیرپا و پرنشیب خود ، از رفتن و حرکت و جهاد بازنایستد .
و امام سجاد پس از آن همه درد و داغ و تنهایی و اسارت و در عین چیرگی دشمن ، اینگونه دعا می کرد : خداوندا ، جمع اهریمنان را پریشان ساز و نقش شیطان را بر آب انداز ، پناهگاهش را ویران کن و دماغش را بر خاک مذلت فرو مال .
آری در روزگار پس از شهادت و تنهایی که دارها برچیده و خون ها شسته اند و به گفته دکتر شریعتی : سالهای شوم و هولناک پس از عاشورا که هر لحظه اش سنگینی فاجعه ای را داراست ... سالعای سکوت و تسلیم که نفس ها را در سینه ها زندانی کرده اند ... و از دمشق تا خراسان ، تنها شمشیر حکومت می کند و دروغ و دیگر هیچ ... و امام سجاد تنها حتی یارای آن را که بر رنج خویش بگرید ، و حق آن را که بر سرنوشت خلق بنالد ندارد این گونه با سلاح دعا به میدان می آید :« الهم اجعلنا فی نظم اعدائه ، و اعزلنا عن عدد اولیائه !»
خداوندا به زبان ما توش و توان بخش تا بر ضد شیطان سخن گوییم و دیگران را از وسوسه های وی بر حذر داریم و بکوشیم تا همگان به جنگ او برخیزند و پشت به پشت هم با وی ستیزند .
و پیش از همه قرآن است که می گوید : نماز به پای دار ، نماز از هر پستی و پلشتی ، باز می دارد و همانا یاد خدا برتر و بزرگتر است و بر این روش ، پیامبر لب به دعا می گشاید و با آن همه اوج و عظمت و منزلت می گوید :
«رب زدنی تحیراً فیک ». پروردگارا ، حیرت و حیرانی مرا ، در نگاه عظمت و جلالت خوددت ، افزون فرمای .
آری ، دعا هم زبان عشق و هم فریاد استغنا از غیر خدا است و هم سلاح مبارزه ، «الدعا سلاح المومن و عمادالدین و نورالسموات و اارض » . و پایه استوار دین است و نیز روشنگر نور آسمانها و زمین و چه توصیفی گویا تر و زیباتر از نور .
رشیدالدین میبدی در تفسیر آیه الله نورالسموات و الارض می گوید : « والنور فی الحقیقه ما ینور غیره » نور به حقیقت آن باشد که غیر را روشن کند . نور باطن ، نور توحید و معرفت است . آفتاب معرفت و نور توحید که از مطلع دل های مومنان سربرزند آن را هرگز کسوف و خسوف نبود : « ان شمس النهار تغریب بالیل و شمس القلوب لیست تغیب » یعنی : خورشید روز ، هنگام شب غروب می کند ، خورشید دل و آفتاب معرفت اما غروبی ندارد .
علم هم در کلام نبوی نوری است که بر قلب مومن می تابد ، « العلم نور یقذفه الله فی قلب من یشا » و بدین سان دعا نوری است که روشنگر و منور است . نوری که نیاشگر را به کرانهای ملکوت رهنمون می شود و او را با آفریدگار ، متصل و مربوط می سازد :
قطره دانش که بخشیدی ز پیش بازگردان سوی دریا های خویش
پس بیایید از این ماه پر فیض و برکت بهره ایی کافی ببریم نه تنها در این ماه بلکه در تمام ثانیه های عمرمان هیچ وقت از یاد خدا غافل نشویم ....
دوست خوبمان آقای نوبر لطف کردند و نواقصی را که در قسمت اول تست نرم افزار بود کاملتر کردند که عبارتند از :
1. در کتاب هنر تست نرم افزار - the art of software testing خواندم (و به نظرم کاملا منطقی می آید) که هدف نهایی از تست نرم افزار یافتن باگهای بیشتر است و نه چیز دیگر! البته ادله محکم و قابل قبولی نیز برای این تعریف ارایه میکند.
2. در متن اشاره کرده ای که "یک مجموعه از ورودهای صحیح با خروج های مربوط به آن را تهیه می کنیم ...". در حوزه تست نرم افزار سناریوی ذکر شده در متن (سناریوی آفتابی-sunny scenario) کاملا لازم است اما سناریوی دیگر (سناریوی بارانی-rainy scenario) که هدف آن کشف اشکالات نرم افزار در مواجهه با مقادیر نادرست (مثلا عدم نمایش پیغام خطای مناسب) است نیز از اهمیت بالایی برخوردار است.
3. . در تجربیاتی که داشتم Equivalence Partitioning و Boundary Value Analysis را در تستهای جعبه سیاه نیز به کار بردم که منجر به صرفه جویی در زمان و احتمال کشف خطاهای بیشتری شد.
و البته بعضی از موارد دیگر را می توانید تحت عنوان اصول اساسی تست نرم افزار از وبلاگ ایشان دنبال کنید و البته به همه دوستان توصیه می کنم حتما پست های اول وبلاگ ایشان را که بیانگر اهمیت تست نرم افزار می باشید را حتما مطالعه کنند. و البته از همه دوستان می خواهم که نواقص و اشکالات را بیان کنند تا به مطالبی با کیفیت خوب برسیم.
تست نرم افزار عموما در چهار سطح مختلف صورت می گیرد که این چهار مرحله به صورت ترتیبی انجام می پذیرند و عبارتند از :
- تست واحد (Unit testing)
- تست مجتمع سازی (Integration Testing)
- تست سیستم (System Testing)
- تست پذیرش (Acceptance Testing)
تست واحد (Unit testing) :
یک واحد کوچکترین قسمت قابل تست یک نرم افزار می باشد. که این واحد در برنامه نویسی شی گرا می تواند یک متد باشد و در برنامه نویسی رویه ای می تواند کل برنامه (در زبانی مانند کوبول) یا یک تابع و ... باشد. هدف در این سطح از تست این است که آیا واحد مورد نظر به تنهایی کاری را که باید انجام بدهد می دهد یا نه.
تست مجتمع سازی (Integration Testing) :
تست واحد را برای هر کدام از واحدها به صورت جداگانه انجام دادید و از صحت عملکرد آنها مطمئن شدید. همه واحدها به صورت منفرد به طور صحیح وظایف خود را انجام می دهند، آیا نیازی به تست اینکه وقتی واحدها کنار هم قرار گرفتند و ارتباط برقرار کردند وظایفشان را به شکل صحیح انجام می دهند هست یا نیست. فرضی کنید 2 نفر مشغول کاری هستند هنگامیکه موارد مورد نیاز برای انجام کار بطور کامل مهیا باشد هر کدام از آن 2 فرد می توانند کارشان را به شکل کامل انجام بدهند. اما اگر موارد مورد نیاز برای یکی از آنها توسط دیگری تامین شود ممکن است موارد تهیه شده دقیقا چیزی نباشد که فرد دوم نیاز دارد، یا زمانی زیاد برای تحویل آن موارد مورد نیاز باشد که عملکرد فرد دوم را با مشکل روبرو کند. پس ما نیاز داریم تا مطمئن شویم که آیا واحدها در کنار هم کار می کنند، به درستی فراخوانی می شوند، و داده های درستی را در زمان مناسبی از طریق واسط های آنها عبور می دهند. (تست مجتمع سازی یکی از مهمترین و شاید مهمترین سطح از تست باشد، بخصوص زمانیکه سیستم تغییرات زیادی دارد بعد از انجام تغییرات هرگز این مرحله را فراموش نکنید. پس روشهای مختلف تست مجتمع سازی را بررسی و مطالعه کنید.)
تست سیستم (System Testing) :
تست مجتمع سازی را برای نرم افزار مورد نظر انجام دادید، و از این مطمئن شدید که تمام قطعات در کنار هم می توانند قرار بگیرند و بدون هیچ مشکلی وظایفشان را انجام دهند. قطعات در کنار هم مجتمع شده اند و پیکره اصلی نرم افزار تشکیل شد، ولی نرم افزار خود جزئی از یک سیستم است و نیاز است که با عناصر دیگر این سیستم مانند سخت افزارها ارتباط برقرار کند و با آنها مجتمع شود. پس نیاز داریم تا مطمئن شویم که سیستم به عنوان یک واحد به طور کامل عمل خواهد کرد و نیازمندیهای سیستم را برآورده می کند. این سطح از تست آخرین سطحی است که توسط توسعه دهندگان صورت می گیرد تا قبل از تحویل نرم افزار به کاربرنهایی برای تست از عملکرد آن مطمئن شویم. برای نمونه موارد زیر در تست سیستم مورد بررسی قرار می گیرد:
تست امنیت (Security Testing) : فرضی کنید سیستم باید اطلاعات حساس و حیاتی را پردازش و مدیریت کند و افرادی هستند که بدنبال دسترسی غیر مجاز به این اطلاعات و سوء استفاده از آن هستند. برای اطمینان از عملکرد سیستم در برابر نفوذگران ما باید مکانیزم امنیتی ایجاد شده در سیستم را بررسی کنیم تا مطمئن شویم که سیستم می تواند نفوذهای غیر قانونی را تشخیص دهد و در برابر آنها عکس العمل نشان دهد.
تست بازیابی (Recovery Testing) : در این نوع آزمایش باعث ایجاد مشکل و از کار افتادن سیستم به روش های مختلف می شویم و بررسی می کنیم که آیا سیستم می تواند خود را به طور خودکار بازیابی کند و به فعالیت خود ادامه دهد.
و ...
تست پذیرش (Acceptance Testing) :
نرم افزار به طور کامل توسط توسعه دهندگان در تمام سطوح تست، با موفقیت تست شد، اما آیا نرم افزار واقعا به طور کامل (آنگونه که کاربر نهایی می خواهد) کار می کند. آیا تمام نیازهای فعلی کاربر نهایی را برآورده می کند. پس ما به آزمایشی نیاز داریم که توسط کاربران نهایی، مشتریان و نه توسعه دهندگان صورت می گیرد و هدف آن است که کاربر مشخص کند عملیاتی که برنامه انجام می دهد نیازمندیهای آنها را برآورده می کند یا نه. تست پذیرش دارای انواع مختلفی است که می توان به موارد زیر اشاره کرد:
تست آلفا : تست آلفا در سایت توسعه دهنده نرم افزار و در اغلب موارد توسط کارمندان داخلی و در بعضی از موارد توسط مشتری انجام می گیرد.
تست بتا : تست بتا در سایت مشتریان و توسط مشتریان که از سیستم استفاده خواهند کرد صورت می گیرد و مشکلات مشاهده شده را به توسعه دهندگان گزارش می کنند.
و ...
دکترها به من گفتند که هیچ گاه راه نمی روم، اما مادرم گفت که من راه می روم و من حرف مادرم را باور کردم.
بگذارید داستان دختر کوچکی را برایتان بگویم که در یک کلبه محقر دور از شهر در یک خانواده فقیر به دنیا آمده بود.
زایمان، زودتر از زمان مقرر انجام شده بود و او نوزاد زودرس، ضعیف و شکننده ای بود. همه شک داشتند که زنده بماند. وقتی 4 ساله شد بیماری ذات الریه و مخملک را با هم گرفت، ترکیب خطرناکی که پای چپ او را از کار انداخت و فلج کرد. اما او خوش شانس بود چون مادری داشت که او را تشویق و دلگرم می کرد. مادرش به او گفت: "علی رغم مشکلی که در پایت داری با زندگی ات هر کاری که بخواهی می توانی بکنی، تنها چیزی که احتیاج داری ایمان، مداومت در کار، جرات و یک روح سرسخت مقاوم است."
بدین ترتیب در 9 سالگی دختر کوچولو بست های آهنی پایش را کنار گذاشت و بر خلاف آنچه دکترها می گفتند که هیچ گاه به طور طبیعی راه نمی رود، راه رفت و 4 سال طول کشید تا قدم های منظم و بلندی را برداشت و این یک معجزه بود. او یک آرزوی باور نکردنی داشت، آرزو داشت بزرگ ترین دونده زن جهان شود اما با پاهایی مثل پاهای او این آرزو به چه معنایی می توانست باشد؟
در 13 سالگی در یک مسابقه دو شرکت کرد و در تمام مسابقات، آخرین نفر بود. همه به اصرار به او می گفتند که این کار را کنار بگذارد، اما روزی فرا رسید که او قهرمان مسابقه شد.
از آن زمان به بعد ویلما در هر مسابقه ای شرکت کرد و برنده شد.
در سال 1960 او به بازی های المپیک راه یافت، و آنجا در برابر اولین دونده زن دنیا یک دختر آلمانی قرار گرفت که تا بحال کسی نتوانسته بود او را شکست دهد. اما ویلما پیروز شد و در دو 100 متر، 200 متر، و دو امدادی 400 متر، 3 مدال المپیک گرفت.
آن روز او اولین زنی بود که توانست در یک دوره المپیک 3 مدال طلا کسب کند، در حالی که گفته بودند او هیچ وقت نمی تواند دوباره راه برود.
منبع : farsicrc.com
فرمانده گروهان: بزرگترین عاملی که یک سازمان یا شرکت را از سازمانهای و شرکت های دیگر متمایر می کند چیست؟
...
فرمانده گروهان: محصولی که آن سازمان تولید می کند. محصولی که خروجی نیروی انتظامی است با ارزشترین محصولی است که یک سازمان می تواند تولید کند یعنی امنیت.
...
سازمانها یا شرکت های که نرم افزارها را توسعه می دهند، محصولی به نام نرم افزار تولید می کنند. ولی چه عامل یا عوملی باعث می شوند که یک نرم افزار از نرم افزار مشابه دیگر متمایز و برجسته شود؟ عواملی متعددی را می توان نام برد که باعث این برتری و تمایز شود اما یکی از این عوامل می تواند کیفیت محصول نهایی باشد که به بازار عرضه خواهد شد. اما برای رسیدن به این نقطه تمایز و برتری باید چگونه عمل کرد و اندیشید؟ یگ پاسخ به این سوال می تواند تست نرم افزار و نحوه انجام آن باشد. تنها پارامتری که در اینجا به صورت گذرا به آن اشاره خواهیم کرد و در انتها به بررسی روش تست و آزمایش نرم افزار در XP خواهیم پرداخت. (هدف ما بررسی دقیق تست نرم افزار نمی باشد و فقط آشنایی با بعضی واژه ها و کلمات کلیدی آن می باشد.)
|
تست فقط می تواند وجود خطاها را نشان دهد نه عدم وجود آنها را |
من عاشق یک پارگراف از یک کتاب طراحی نرم افزار هستم که به طور خلاصه اینرا می گفت: "نرم افزار خوب نرم افزاری است که مشتری را خوشحال کند و زمانی مشتری خوشحال خواهد شد که تمام نیازمندیهای که در نظر دارد برآورده شود". پس ما به عنوان توسعه دهنده نرم افزار باید مطمئن شویم که مشتری خود را خوشحال خواهیم کرد، فرآیند و شیوه رسیدن به این اطمینان خاطر یعنی هدف تست نرم افزار. تست نرم افزار به طور رسمی جزی از بازبینی و اعتبارسنجی نرم افزار می باشد، که این دو واژه به صورت زیر تعریف و با هم مقایسه می شوند.
وارسی: "آیا محصول درستی را می سازیم؟"
اعتبارسنجی: "آیا محصول را به درستی می سازیم؟"
وارسی بررسی می کند که آیا نرم افزار از مشخصاتش پیروی می کند یا خیر. اعتبارسنجی باید تضمین کند که نرم افزار انتظارات مشتری را برآورده می سازد یا نه. توجه کنید که آنچه در مشخصات می آید ممکن است دقیقا خواسته های مشتری را برآورده نسازد.
استراتژی تست
استراتژی تست نرم افزار یک توصیف رسمی از این است که نرم افزار چگونه تست خواهد شد. هدف استراتژی تست تعریف همه مراحل برای فرآیند تست نرم افزار است که شامل برنامه ریزی آزمایش، طراحی ابزار آرمایش، اجرای آزمایش و جمع آوری و ارزیابی داده های بدست آمده باشد.
استراتژی جعبه سیاه:
شما نرم افزاری را که به آن نیاز داشتید را تهیه می کنید و بر روی سیستم خود نصب می کنید، شما در اکثر موارد بعد از نصب برنامه فقط یک نسخه اجرایی آنرا در سیستم خود خواهد داشت، و هیچ دسترسی به سورس کد و منابع دیگر برنامه نخواهد داشت. سیستم نرم افزاری موجود برای شما مانند یک جعبه سیاه است که شما نمی توانید دورن آنرا مشاهده کنید و به آن دسترسی داشته باشید. استراتژی جعبه سیاه دقیقا از این دیدگاه برنامه را مورد آزمایش قرار می دهد، یعنی با این پیش فرض که شما هیچ اطلاعاتی از کد و طراحی داخلی برنامه ندارید. حالا هیچ اطلاعاتی از کد و طراحی برنامه در اختیار ما نیست، پس چگونه می توان به صحت کارکرد برنامه پی برد؟ جواب خیلی ساده است، با تمرکز بر ورودی ها و خروجی ها، برای اینکار آزمایش کننده نرم افزار به مستندات نرم افزار مراجعه می کند تا مشخص کند که سیستم در مقابل یک عمل خاص چه پاسخی را باید بدهد. سپس داده های را برای هر کدام از عملیات انتخاب می کند و رفتار سیستم را در مقابل آن داده ها با رفتار واقعی سیستم که در مستندات وجود دارد مقایسه و بررسی می کند.
در یک استراتژی آزمایش جعبه سیاه ما عموما موارد زیر را مورد بررسی و آزمایش قرار می دهیم:
1. بررسی اینکه سیستم نیازمندهای عملیاتی و غیر عملیاتی را تامین می کند یا نه.
2. اعتبارسنجی ورودیها
3. بررسی مقادیر مرزی برای متغییرها: به یک متغییر مقداری کمتر از حداقل مقداری که می تواند قبول کند یا بیشتر از حداکثر مقداری که می تواند قبول کند می دهیم و سیستم را در این شرایط تست می کنیم.
4. بررسی خروج های سیستم: یک مجموعه از ورودهای صحیح با خروج های مربوط به آن را تهیه می کنیم و سپس ورودها را به سیستم وارد می کنیم و خروج های که توسط سیستم داده می شود را با خروجی های واقعی مقایسه می کنیم.
5. بررسی رفتار سیستم در برابر پردازش ورودها و پرس و جوهای بزرگ و سنگین
6. ...
برای موارد بالا و مواردی دیگری که ذکر نشد روشهای مختلف تست در استراتژی جعبه سیاه وجود دارد که عبارتند از:
functional testing, stress testing, recovery testing, volume testing, User Acceptance Testing, system testing, Sanity or Smoke testing, load testing, Usability testing, Exploratory testing, ad-hoc testing, alpha testing, beta testing , ….
|
آیا می توان در استراتژی جعبه سیاه، از این مطمئن شد که سیستم به طور کامل تست شده است؟ خیر، هرگز در این استراتژی نمی توان مطمئن شد که سیستم به طور کامل تست شده است. برای نمونه با چه احتمالی کاربر می تواند ورودهای را انتخاب کند تا شرط زیر چک شود. |
if (name=="Lee" && employeeNumber=="1234" && employmentStatus=="RecentlyTerminatedForCause") {send Lee a check for $1,000,000; } |
|
پس همیشه در این استراتژی مسیرهای خواهند بود که تست نمی شوند و همیشه سیستم با داده های ورودی محدود می توانند تست شوند. |
استراتژی جعبه سفید
حال تصور کنید که شما خود یک توسعه دهنده نرم افزار هستید، پس شما می توانید به سورس، طراحی و منابع دیگر نرم افزار دسترسی داشته باشید. در این حالت سیستم را می توان به یک جعبه شیشه ای (جعبه سفید) تشبیه کرد که شما می توانید براحتی محتویات داخل و نحوه عملکرد آنرا مشاهده کنید. آزمایش جعبه سفید نیز دقیقا از دیدگاه توسعه دهنده نرم افزار را مورد آزمایش قرار می دهد یعنی با این فرض که شما به منطق داخلی و ساختار کد برنامه دسترسی و احاطه دارید و می دانید که سیستم چگونه پیاده سازی شده است. شما با دانستن این موارد می توانید مشخص کنید که آیا اعمال داخلی بر طبق مشخصه ها نجام می شود و یا نه.
در یک استراتژی آزمایش جعبه سفید ما عموما موارد زیر را مورد توجه و بررسی قرار می دهیم:
1. بررسی سطر به سطر کد (Code coverage): در این حالت باید سیستم را به گونه ای اجراء و بررسی کنیم که مطمئن شویم سطر به سطر کد برنامه حداقل یکبار اجراء شده است.
2. بررسی همه انشعاب ها در کد برنامه (branch) : در کد برنامه باید تمام عبارت های شرطی ( if elseها و Switch case ها) را تک به تک مورد بررسی قرار داد. به این صورت که در یک عبارت if else هم فسمت if و هم قسمت else هر کدام بصورت مجزا یکبار اجراء شوند.
3. بررسی همه حلقه ها در برنامه : حلقه ها در نرم افزار نقش اساسی دارند، چون می تونند با اشتباه جزئی مقدار زیادی از منابع را مصرف کرد برای مثال شرط خروج از حلقه به اشتباه هیچ وقت True نشود. برای نمونه حلقه ها را با ورودی بزرگتر از شرط خروج حلقه چک کنید یعنی حلقه اصلا اجر نشود. تستی طراحی کنید که حلقه دقیقا یکبار اجراء شود، تستی طراحی کنید که حلقه در یک بازه خاص اجراء شود و ....
4. مدیریت خطای مطلوب : برسی اینکه اگر به یک متد یک ورودی نامعتبر وارد شود، نحوه آگاه سازی و نمایش مطلوب خطا برای کاربر چگونه باشد؟
5. بررسی امنیت : سیستم را از این جهت که چگونه در برابر دسترسی های غیرمجاز، هک، کرک و هر چیز دیگر که می تواند به آن آسیب برساند مورد بررسی قرار می دهد. در اینجا ما باید مکانهای از کد را که داده ها را اعتبارسنجی و مدیریت می کنند، دسترسی به منابع یا عملیات مهم و حیاتی را انجام می دهند را بررسی کنیم.
6. ...
7. برای موارد بالا و مواردی دیگری که ذکر نشد روشهای مختلف تست در استراتژی جعبه سفید وجود دارد که عبارتند از:
Basis Path Testing, Equivalence Partitioning/Boundary Value Analysis, Method Coverage, Statement Coverage, Branch Coverage, Condition Coverage, Data Flow Testing, Flow Graphs Revisited, ….
ادامه دارد.
لوئیز زنی بود با لباسهای کهنه و مندرس، و نگاهی مغموم وارد خواروبار فروشی محله شد و با فروتنی از صاحب مغازه خواست کمی خواروبار به او بدهد. به نرمی گفت شوهرش بیمار است و نمیتواند کار کند و شش بچه شان بی غذا مانده اند.
جان لانک هاوس، با بی اعتنایی، محلش نگذاشت و با حالت بدی خواست او را بیرون کند
زن نیازمند، در حالی که اصرار میکرد گفت آقا شما را به خدا به محض این که بتوانم پول تان را می آورم
جان گفت نسیه نمی دهد.
مشتری دیگری که کنار پیشخوان ایستاده بود و گفت و گوی آن دو را میشنید به مغازه دار گفت :
ببین خانم چه می خواهد، خرید این خانم با من .
خواربار فروش با اکراه گفت: لازم نیست، خودم میدهم. لیست خریدت کو؟
لوئیز گفت: اینجاست.
" لیست را بگذار روی ترازو. به اندازه وزنش، هر چه خواستی ببر."
لوئیز با خجالت یک لحظه مکث کرد، از کیفش تکه کاغذی در آورد، و چیزی رویش نوشت و آن را روی کفه ترازو گذاشت. همه با تعجب دیدند کفه ی ترازو پایین رفت.
خواروبار فروش باورش نشد. مشتری از سر رضایت خندید.
مغازه دار با ناباوری شروع به گذاشتن جنس در کفه ی ترازو کرد. کفه ی ترازو برابر نشد، آن قدر چیز گذاشت تا کفه ها برابر شدند.
در این وقت خواروبار فروش با تعجب و دل خوری تکه کاغذ را برداشت ببیند روی آن چه نوشته شده است.
کاغذ، لیست خرید نبود، دعای زن بود که نوشته بود:" ای خدای عزیزم، تو از نیاز من با خبری، خودت آن را بر آورده کن "
مغازه دار با بهت جنس ها را به لوئیز داد و همان جا ساکت و متحیر خشکش زد.
لوئیز خداحافظی کرد و رفت.
فقط اوست که میداند وزن دعای پاک و خالص چه قدر است .....
"من می خام پولیس بشم" این جمله را پسر دایی کوچکم هر وقت من می بینه به من می گه. اما من حتی زمانی که یک بچه بودم نیز این جمله را نگفتم. 2 ماه گذشت، آموزش هم تمام شد. در تمام مدت این 2 ماه، محیط نظامی، قوانین و مقررات خشک و بی روحش را با تمام نفرت که از همه آنها داشتم تحمل کردم. اما اعتراف می کنم که شانس با من همراه بود چون مرکز آموزش در شهر خودمان بود (شاید یکی از بزرگترین نقص های بیشمار این وبلاگ این باشه که هیچ اطلاعاتی خاصی از نویسنده آن در خود وبلاگ نیست، پس می گویم که من اهل تبریز هستم و آموزش را در مرکز آموزش ولیعصر(عج) تبریز بودم)، و واقعا فرماندهان خوبی داشتیم هم فرمانده گروهان، هم فرمانده گردان و تقریبا بسیار خوب با من راه آمدند. با منی که یک سرباز بی استعداد بودم یا یک سربازی که نمی خواست خودش را با محیط وفق دهد و همه پیامدهای آن را قبول می کرد پس بی استعداد بنظر می آمد البته گزینه دوم، گزینه نزدیگ به واقعیت است. من در این 2 ماه خودم را با محیط نظامی و قوانین آن وفق ندادم اما 18 ماه هنوز در بیش است، 18 ماهی که دیگر در شهر خودم نیستم، 18 ماهی که شاید در تهران باشم . 24 ساعت زمانی کافی است، برای روزی بزرگ داشتن فکر کنم جمله ای مشابه این در یکی از شعرهای احمد شاملو بود پس 18 ماه زمانی بسیار کافی است که من یک نظامی خوب بشوم و شاید زمانی کافی باشد که نظام را با خودم وفق دهم پس باید منتطر باشم و نتیجه را نگاه کنم. البته جا دارد از اینجا از فرماندهان خودم واقعا تشکر و قدردانی کنم و برای آنها آرزوی موفقیت یعنی ستارهای بیشتر و بزرگتر در نظامی گری و سلامتی و بهروزی در کل زندگی کنم.
سلام به همه دوستان، شارپدیا عزیز من جمله این نیز بگذرد را واقعا قبول دارم ولی دعا کنید زود بگذرد.
