چشم هایم را می بندم، و به گذشته برمی گردم. به گذشته ای دور بسیار دور زمانیکه یک بچه بودم و دستان خدا در دستان من بود و باهم در باغی سبز قدم برمی داشتیم. و خدا سبز بودن را برای من معنا می کرد و از رنگ سبز و مردان سبز می گفت. او می گفت و مرا در اعجاب رنگ سبز غرق می کرد. ولی سبز یعنی چه؟ من چیزی بخاطر ندارم از آن سخنان سحر انگیز. چشمهایت را ببند شاید در خاطر تو آن سخنان مانده باشد.
ولی همه بازی این نبود، آیا بخاطر می آوری انتهای آن باغ را. انتهای آن باغ سبز، نوری سرخ رنگ بود و خدا آن را میوه ممنوعه این باغ می نامد. میوه ممنوعه آن باغ به رنگ سرخ بود، رنگ سرخ آتش. آتشی که وقت خواست عشق خود را به تصویر بکشد، به سفالخانه خود راه نداد. و مرا تنها با گل سرشت و دانه ای در درون من قرار داد تا به رنگ سبز درآیم. و گفت یادت باشد که رنگ سبز و سرخ در مقابل هم هستند.
من قد کشیدم و بزرگ شدم و همینطوریکه روزی دست مادر خود را رها گردم و گم شدم دستان خدا را رها کردم و باز گم شدم. ولی باز این روزها به هر جا می نگریستم، نشانه ای از رنگ سبز می دیدم، دانه ای که خداوند در درونمان قرار داده بود باز می خواست جوانه بزند، چونکه می خواستیم جوانه بزند تا شاید بتوانیم سبز بودن را بار دیگر به تصویر بکشیم. ولی افسوس باز رنگ سرخ در برابر سبزی مردم بود، رنگ سرخ آتش. ابلیس بار دیگر می خواست این میوه ممنوعه را به دست برده ای دهد تا باغ سبز را به تسخیر خود در آورد، تسخیر باغ سبزی به وسعت ملت ما. ابلیس همسان خود را یافت بود، کسی که می توانست آتش سرخ را در دستان خود بگیرد و باغ سبز را به آتش بکشد و ما را به هبوط دیگر دچار کند. همسان ابلیس را در انتهای باغ می دیدم که آتش سرخ را در بالای سرش به گردش در می آورد و به سوی سبزی ما حرکت می کرد، او نزدیگ و نزدیگ تر می شد و خود جزی از سرخی آتش می شد، چشم هایم را می بندم، بگو که هنوز سبز هستیم و سبز می مانیم.
باز بخاطر می آورم، ظهر یک روز عجیب را، روزی که شهر حالی دیگر می گرفت، روزی که شهری می خروشد و ناله سر می داد، اما برای چه کسی و برای چه چیز. کودک بودم ولی در درون من نیز آشوبی برپا بود به سان شهرم. بی اختیار به دنبال دیگران گام برمی داشتم گام به گام آنها می رفتم، به میدانی بزرگ می رسم خیمه ها گسترده اند، ولی باز آنجا نبردی بین رنگ ها است. خیمه های سرخ رنگ، خیمه های سبز رنگ.خدایا اینان کیستند که مردم اینچنین برای آنها اشک می ریزند؟ سر فرود آورد و در گوشم نجوا کرد: این نبرد حق و باطل است، نبرد سبز و سرخ. نبرد مردی سبز به سان عیسی، به سان عیسی که عشق را زیست او نیز آزادگی را زیست. لشگر سبز به نبرد لشگرسرخ رفت، لشگر سرخ، لشگرسبز را به تسخیر در آورد. ولی اینگونه نبود لشگرسبز موجی سبز را برای همیشه تاریخ بنیان نهاد. آری من آن موج سبز را این روزها باز می بینم، مردمانی از جنس رنگ سبز به هر سو که می نگری به سوی سبز زیستن گام برمی دارند، من نیز گام به گام آنها، اما نه بی اختیار چون کودکیم. اما باز لشگر سرخ در برابرمان هست، حریص تر از لشگر سرخ آن ظهر، شاید باز لشگر سرخ مردان سبز را از لب تیغ بگذاراند ولی ما باز میدانیم که این موج سبز خواهد ماند برای همیشه تاریخ. پس سبز بودیم، سبز هستیم و سبز خواهیم ماند.
میندیش که دیگران ، تو را به آرمانت خواهند رساند .
رهبران فرزانه ی پیشین،
دلیل موفقیت خود را در مردم می دیدند
و دلیل شکست خود را در خود.
راستی را در مردم می دیدند و کژی را در خود.
از این رو، حتا با رنج یک تن،
گناه از خویش می دیدند و خود را در کنار می نهادند.
ولی امروز به یقین این گونه نیست.
امروز، رهبران کارشان را در نهان می کنند،
و گناه بر مردم بی خبر می نهند.
مشکلات را فزونی می دهند،
و مردمان که توان رویارویی با این دشواری را ندارند،
مجازات می کنند.
آنان را به بالاترین مرتبه زیر فشار می گذارند،
و آنان که تابش را ندارند، هلاک می شوند.
وقتی مردم دریابند که توان کافی ندارند، ظاهر سازی کنند.
و دم که گاه چنین دو رویی و تظاهر است،
چه گونه رهبران و مردم با هم بسازند؟
توان که نباشد، نیرنگ به کار رود.
آگاهی که نباشد، فریب به کار رود.
مواد اولیه زندگانی نباشد، دزدی به کار رود.
ولی عامل اصلی در این دزدی و دروغ گویی کیست؟ (لطفاً جواب دهید)
منبع: این کتاب بی فایده است (آموزه های جوانگ زه)
سلام به همه دوستان، البته نمی دانم که کسی دیگر به این مکان متروکه سر می زند یا نه. ولی من می نویسم که حداقل به خودم یادآوری کنم که باید دوباره اینجا بنویسم البته به شرطی که حداقل مطلبی که نوشته می شود خودم را به عنوان یک خواننده راضی کند. توی این مدت مطالب ناتمام زیادی نوشتم چون هیچ کدام برای خودم ارضاء کننده نبود پس همینطور ناتمام مانده اند. شاید بزودی دوباره شروع کنم، یا شاید بعد از اتمام سربازی یا ....(بعضی از دوستان با توجه به یکی از پست های قبلی فکر می کنند خدمت سربازی من توی تهران هست. اما من دوباره به شهرمان تبریز برگشتم. پلیس فرودگاه تبریز، اگر گذرتان به فرودگاه تبریز افتاد من در خدمتتان هستم. )
دوستان که می خواهند بحث Unit Testing را دنبال کنند، می توانند به وبلاگ آقای وحید نصیری با عنوان تازه های برنامه نویسی مراجعه کنند. مطالعه این منبع را برای آشنایی با موضوعات روز برنامه نویسی به همه دوستان توصیه می کنم.
... شب عاشورا بود شهر یکپارچه روضه بود وخانه یکپارچه سکوت و درد...
گفتم در این تنهایی درد و این شب سوگ، بنشینم و با خود سوگواری کنم، مگر نمی شود تنها عزاداری کرد؟ نشستم و روضه ای برای دل خویش نوشتم:
... پیش چشمم را پرده ای از اشک پوشیده است.
در میان هیاهوی مکرر و خاطره انگیز دجله و فرات، این دو خصم خویشاوندی که هفت هزار سال، گام به گام با تاریخ همسفرند، غریو و غوغای تازه ای برپا است:
صحرای سوزانی را می نگرم، با آسمانی به رنگ شرم، و خورشیدی کبود و گدازان، و هوایی آتش ریز، و دریای رملی که افق در افق گسترده است، و جویباری کف آلود از خون تازه ای که می جوشد و گام به گام، همسفر فرات زلال است.
می ترسم در سیمای بزرگ و نیرومند او بنگرم، او که قربانی این همه زشتی و جهلاست.به پاهایش می نگرم که همچنان استوار و صبور ایستاده و این تن صدها ضربه را بپاداشته است
و شمشیرها از همه سو برکشیده، و تیرها از همه جا رها، و خیمه ها آتش زده و رجاله در اندیشه غارت، و کینه ها زبانه کشیده و دشمن همه جا در کمین، و دوست بازیچه دشمن و هوا تفتیده و غربت سنگین و دشمن شوره زاری بی حاصل و شن ها داغ و تشنگی جان گزا و دجله سیاه، هار و حمله ور و فرات سرخ، مرز کین و مرگ در اشغال «خصومت جاری» و ...
می ترسم در سیمای بزرگ و نیرومند او بنگرم، او که قربانی این همه زشتی و جهل است.
به پاهایش می نگرم که همچنان استوار و صبور ایستاده و این تن صدها ضربه را بپاداشته است.
ترسان و مرتعش از هیجان، نگاهم را بر روی چکمه ها و دامن ردایش بالا می برم:
اینک دو دست فرو افتاده اش،
دستی بر شمشیری که به نشانه شکست انسان، فرو می افتد، اما پنجه های خشمگینش، با تعصبی بی حاصل می کوشد،تا هنوز هم نگاهش دارد
جای انگشتان خونین بر قبضه شمشیری که دیگر ...
... افتاد!
و دست دیگرش، همچنان بلاتکلیف.
نگاهم را بالاتر میکشانم:
از روزنه های زره خون بیرون می زند و بخار غلیظی که خورشید صحرا میمکد تا هر روز، صبح و شام، به انسان نشان دهد و جهان را خبر کند.
نگاهم را بالاتر میکشانم:
گردنی که، همچون قله حرا، از کوهی روییده و ضربات بی امان همه تاریخ بر آن فرود آمده است. به سختی هولناکی کوفته و مجروح است، اما خم نشده است.
نگاهم را از رشته های خونی که بر آن جاری است باز هم بالاتر می کشانم:
ناگهان چتری از دود و بخار! همچون توده انبوه خاکستری که از یک انفجار در فضا میماند و ...
دیگر هیچ !
پنجه ای قلبم را وحشیانه در مشت میفشرد، دندان هایی به غیظ در جگرم فرو میرود، دود داغ و سوزنده ای از اعماق درونم بر سرم بالا می آید و چشمانم را می سوزاند، شرم و شکنجه سخت آزارم می دهد، که:
«هستم»، که «زندگی می کنم».
این همه «بیچاره بودن» و بار «بودن» این همه سنگین!
اشک امانم نمی دهد؛ نمی توانم ببینم.
پیش چشمم را پرده ای از اشک پوشیده است.
در برابرم، همه چیز در ابهامی از خون و خاکستر می لرزد، اما همچنان با انتظاری از عشق و شرم، خیره می نگرم؛
شبحی را در قلب این ابر و دود باز می یابم، طرح گنگ و نامشخص یک چهره خاموش، چهره پرومته، رب النوعی اساطیری که اکنون حقیقت یافته است.
هیجان و اشتیاق چشمانم را خشک میکند. غبار ابهام تیره ای که در موج اشک من می لرزد، کنارتر میرود . روشن تر می شود و خطوط چهره خواناتر.
هم اکنون سیمای خدایی او را خواهم دید؟
چقدر تحمل ناپذیز است دیدن این همه درد، این همه فاجعه، در یک سیما، سیمایی که تمامی رنج انسان را در سرگذشت زندگی مظلومش حکایت می کند. سیمایی که ...
چه بگویم؟
مفتی اعظم اسلام او را به نام یک «خارجی عاصی بر دین الله و رافض سنت محمد» محکوم کرده و به مرگش فتوی داده است.
و شمشیرها از همه سو برکشیده، و تیرها از همه جا رها، و خیمه ها آتش زده و رجاله در اندیشه غارت، و کینه ها زبانه کشیده و دشمن همه جا در کمین، و دوست بازیچه دشمن و هوا تفتیده و غربت سنگین و دشمن شوره زاری بی حاصل و شن ها داغ و تشنگی جان گزا و دجله سیاه، هار و حمله ور و فرات سرخ، مرز کین و مرگ در اشغال «خصومت جاری» و ...
در پیرامونش، جز اجساد گرمی که در خون خویش خفته اند، کسی از او دفاع نمی کند.
همچون تندیس غربت و تنهایی و رنج، از موج خون، در صحرا، قامت کشیده و همچنان، بر رهگذر تاریخ ایستاده است.
نه باز می گردد،
که : به کجا؟
نه پیش می رود،
که : چگونه؟
نه می جنگد،
که : با چه؟
نه سخن می گوید،
که : با که؟
و نه می نشیند، که :
هرگز !
ایستاده است و تمامی جهادش اینکه ... نیفتد
همچون سندانی در زیر ضربه های دشمن و دوست، در زیر چکش تمامی خداوندان سه گانه زمین(خسرو و دهگان و موبد – زور و زر و تزویر – سیاست و اقتصاد و مذهب)، در طول تاریخ، از آدم تا ... خودش!
به سیمای شگفتش دوباره چشم می دوزم، در نگاه این بنده خویش مینگرد، خاموش و آشنا؛ با نگاهی که جز غم نیست. همچنان ساکت میماند.
نمی توانم تحمل کنم؛سنگین است؛
تمامی «بودن»م را در خود می شکند و خرد می کند.
می گریزم.
اما می ترسم تنها بمانم، تنها با خودم، تحمل خویش نیز سخت شرم آور و شکنجه آمیز است.
به کوچه می گریزم، تا در سیاهی جمعیت گم شوم.
در هیاهوی شهر، صدای سرزنش خویش را نشنوم.
خلق بسیاری انبوه شده اند و شهر، آشفته و پرخروش می گرید، عربده ها و ضجه ها و عَلم و عَماری و «صلیب جریده» و تیغ و زنجیری که دیوانه وار بر سر و روی و پشت و پهلوی خود می زنند، و مردانی با رداهای بلند و....... د
عمامه پیغمبر بر سر و....... د
آه ! ... باز همان چهره های تکراری تاریخ! غمگین و سیاه پوش، همه جا پیشاپیش خلایق!
تنها و آواره به هر سو می دوم، گوشه آستین این را می گیرم، دامن ردای او را می چسبم، می پرسم، با تمام نیاز می پرسم؛ غرقه در اشک و درد:
«این مرد کیست»؟
«دردش چیست»؟
این تنها وارث تاریخ انسان، وارث پرچم سرخ زمان، تنها چرا؟
چه کرده است؟
چه کشیده است؟
به من بگویید:
نامش چیست؟
هیچ کس پاسخم را نمی گوید!
پیش چشمم را پرده ای از اشک پوشیده است.
دکتر شریعتی
یک تاپیک بسیار مفید و جالب به عنوان سوالاتی در آنالیز و طراحی توسط Elham_gh در سایت برنامه نویس ایجاد شده است. که واقعا جای اینگونه تاپیک ها در اکثر فروم ها خالی است. از تمام دوستان علاقمند می خواهم که سری به این تاپیک بزنند. هدف این تاپیک از دیدگاه Elham_gh :
دوستان برای برآورد سطح دانش و بالا بردن دانسته هامون، من یک پیشنهاد دارم . اگر دوستان هم همراهی کنند , من از اینکار در جاهای دیگه نتایج خوبی گرفتم. اگر استقبالی نشه که تاپیک رو حذف می کنم.
یکسری سئوال مطرح می شه و از بقیه دوستان خواسته می شه جوابی که می دونن بگن. اینکه جوابش چیه و یا اگه اون مسئله رو چطور طراحی و مدل و یا آنالیز می کنند. و یا از چه pattern ی استفاده می کنند. در نهایت جوابها جمع بندی می شه و نفر بعدی سئوال دیگه ای رو مطرح می کنه. جمع بندی هر سئوال به عهده مطرح کننده سئوال است.
فقط سئوال این مدلی نباشه که سیستم حسابداری را چگونه طراحی می کنید!!!
و به پیشنهاد مدیر محترم بخش هم , اولین پست به فهرست بندی سوال اختصاص داده می شود.
سئوال اول رو خودم مطرح می کنم. تا دوستان دیگر هم ادامه دهند.
البته سوال اول توسط خود ایشان پاسخ داده شد و سوال دوم مجددا توسط ایشان مطرح شده است. علاقمندان می توانند روند کار را از تاپیک دنبال کنند. البته در انتها توصیه می کنیم که سایر مقالات و نوشته های ایشان را از سایت برنامه نویس حتما دنبال کنید.
هر کسی توتمی دارد ،
و توتم من " قلم " است.
و قلم توتم قبیله من است .
خدای همه قبایل ،
خدای همه عالمیان بدان سوگند می خورد .
به هر چه از آن می تراود سوگند می خورد .
به خون سیاهی که از حلقومش می چکد ، سوگند می خورد .
و من ؟
قلم خویشاوند آن من راستین من است .
عطیه روح القدس من است.
زبان دفترهای خاکستری و سبز من است .
همزاد آفرینش من ،
زاد هجرت من ،
همراه هبوط من
و انیس غربت من
و رفیق تبعید من
و مخاطب نوع چهارم من
و همدم خلوت تنهایی و عزلت من
و یادآور سرگذشت و یادآور سرشت و بازگوی سرنوشت من است .
روح من است که جسم یافته است .
" آدم بودن من " است که شیء شده است .
آن " امانت " است که به من عرضه شده است .
آه که چه سخت و سنگین است !
زمین در کشیدن بار سنگینی اش می شکند .
کوه ها به زانو می آیند و آسمان می شکافد و فرو می ریزد .
قلم ، توتم قبیله من است .
قلم ، توتم من است .
او نمی گذارد که فراموش کنم ، که فراموش شوم ،
که با شب خو کنم ، که از آفتاب نگویم ،
که دیروزم را از یاد ببرم ، که فردا را بیاد نیارم ،
که از " انتظار " چشم پوشم ،
که تسلیم شوم ،
نومید شوم ،
به خوشبختی رو کنم ،
به تسلیم خو کنم ،
که ... !
قلم ، توتم من است ، توتم ما است .
به قلمم سوگند !
به خون سیاهی که از حلقومش می چکد سوگند !
به رشحه ی خونی که از زبانش می تراود سوگند !
به ضجه های دردی که از سینه اش برمی آید سوگند ... !
که توتم مقدسم را نمی فروشم ، نمی کشم .
گوشت و خونش را نمی خورم .
به دست زورش تسلیم نمی کنم .
به کیسه زرش نمی بخشم .
به سرانگشت تزویرش نمی سپارم .
دستم را قلم می کنم و قلمم را از دست نمی گذارم .
چشمهایم را کور می کنم ،
گوشهایم را کر می کنم ،
پاهایم را می شکنم ، انگشتانم را بند بند می برم ،
سینه ام را می شکافم ،
قلبم را می کشم ، حتی زبانم را می برم و لبم را می دوزم ...
اما قلمم را به بیگانه نمی دهم ...
قلم ، توتم من است .
بگذار بر قامت بلند و راستین و استوار قلمم به صلیبم کشند ،
به چهار میخم کوبند ،
تا او که استوانه حیاتم بوده است ، صلیبب مرگم شود .
شاهد رسالتم گردد ، گواه شهادتم باشد .
تا خدا ببیند که به نامجوئی ، بر قلمم بالا نرفته ام ،
تا خلق بداند که به کامجوئی
بر سفره ی گوشت حرام توتمم ننشسته ام ،
تا زور بداند ، زر بداند و تزویر بداند
که امانت خدا را ، فرعونیان نمی توانند از من گرفت .
ودیعه عشق را قارونیان نمی توانند از من خرید .
و یادگار رسالت را بلعمیان نمی توانند از من ربود ...
هر کسی را ، هر قبیله ای را توتمی است .
توتم من ، توتم قبیله ی من قلم است .
قلم زبان خدا است .
قلم امانت آدم است .
قلم ودیعه عشق است .
هر کسی را توتمی است .
و قلم ، توتم من است .
و قلم ، توتم ما است.
به تصویر بالا نگاه کنید فکر می کنید کلاس دیاگرام بالا متلعق به کدام قسمت از یک نرم افزار است. شاید حدس زدن آن در اولین مرحله برای خیلی ها مشکل باشد پس لطفا بر روی تصویر کلیک کنید تا تصویر را با اندازه واقعی مشاهده کنید و از نام متدها قضیه را حدس بزنید. تمام کلاس های بالا برای تست متدهای کلاس های نرم افزار یا همان تست واحد (Unit Test) طراحی و پیاده سازی شده است. شاید اگر به سورس بسیاری از نرم افزارهای مشهور دسترسی داشته باشید، حتما مشابه این کلاس ها را در یک پکیچ جداگانه در سورس خواهید یافت (تصویر بالا مربوط به مولفه منوی RadControls از شرکت Telerik است که حنما اکثر توسعه دهندگان وب با محصولات این شرکت آشنا هستند). پس اجازه بدهید در پایین به بررسی اصول و نحوه پیاده سازی تست های واحد بپردازیم.
تست واحد (Unit Testing):
یک واحد کوچکترین قسمت قابل تست یک نرم افزار می باشد. که این واحد در برنامه نویسی شی گرا می تواند یک متد باشد و در برنامه نویسی رویه ای می تواند کل برنامه (در زبانی مانند کوبول) یا یک تابع و ... باشد. در تست واحد، هر واحد به طور جداگانه تست می شود به این صورتیکه تکه کدی نوشته می شود، تا آن واحد را فراخوانی کند و به کار ببرد تا صحت یا عدم صحت عملکرد آن را بررسی کند (ما کدی را می نویسیم گه کد اصلی برنامه را تست می کند).
|
هدف و فلسفه تست واحد ما از تست واحد استفاده می کنیم تا نشان دهیم که واحد مورد نظر کاری را که ما فکر می کنم انجام می دهد یا نه. |
چرا باید تست واحد را انجام بدهیم؟
در دروسی مانند آزمایشگاه مدار منطقی، معماری کامپیوتر و ... برای اینکه یک مدار را پیاده سازی کنید چگونه عمل می کردید. ابتدا تک تک IC های را که باید بکار میبردید تک به تک تست می کردید تا از صحت عملکرد هر کدام مطمئن شوید تا مجبور نباشید بعد از صرف ساعت ها وقت دنبال مشکل بگردید و در آخر متوجه شوید که IC مشکل داشت. اولین دلیل تست واحد نیز همین می باشد که ما بعد از اضافه کردن یک واحد به نرم افزار می خواهیم از صحت عملکرد آن مطمئن شویم. دومین دلیل کاهش زمان و هزینه ای است که باید صرف اشکال زدایی شود، در تست واحد شما می دانید کجا را باید برای کشف دلیل خطا و رفع آن جستجو کنید یعنی در این مرحله دامنه بررسی فقط به همان واحد محدود می شود. دلیل سوم در تست واحد می توان چندین تست را در یک زمان اجراء کرد.
مزایا و منافع
علاوه بر دلایلی که در بالا اشاره شد، ما با انجام تست های واحد منافع زیادی را به دست می آوریم که به بعضی از آنها در ادامه اشاره خواهد شد.
1- تست های واحد همانند یک سند اجرایی هستند که نشان می دهند شما انتظار دارید که کد نوشته شده در شرایط مختلف چگونه عمل کند. اعضای تیم می توانند برای درک عملکرد کد و اینکه چگونه آن را بکار ببرند به تست های واحد مراجعه کنند.
تست های واحد مستنداتی هستند که با تغییر و اصلاح کد بروز رسانی می شوند.
علاوه بر اینها نظرات و حدس های برنامه نویس را در تست ها می توانیم مستند سازی کنیم.
2- به اشتراک گذاری کد با دیگران راحتتر است، چون اگر عضوی از تیم کد را طوری دستکاری کنید که درست کار نکند، اجرای تست ها با شکست روبرو می شود.
3- با انجام تست های واحد، زمان انجام تست ها در سایر فازها کاهش می یابد.
4- تست ها، انتظارات برنامه نویس را در مورد چگونگی عمل کردن یک قطعه کد، ارزیابی می کنند.
بهانه و مقاومت
تغییر همیشه وجود دارد، رویه ها، قوانین و روش های جدید بوجود می آیند و ایجاد می شوند ولی هر پدیده جدیدی همیشه با مقاومت بعضی از افراد در اجراء روبرو می شود. اگر شما از تست های واحد استفاده نمی کردید احتمالا سوالات یا بهانه های مانند عناوین زیر را مطرح کنید:
1- نوشتن تست ها احتیاج به زمان زیادی دارد: این جمله ای که توسط افرادی زیادی گفته می شود ولی آیا اینگونه است. تصور کنید که شما یک باغچه دارید که مسئولیت رسیدگی آن بر عهده شما است، آخر هفته به باغچه نگاه می کنید مشاهده می کنید که چمن ها بزرگتر شده اند و گل ها نیز نیاز به رسیدگی دارند ولی تا هفته بعد صبر می کنید و هفته بعد دوباره صبر، اما بعد از چند هفته مشاهده می کنید که چمن ها خیلی بزرگ شده اند، علف های هرز کل محیط را احاطه کرده اند، گل ها پژمرده شده اند و .... در هفته اول شما می توانستید با یک قیچی باغبانی و در چند دقیقه کل کار را انجام دهید ولی حالا شاید با ساعت ها کارها و تجهیزات اضافی بتوانید کارتان را انجام بدهید البته شاید. تست های قطعه نیز مانند انجام دادن کارهای باغبانی در آخر هفته است، یعنی با تست قطعه ما می توانیم فرآیند تست را ارزان تر و و با کیفیت بالا انجام دهیم و ریسک نیاز به زمان زیادی برای تست را در آخر پروژه حذف کنیم.
2- اجرای تست های نیاز به زمان زیادی دارید: یک آگاهی بازرگانی بود که احتمالا از تلویزیون خودمان آنرا مشاهده کرده اید، خانمی که باید غذا را آماده می کرد، به خرید می رود و ... خانم غذا را آماده می کرد آنرا تو آرام پز قرار می داد و دیگر تمام شد تا شب می توانست به کارهای دیگرش برسد. برای تست های که نیاز به زمانی زیادی برای اجرا دارند ما نیز همین کارها را انجام می دهیم. یعنی زمانی که باید کار دیگری را انجام دهم تست را اجراء می کنم چون اجرای تست فرآیندی خود کار است و به بقیه کارها می رسیم. یا در زمانهای بی کاری و یا آخر هفته. تست های را که نیاز به زمان زیادی دارند باید دسته بندی کرد و آنها را جدا از تست های دیگر و در دفعات کم اجرا کرد.
3- تست کردن شغل من نیست: خوب این کار شما نیست. پس تصور کنید که دو توسعه دهنده داریم نفر اول تست ها واحد را انجام می دهد و دیگری نه. بعد از اتمام کار، کدهای نوشته شده به تیم تست و کنترل کیفیت ارجاع داده می شوند. نتیجه تقریبا روشن است کدهای نفر اول با حداقل خطا برای رفع اشکال ارجاع داده می شود ولی نفر دوم باید لیست درازی از خطاها را اصلاح کند. کدام یک از اینها مسیر ترقی را سریع طی خواهد کرد و از امنیت شغلی برخودار خواهد بود حتما نفر اول.
4- اگر من تست ها را انجام دهم احتمالا افراد دیگری که مسئول تست هستند احتمالا کارشان را از دست بدهند: شما اصلا نگران این موضوع نباشید شما فقط مسئول تست واحدها هستید، و این فقط مرحله بسیار کوچک از فرآیند کلی تست می باشد.
5- چرا از تست کردن به صورت دستی، استفاده نکنیم؟ تست دستی امکان نفوذ خطاهای انسانی به سیستم را افزایش می دهد و همچنین تکرار کردن تست های دستی، بسیار مشکل تر است. برای اینکه تست های دستی را دوباره انجام بدهیم، به مستنداتی نیاز داریم که مراحل انجام تست ها را شرح بدهند. با تغییر کد، این مستندات به سرعت کهنه می شوند و این یعنی اینکه برای به روزنگهداشتن مستندات، باید کار اضافی انجام دهیم.
|
در مراحل اول بیماری تشیخص بسیار سخت ولی درمان خیلی آسان است. اما بعد از پیشرفت بیماری تشخیص آسان و درمان بسیار سخت می باشد. این جمله را برای تست واحد باز نویسی کنید. |
(در قسمت بعدی به نحوه پیاده سازی تست های واحد و معرفی Nunit خواهیم پرداخت.)
اخیراً در فرودگاه گفتگوی لحظات آخر بین مادر و دختری را شنیدم
هواپیما درحال حرکت بود و آنها در ورودی کنترل امنیتی همدیگر را بغل کردند و مادر گفت: " دوستت دارم و آرزوی کافی برای تومیکنم." دختر جواب داد: " مامان زندگی ما باهم بیشتر از کافی هم بوده است. محبت تو همه آن چیزی بوده که من احتیاج داشتم. من نیز آرزوی کافی برای تومیکنم."
آنها همدیگر را بوسیدند و دختر رفت. مادر بطرف پنجره ای که من در کنارش نشسته بودم آمد. آنجا ایستاد و می توانستم ببینم که می خواست و احتیاج داشت که گریه کند. من نمی خواستم که خلوت او را بهم بزنم ولی خودش با این سؤال اینکار را کرد: " تا حالا با کسی خداحافظی کردید که می دانید برای آخرین بار است که او را می بینید؟ " جواب دادم: " بله کردم. منو ببخشید که فضولی می کنم چرا آخرین خداحافظی؟ "
او جواب داد: " من پیر و سالخورده هستم او در جای خیلی دور زندگی می کنه. من چالشهای زیادی را پیش رو دارم و حقیقت اینست که سفر بعدی او برای مراسم دفن من خواهد بود. "
" وقتی داشتید خداحافظی می کردید شنیدم که گفتید " آرزوی کافی را برای تو میکنم. " میتوانم بپرسم یعنی چه؟ "
او شروع به لبخند زدن کرد و گفت: " این آرزویست که نسل بعد از نسل به ما رسیده. پدر و مادرم عادت داشتند که اینرا به همه بگن." او مکسی کرد و درحالیکه سعی می کرد جزئیات آنرا بخاطر بیاورد لبخند بیشتری زد و گفت: "
وقتی که ما گفتیم " آرزوی کافی را برای تو میکنم. " ما می خواستیم که هرکدام زندگی ای پرازخوبی به اندازه کافی که البته می ماند داشته باشیم. " سپس روی خود را بطرف من کرد و این عبارتها را که در پائین آمده عنوان کرد:
" آرزوی خورشید کافی برای تو میکنم که افکارت را روشن نگاه دارد بدون توجه به اینکه روز چقدر تیره است.
آرزوی باران کافی برای تو میکنم که زیبایی بیشتری به روز آفتابیت بدهد.
آرزوی شادی کافی برای تو میکنم که روحت را زنده و ابدی نگاه دارد.
آرزوی رنج کافی برای تو میکنم که کوچکترین خوشی ها به بزرگترینها تبدیل شوند.
آرزوی بدست آوردن کافی برای تو میکنم که با هرچه می خواهی راضی باشی.
آرزوی از دست دادن کافی برای تو میکنم تا بخاطر هر آنچه داری شکرگزار باشی.
آرزوی سلامهای کافی برای تو میکنم که بتوانی خداحافظی آخرین راحتری داشته باشی."
بعد شروع به گریه کرد و از آنجا رفت.
(تقدیم به یک مادر)
مهندسی نرم افزار مبتنی بر مولفه :
در نوشته های قبلی در مورد اهمیت برنامه نویسی مبتنی بر مولفه وتعاریف مربوط به مولفه آشنا شدیم در این قسمت هم می خواهیم در مورد تفاوتهای بین انواع برنامه نویسی ها و مهندسی نرم افزار مبتنی بر مولفه اشنایی مختصری داشته باشیم :
تفاوتهای 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 یک شی با داده ها و مـشخصات ( ویـژگیها ی) منحصر به فرد می باشد ، که رفتار پیاده سازی شده را اجرا می کند یک مولفه نصب شده ممکن است چند شی مولفـه ای داشته باشد کـه نیازمـند ویـژگیهای صـریح و روشن می باشد.
آن سوی پنجره
در بیمارستانی دو مرد بیمار در یک اتاق بستری بودند.یکی از بیماران اجازه داشت که هر روز بعد از ظهریک ساعت روی تختش بنشيند.تخت او در کنار تنها پنجره اتاق بود. اما بیمار دیگر مجبور بود هیچ تکانی نخورد و هميشه پشت به هم اتاقیش روی تخت بخوابد .آنها ساعتها با يکديگر صحبت مي کردند. از همسر، خانواده، سربازی یا تعطیلاتشان با هم حرف می زدند.
هر روز بعد ازظهربیماری که تختش کنار پنجره بود ، می نشست و تمام چیزهایی که بیرون از پنجره می دید، برای هم اتاقیش توصيف می کرد . بیمار دیگر در مدت این یک ساعت، با شنيدن حال و هوای دنیای بیرون، جانی تازه مي گرفت.
اين پنجره، رو به يک پارک بود که دریاچه زيبایی داشت. مرغابیها و قوها در دریاچه شنا می کردند و کودکان با قایقهای تفريحشان در آب سرگرم بودند. درختان کهن، به منظره بيرون،زیبایی خاصی بخشیده بود و تصویری زیبا از شهر در افق دوردست دیده می شد. همانطور که مرد کنار پنجره این جزئیات را تصویف میکرد، هم اتاقیش چشمانش را می بست و این مناظر را در ذهن خود مجسم می کرد.روزها و هفته ها سپری شد.پرستاري كه براي حمام كردن آن ها آب آورده بود ، جسم بيجان مرد كنار پنجره را ديد كه در خواب و با كمال آرامش از دنيا رفته بود . پرستار بسيار ناراحت شد و از مستخدمان بيمارستان خواست كه آن مرد را از اتاق خارج كنند . مرد ديگر تقاضا كرد كه او را به تخت كنار پنجره منتقل كنند . پرستار اين كار را برايش انجام داد و پس از اطمينان از راحتي مرد ، اتاق را ترك كرد .آن مرد به آرامي و با درد بسيار ، خود را به سمت پنجره كشاند تا اولين نگاهش را به دنياي بيرون از پنجره بياندازد . حالا ديگر او مي توانست زيبايي هاي بيرون را با چشمان خودش ببيند . هنگامي كه از پنجره به بيرون نگاه كرد ، در كمال تعجب با يك ديوار بلند آجري مواجه شدمرد پرستار را صدا زد و پرسيد كه چه چيزي هم اتاقيش را وادار مي كرده چنين مناظر دل انگيزي را براي او توصيف كند ؟
پرستار پاسخ داد : شايد او مي خواسته به تو قوت قلب بدهد . چون آن مرد اصلأ نابينا بود و حتي نمي توانست اين ديوار را ببيند!!.
پس بیایید بهترین هدیه ای که به دیگران می توانیم بدهیم مثبت اندیشی ، مثبت نگری ، عزت نفس ، قوت قلب و اعتماد به نفس باشد و در کارهایمان مثبت اندیش باشیم چون در اینصورت نیروهای مثبت را به سمت خود جذب می کنیم ....