تبليغاتX
سماموس
 
  صفحه اصلی |  تماس با نویسنده  

 مبانی فرآيندهای مدرن توليد نرم‌افزار

پنجشنبه بیست و هفتم مهر 1385
روزهای پنج‌شنبه و جمعه از بهترين روزهای هفته است. چرا که شرکت تعطيل است و شما می‌توانيد کارهای عقب افتاده يا کارهای مورد علاقه‌تان را که در قالب کارهای شرکت نمی‌گنجد، انجام دهيد. البته جمعه‌ها، روز خانواده است، ولی من  بعضی اوقات، از کوپن خانواده نيز خرج می‌کنم. ناگفته خود پيداست که کلمه "بعضی" در "بعضی اوقات" وابسته به موضوع و از بین صفر تا 100 قابل تغيير می‌باشد و اين تعریف به تأييد تمامی دوستان متأهل نیز رسیده است.
از شوخی که بگذريم، خانم مطهريان تقبل زحمت نموده‌اند و نکات درس تحليل و طراحی شیءگرا را مدون کرده‌اند. از همين فرصت استفاده می‌کنم و از خانم حميده مطهريان صميمانه تشکر و قدردانی می‌نمایم.
داشتم متن آماده شده را به يک قالب استاندارد منتقل می‌کردم تا در اسرع وقت! به ويرايش و ويراستاری آن بپردازم. با خود گفتم که اگر بعضی از مطالب را در اين جا بازگو نمايم، هم برای خوانندگان مفيد خواهد بود و هم امکان دريافت نظرات و نقدهای خوانندگان وبلاگ برايمان مقدور خواهد شد.

موضوع اولی که می‌خواهم مطرح کنم در مورد فرآيندهای مدرت توليد نرم‌افزار است. اين فرآيندها، دارای پنج اصل پايه به شرح ذيل می‌باشند:

  • معماری مقدم بر همه چيز -- المان طراحی مرکزی
  • استفاده از روشهای تکراری و افزايشی  -- المان مديريت ریسک
  • تأکيد بر توسعه مبتنی بر مولفه -- المان تکنولوژی
  • فراهم‌سازی محيطی برای مديريت تغييرات -- المان کنترل
  • افزايش آزادی عمل در اعمال تغييرات با استفاده از ابزارهای دوطرفه(round trip) -- المان اتوماسيون

البته بايد يادآور شوم که مبانی فرآيندهای مدرن  شامل ده مورد می‌باشد که پنج مورد آنها در قالب اصول و پنج مورد ديگر در قالب فروع دسته‌بندی شده‌اند. ما در اينجا تنها به اصول فرآيندهای توليد نرم‌افزار اشاره کرده‌ایم.
نکته حائز اهميت و شالوده اين مطلب اين است که شما با هر روشی که کار می‌کنيد، فارغ از هر اسم و نشانه، بايد سعی کنيد اين اصول را در روش توليد خود به کار گيريد، که اگر چنين مهمی به وقوع بپيوندد، مسلماً شما مبتنی بر يک فرآيند نوين مبادرت به توليد و توسعه نرم‌افزار نموده‌ايد.

  ساعت 7:49 به قلم مهرداد       

 RUP بهتر است يا Agile؟

دوشنبه هفدهم مهر 1385
امروز يکی از دوستان خوبم زنگ زد و گفت که RUP بهتر است یا Agile؟اين سوال بهانه‌ای شد تا نوشته زير را آماده کنم.
واقعيت امر اين است که فرآيندها و متدولوژی‌های توليد نرم‌افزار هر يک دارای نکات مثبت و منفی خاص خود هستند و هر کدام با شرايطی، می‌توانند تجارب ديگران به ما منتقل نمايند تا ما چرخ را دوباره اختراع نکنيم و از ياد نبريم که نبايد مسخ آنها شويم و خلاقيتمان را ناديده گرفته و خودباوری‌مان را از دست بدهيم. اما مشکل عمده ما در ايران اين است که خيلی مدگرا هستيم و دانسته‌های ما "ناشی از شنيده‌ها و برداشتهای شخصی است"[اين جمله مال من نيست] و نه بر اساس تجربه و مطالعه.
من در معرفی يکی از دوره‌هايم متنی را آماده کردم که فکر کنم بد نباشد آن را اينجا بياورم:

"در جامعه نرم‌افزاری، هر از چند گاهی، تکنولوژی يا روشی مد روز می‌شود و اين جامعة ذاتاً نوگرا را چون جاذبه‌های عجيب به سمت خود می­کشاند، بدون آن که لزوم استفاده و  مفاهيم بنيادی آن به اين جامعه منتقل گردد، مدتی به کار گرفته می­شود و پس از مدتی به دلايل مختلف از مد خارج شده و با مدی ديگر چايگزين می­گردد. يکی از مهم‌ترين دلايلی که باعث از مد خارج شدن اين ابزارها می‌گردد، برداشت نادرستی است که علاقمندان و استفاده‌کنندگان از آنها دارند و دليل ديگر، کاربری نادرست آنها در کنار بی‌تجربگی استفاده‌کنندگان و مهم­تر از همه عدم وجود توانمندی لازم جهت ساده‌سازی و بومی‌سازی آنها می‌باشد.
RUP نيز از اين قاعده مستثنی نيست. فرآيند توليد يکپارچه شرکت IBM به دلايل مختلفی در جامعه نرم‌افزاری مد شد و به دلايلی که بخشی از آن را برشمرديم، از مد روز خارج شد، بدون آن که فلسفه و نگرش اين فرآيند به کاربران آن منتقل شود.

هدف اين نيست که از اين فرآيند دفاع نماييم و آن را معجزه قرن بيست و يکم بناميم، بلکه نکته‌ای که بدان پافشاری می‌نماييم اين است که فلسفه و نگرش درون RUP نشأت گرفته از تمامی روشهايی بوده است که تا آن زمان ظهور کرده­اند و هر يک به طريقی سعی در حل مشکلات توليد نرم­افزار داشته­اند. فارغ از اين که اين نام چه باشد – FDD،RUP، ICONIX، Agile، XP – آن چه که جامعه نرم­افزاری بايد فرابگيرد، فلسفه و نگرش و تکنيکهايی است که در اين روشها به صورت ضمنی وجود دارد."

به عنوان مثال مفهوم معماری. در روشهای مدرن، معماری به عنوان يکی از مبانی اصلی شمرده می‌شود (the architecture is first). با اين که همه در کوی و برزن اين نام را بر سر زبان می‌آورند، واقعاً به اندازه انگشتان يک دست نمی‌توانيد متخصصينی را پيدا کنيد که اين مفهوم را لمس کرده باشند و نه آن که جملات کتابها را از بر برايتان بخوانند.

من جايی درس می‌دادم (اين موضوع مربوط به خيلی سال پيش است) و شروع به تدریس مفهوم معماری، اهميت و کاربردهايش کردم. انتهای جلسه، يکی از حاضران گفت: استاد ببخشيد، من تا قبل از جلسه امروز می‌خواستم يک طراح شوم، از همين الان تصميم گرفته‌ام که يک معمار شوم  ما بيشتر به اسامی و القاب علاقمنديم تا کنه مطلب.

يا مفهوم روشهای تکراری-افزايشی. يکی از دوستان عزيزم که ديگر اکنون در ايران نيست، می‌گفت من پس از سالها پروژه خراب کردن! فهميدم که مفهوم و هدف از روشهای تکراری-افزايشی چيست. بعد همه ادعای استفاده از اين تکنيک را دارند و وقتی خوب دقت می‌کنيد می‌بينيد روشهای آبشاری را تحت نامهای مدرن در حال انجام هستند. وحشتناک‌تر آن که بی‌دانشی و بی‌تجربگی باعث شده خيلی‌ها فکر کنند که RUP مجموعه مستندات است و آن را با کتابهای آيين نگارش  اشتباه می‌گيرند.
سخن قشنگ ديگری که از همه می‌شنويد اين است که RUP برای پروژه‌های بزرگ است. حتی اين جمله هم ناشی از مطالعه نکردن و بی‌اطلاعی و تحت تأثير شنيده‌ها بودن است. 

هفته پيش من جايی بودم و در مورد پروژه‌ای مشاوره می‌دادم. تأکيد من بر اين بود که می‌شود سيستم را بدون بازنويسی، با Refactoring در سطح مطلوبی بازسازی کرد. يکی از دوستان که در جلسه بود گفت: فکر می‌کردم که شما به جای RUP متمايل به XP method شده‌ايد و من هم هاج واج نگاه به همکارم کردم. تأکيد من برگرفته از تجربه و نيز تکنيکی بود که در يکی از روشها تجربه کرده بودم و نه اينکه علاقه‌ای به اسامی داشته باشم.

سالها علاقه من بررسی و به کارگيری تکنيکهايی است که در متدولوژی‌های مختلف وجود داشته و هميشه اين موضوع ناراحتم می‌کند که چرا ما که درياهاي به عمق يک سانت (شايد کمتر) هستيم، درباره اين موضوعات مطالعه نمی‌کنيم و چرا بدون مطالعه به خودمان اجازه اظهار نظرهای عجيب و غريب می‌دهيم.

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

اگر به موضوع تفاوت متدولوژی از ديدگاه کاربردی علاقمند هستيد پيشنهاد می‌کنيم که حتما مقاله The New Methodoloyرا از آقای مارتین فولر مطالعه نمایید.

 

  ساعت 22:39 به قلم مهرداد       

 رقبای نشريه شیءگرايی مدار

دوشنبه هفدهم مهر 1385
ديشب بخشی از مقالات شماره نخستين نشريه را انتخاب کردم و امروز در اختيار خانم مهندس بزرگی قرار دادم تا زحمت قرار دادن آن در نشريه و انجام کارهاي لازم (به اصطلاح فنی: چرخه نشر) تا مرحله انتشار را انجام دهند.
خانم مهندس که از توسعه‌دهندگان نرم‌افزار نشريه هستند از بس پی‌گير و متعهدند که من به دليل کندی انتخاب مقالات، واقعاً شرمنده ايشان می‌شوم.
امروز آقای مهندس هادی که از اعضای تحريريه نشريه هستند، سراغ مقالات انتخاب شده و نيز زمان انتشار نشريه را می‌گرفتند. انشاءالله تاريخ انتشار اولين شماره نشريه شیءگرايی مدار به زودی اعلام خواهد شد.
از افتخارات نشريه هم اينکه نيوشا که علاوه بر پشتکار و علاقه و شاگرد اولی دانشگاه، تجربه خبرنگاری دارند، قبول زحمت کردند و برای همکاری با نشريه اعلام همکاری نموده‌اند. از ايشان بسيار سپاسگذارم.

با خانم دکتر تقی‌ياره که بنده افتخار شاگردی‌شان را دارم، صحبت کردم و ايشان با همه مشغله‌شان در دانشگاه تهران، قبول زحمت فرمودند تا ليست مقالاتی را که دانشجويانشان در دروس CRM و ITM کارشناسی ارشد ارائه می‌دهند، پس از ارزيابی در اختيار ما قرار دهند تا در دو نشريه مستقل به همين نامها منتشر گردد. دست خانم دکتر درد نکند.

با آقای مهندس عسگری هم صحبتی داشتيم و ايشان هم پيشنهاد انتشار نشريه‌ای در زمينه مهندسی صنايع داشتند و من هم استقبال کردم. قرار شد ايشان مديريت اين کار را به عهده بگيرند.
اميدوارم اثربخشی‌اش اين کارها هر چه زودتر همه ما را خوشحال و راضی نمايد.

با نشرياتی که اسامی آنها را عرض کردم به نظر می‌رسد که نشريه شیءگرايی مدار با رقبای جدی و سرسختی روبرو است.

  ساعت 21:42 به قلم مهرداد       

 عناوين مقالات نشريه شیءگرايی مدار

دوشنبه هفدهم مهر 1385
با آقای مهندس هادی عناوين مطالبی را که می‌تواند در نشريه قرار داده شود، تهيه کرديم. خيلی وارد جزئيات نشديم و کليات را آماده کرده‌ايم که در ادامه آن را خواهيد ديد.
اگر نظری در اين مورد داريد، لطفاً مرا مطلع نماييد تا آن را تکمیل کنم.

  • مفاهيم
    •  مفاهيم شیءگرا
    •  پارادايم شیءگرا
    • ...
  • مدلسازی
    • UML 1.x
    •  UML 2.0
    • ...
  • نيازمندی‌ها
    • ...
  • تحليل
    • ...
  • طراحی
    • الگوهای طراحی
    • ...
  •  پياده‌سازی
    • Refactoring
    • ...
  • متدولوژی
    •   RUP
    •  Agile
    • ...
  • تکنولوژی
    •  Java
    •  NET.
    • ...
  • ابزارها
    • ...
  • بانک اطلاعاتی
    • OR Mapping
    •  OR Mapper
    • ...
  • واسط کاربر
    • ...
  • معماری
    • الگوهای معماری
    • ..
  • جنبه‌گرایی(Aspect Orientation)
  • ...

  ساعت 21:39 به قلم مهرداد       

 نشریه شیءگرايی مدار

سه شنبه چهارم مهر 1385
در پی توافقی که با مديرعامل شرکت و دست‌اندرکاران نشريه الکترونيک شرکت مدار گسترش (http://itorbit.net/issue/issueuser) انجام دادم، تصمیم گرفتم که نشريه‌ای را با استفاده از اين نرم‌افزار منتشر نمايم.
ایده اولیه این است که نشريه در مورد موضوعات مختلف مهندسی نرم‌افزار مبتنی بر شیءگرايی باشد و نيز مطالب آن را از مطالب داخلی منتشر شده يا مقالات معتبر خارجی فراهم شود. نشريه دارای سردبیر، هيأت تحريريه و داورانی باشد که مقالات ارسالی را داوری نموده و از طرف ديگر نويسندگانی که مطالب نشريه را تهيه و ارسال نمايند. همچنين بتوان برای ارسال نشريات عضوگيری نمود و پس از انتشار نشريه، آن را برای اعضا ارسال نمود.
در صورتی که برای نام نشريه و نيز نحوه ارائه مطالب آن ايده‌ و نظری داريد، لطفاً آن را با من در ميان بگذاريد.

همچنین اگر علاقمند هستید که در این کار مشارکت نمایید، بسم الله. نشریه با آغوش باز پذیرای شما خوبان است.

منتظر دريافت اعلام مشارکت، مطالب و راهنمايی‌های شما هستم.
 

  ساعت 5:42 به قلم مهرداد       

 تجريد (Abstraction) چيست؟

دوشنبه سوم مهر 1385

دوست خوبم آقای احمد حسينيان در نامه‌ای از من خواسته بودند تا در مورد تجريد که يکی از اصول شیءگرایی محسوب می‌گردد، مراجعی را برايشان ارسال نمايم. من هم فرصت را غنيمت شمردم و توضيحاتی در اين مورد نوشتم که در ذيل می‌آيد.

تجريد در تعريف عبارت است از برجسته‌سازی جزييات و مشخصاتی از يک موضوع(سيستم، شیء، و...) که برای خواننده مهم بوده و حذف ساير جزييات و مشخصات آن موضوع.
دقت شود که در زبان انگليسی کلمه Abstraction همه به معنای عمل تجريدسازی موضوع(به عنوان مثال روشی که به شناخت شیء دانشجو در سيستم آموزش منجر می‌گردد) و هم به معنای خود موضوع (به عنوان مثال دانشجو) به کار گرفته می‌شود.

اما چرا به مفهومی به نام تجريد نياز داريم؟
جواب آن ساده است. به دليل ضعف انسان در برخورد با سيستمهای پيچيده. از آنجا که ذهن ما قدرت پردازش سيستمی مانند آموزش و کلاً جهان واقعی را به صورت يک جا ندارد، سعی می‌کنيم آن را با استفاده از تجريدسازی شناسایی کنيم. توجه به اينکه ضروری است که مفهوم تجريدسازی در هر ابعادی توسط انسان به کار گرفته می‌شود (مفهوم سطوح تجريد). به عنوان مثال در مورد تجريدی مانند دانشجو نیز بسته به خواننده آن، بعضی از مشخصات و جزييات دانشجو در فرآيند تجريدسازی حذف می‌گردد(مثلاْ در نظر گرفتن ویژگی‌ "نام پدر بزرگ" در سیستم آموزش).
بهترين تجريد، تجريدی است که تمامی مشخصات و جزييات لازم خواننده را در برگرفته باشد و مشخصات و جزيياتی که خواننده نيازی به آن ندارد، در آن حذف شده باشد.

در شناخت انسان از محیط پیرامون خود نيز اين اصل به خوبی نمايانگر است. وقتی يک روانشناس در مورد يک فيلم صحبت می‌کند، صرف‌نظر از تمامی خصوصيات فيلم، به جزييات و نکات روانشناسی فيلم توجه می‌کند و در مورد آنها سخن می‌گويد. در حالی که يک بازيگر به تکنيکهای بازيگری آن توجه نموده و آنها را مد نظر قرار می‌دهد. در حالی که فيلم در برگيرنده همه اينهاست.
در تحليل سيستمها نيز ما با اين مسأله روبرو هستيم. يک دانشجو دارای مشخصات و جزييات فراوانی است و بسته به نوع سیستم (خواننده)، مشخصات آن متفاوت خواهد بود. در حالی که در حوزه سيستم آموزش، دانشجو دارای مشخصاتی مانند دروس پاس شده، معدل و ... می‌باشد، در حوزه سيستم رفاه (مثلاً وام ازدواج ) مشخصات ديگری مانند محل سکونت، نوع تأهل و ... را برای دانشجو متصور می‌شويم.

اما ما به تنهايی و با ديدگاه تجريد نمی‌توانيم به جنگ پيچيدگی برويم. به ابزارهای ديگری نيز نياز داريم. آيا می‌دانيد اين ابزارها چه هستند؟ خوشحال می‌شوم نظرتان را اعلام نماييد.

آدرس يک صفحه وبی که در آن نويسنده تعاريف مختلف تجريد را گردآوری کرده است را نيز برای شما در زير آورده‌ام.


 http://www.itmweb.com/essay550.htm

  ساعت 22:2 به قلم مهرداد