PDA

View Full Version : سردرگمي در ميان انبوه مطالب و تكنيك هاي توسعه نرم افزار



Programmer 1
چهارشنبه 07 مرداد 1388, 05:47 صبح
در زمينه مهندسي نرم افزار يك سوال اساسي ( دنيايي از سوالات ؟ ) براي من پيش آمده و آن
اينكه : وقتي مي خواهم يك نرم افزار را توليد كنم با اصطلاحات ، روشها ، ابزارها و فناوري هاي زيادي مواجه هستم مثل : متودولوژي RUP يا ERP ، UML ، مدل هاي توليد نرم افزار ، مديريت پيكر بندي ،‌مديريت ريسك ، مديريت بحران ،‌معماري و ... ، برنامه نويسي چند لايه ، مستند سازي و خيلي خيلي چيزهاي ديگر ، واقعا از وقتي كه كتاب مهندسي نرم افزار 1 رو مطالعه كردم ( پرسمن ) كل ذهنم به هم ريخت! دوستان مشكل من اين است كه مثلا براي توليد يك نرم افزار طي چه گام هايي و در چه مراحلي از اين موارد استفاده مي شود ،‌مثلا مشكلي كه در اكثر موارد در مقاله ها وجود دارد البته به نظر من اين هست كه ابتدا جايگاه مطلبي كه در مقاله توضيح داده شده ،‌ در مهندسي نرم افزار بيان نشده و يك مثال درست هم از آن موضوع وجود ندارد ، مثلا در همين سايت و يا خيلي از سايت هاي ديگر مقاله اي به عنوان آشنايي با متودولوژي RUP بيان شده ولي مشكل من نوعي اين است كه هيچ جايي توضيح داده نشده منظور از متودولوژي و يا همان روش تحليل چيست و كلا تحليل نرم ازفزار چيست ؟ چون مثلا وقتي من يك نرم افزار توليد مي كنم ،‌ابتدا يك مدل توليد نرم افزار انتخاب مي كنم مثلا مدل كلاسيك ، سپس طبق مراحل و همچنين زير مراحل آن كار را به اتمام مي رسانم ولي در اين بين اصلا متوجه نمي شوم كه منظور از تحليل و مديريت هاي مختلف چيست و چه جايگاهي دارند ، مدل جزئي از تحليل است يا تحليل جزئي از مدل ؟ و از اين قبيل سوالات ،‌ كلا تمامي سوال خود را در قالب يك مثال بيان مي كنم :

سوال ) براي كاشتن يك درخت از موجوديت هاي مقابل به چه روشي استفاده مي شود ؟ دانه ،‌آب ، خاك ، باغچه ، آب پاش دستي ،‌ بيل ، كلنگ ،‌ ابزار

جواب ) ابتدا باغچه اي درست مي كنيم با ابزارهايي مانند بيل و كلنگ و ... ، سپس داخل آن خاك مرغوب ميريزيم ، سپس دانه اي در خاك قرار مي دهيم و بعد از آن آبپاش دستي را از آب پر مي كنيم ،‌ سپس به دانه آب مي دهيم تا رشد كند .


البته ببخشيد يك مثال مندراوردي بود فقط براي اين كه سوال من رو بهتر متوجه بشيد ( اميدوارم ‍!) ، پس كل سوال اين شد كه موجوديتهاي علمي مختلفي در مهندسي نرم افزار وجود دارد ولي در هيچ مقاله اي مسير طي كردن اين گام ها بيان نشده ( تا جاييكه من خبر دارم ) دوستان لطف كنيد شفاف سازي كنيد و چه خوب بود كه طي يك پروژه كامل تقريبا همه اين موارد توضيح داده مي شد .

Asad.Safari
چهارشنبه 07 مرداد 1388, 10:40 صبح
اولا کاملا از حرفات کاملا معلومه که در داخل این مسایل قاطی کردی ...

دوما ERP متدولوژی تولید نرم افزار نیست

سوما : برای تولید نرم افزار اولا در چندین سطح نیاز به تحلیل است مثلا تحلیل در سطح مدیریت , مثال بودجه بندی پروژه , تحلیل ریسک پروژه و... . یا تحلیل در سطح تحلیل گران پروژه که همون نحوه پیاده سازی پروژه است .

چهارما : برای جواب سوالت این رو می تونم اضافه کنم که , باید اول تحقیق کرد آیا کاشت یک درخت در این فصل به صرف است یا نه , بعد باید دید که بودجه و تجهیزات ما برای انجام این کار کافی است ؟
بعد باید دید که اصلا ما بلدیم که درخت بکاریم ؟ بعد باید یه مکان عالی برای کاشت درخت بر اساس بودجه مون پیدا کنیم , بعد بر اساس شرایط خاکمون درختمون رو انتخاب کنیم و.....

موفق باشید

Programmer 1
پنج شنبه 08 مرداد 1388, 05:23 صبح
سلام به شما دوست عزيز ،

اولا خدا از دهنت بشنوه كاملا قاطي كردم

دوما آقا ما يك مثال زديم كه سوال رو جواب بدهيد نه اينكه شما هم با همون مثال و تو همون حوزه كشاورزي جواب را بدهيد اين روش خوب است ولي براي كسي كه ذخنش ريخته به هم زياد جوابگو نيست !

سوما از اون سوما شما يك چيزهايي دستگيرم شد ولي هنوز هم كافي نيست .

چهارما دوستان اگر اطلاعات ديگري مي توانيد ارائه دهيد بيان كنيد من هنوز اوضام خرابه ، شايد كه من يه كمي ذهنم مرتب بشه ، اين پرسمن رو خدا بگم چكار كنه هر چي فهميده بوديم ريخت به هم !.

با اين همه از شما دوست گرامي به خاطر وقتي كه گذاشتيد و جوابي ارائه داديد بسيار متشكرم /.

Asad.Safari
پنج شنبه 08 مرداد 1388, 11:00 صبح
ببین برادر عزیز , این مسئله تو یه مسئله و مشکلی نیست که فقط برای تو پیش اومده باشه ... بلکه مشکلی است که برای لونایی پیش میاد که تازه از کدنویسی در امدن و میخان برن تو بهر تحلیل و از این مسائل ...

به قول جومونگ باید تو خودت راهت رو پیدا کنی و هیچ کس در این راه نمی تونه کمکت بکنه

و تنها راهنمایی من این می تونه باشه که فقط کتاب های خوب مثل همون preesman رو مطالعه کن .

موفق باشید

mehdi_turbo
چهارشنبه 14 مرداد 1388, 22:20 عصر
سلام دوستان

از اين مطالبي كه دادين بر مياد كه مشكل در انتخاب نوع مدل داريد تا متدولوژي
به نظر من خوندن يه كتابي مثل پرس من وقت تلف كردنه و جز براي كنكور ارشد ارزشه ديگه اي نداره

ولي كتابايي تو بازار هست كه خيلي كاربردي و خوب در مورد انواع مدل ها و متدولوژي ها صحبت كرده

Programmer 1
پنج شنبه 15 مرداد 1388, 05:16 صبح
سلام ،

دوستان كسي تا به حال با روش RUP برنامه اي ساخته يا نه چون سوالاتي در مورد آن تو ذهنم هست كه مي خواهم از يك با تجربه در اين زمينه سوال كنم

متشكرم /.

mehdi_turbo
پنج شنبه 15 مرداد 1388, 08:05 صبح
سلام ،

دوستان كسي تا به حال با روش RUP برنامه اي ساخته يا نه چون سوالاتي در مورد آن تو ذهنم هست كه مي خواهم از يك با تجربه در اين زمينه سوال كنم

متشكرم /.

سلام
بپرس ببينم هنوز چيزي يادم هست !
البته تو يه تاپيك به طور مفصل در مورد انواع متدولوژي ها بحث شده بود بسرچ

Programmer 1
جمعه 16 مرداد 1388, 05:25 صبح
سلام ،

نمودار فعاليت هاي متدولوژي RUP دو محور متعامد دارد كه يك محور محتوايي و ديگري محور زمان هست ،‌در محور زمان 4 فاز وجود دارد : فاز شناخت ، فاز معماري ،‌ فاز ساخت ، فاز انتقال . من اين محور رو متوجه مي شم يعني اولا ظبق مراحل و تكرار هاي فاز اول متوجه مي شويم كه دقيقا چه چيزي مي خواهيم طراحي كنيم ، تو فاز معماري نقشه انجام فعاليت رو مي كشيم ، تو فاز ساخت بر اساس نقشه شروع به ساخت نرم ازفاز مي كنيم و به همين صورت ، ولي متوجه نمي شم كه محور متعامد چي هست كه مثلا داراي بخش هاي مختلفي است به عبارتي وقتي ما تو فاز سناخت هستيم چه كاري با ديسيپلين ها و جريان هاي كاري و ... داريم و ... اصلا راحت بگم محور متعامد چي هست ؟

متشكرم /.

meysam_pro
جمعه 16 مرداد 1388, 08:41 صبح
من یکم دیر وارد بحث شدم ولی ....
ببنید RUP یه فرآیند تولید نرم افزاره و تو بهترین بودنش شک نکن(کتاب مقدمه ای بر RUP از محمد بدری رو دانلود کن و تا صفحه 80 حتما بخونش). خب حالا کاملا میدونی که RUP چیه و الان میخای یه پروژه با RUP کار کنی میری هر چی کتاب فارسیه میخری میبینی هیچ کدوم به درد نمیخوره!!(چون هیچ کدوم عملی چیزی نگفته یا اومده تو Business Model مربوط به وب رو کشیده!!!).
یه راه چاره داری واسه یاد گرفتن عملی RUP: یا یه دوره عملی کلاس تخصصی بری(تو تهران اساتید ماهری هستن که تو اینجا هم گهگاه فعالیت میکنن مثلا مهندس حسینی و...)
یا 2 کتاب معرفی میکنم تا دیسیپلین ها رو یاد بگیری:
1.Guide to unified process with UML,Java and Design Patterns : این کتاب رو از صفحه 62 تا 160 با دقت کامل بخون.
2.Rational Unified Process Made Easy: A Practitioner's Guide to the RUP: این کتاب رو خط به خط بخون

موفق باشید.

Mamdos
یک شنبه 18 مرداد 1388, 15:04 عصر
Programmer 1
به نظرم شما در ارسال اول‌تون سؤال‌های خوبی مطرح کردید ولی بعدش به جای پاسخ به این سؤال‌ها بحث کمی به بیراهه رفته! مشکلی که مطرح کردید واقعاً وارده (این که مقاله‌ها توضیح نمی‌دن این چیزی که دارن می‌گن مربوط به کدوم قسمت مهندسی نرم‌افزار می‌شه). سعی می‌کنم به تمام ابهام‌های شما که در ارسال اول گفتید پاسخ بدم.

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

می‌شه فعالیت‌های مهندسی نرم‌افزار رو به فعالیت‌های اصلی و فعالیت‌های پشتیبان تقسیم کرد.

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

در پروژه‌های کوچک ممکنه فعالیت‌های پشتیبان به صورت خیلی مختصر انجام بشن یا خیلی بهشون توجه نشه (که البته خوب نیست) ولی فعالیت‌های اصلی حتماً باید انجام بشن وگرنه نمی‌شه بهش گفت مهندسی نرم‌افزار، و می‌شه برنامه‌نویسی معمولی.

بیشتر بخش‌های مهندسی نرم‌افزار رو می‌شه در قالب دو گروه فوق گنجاند. مثلاً در فعالیت‌های اصلی که طبق متدولوژی انجام می‌شن،

«تحلیل» یکی از مراحل و فعالیت‌های اصلی مهندسی نرم‌افزاره. معمولاً کار تولید نرم‌افزار با جمع‌آوری نیازمندی شروع می‌شه، بعد این نیازمندی‌ها ساختاردهی می‌شن («مدل‌سازی نیازمندی»)، بعد نرم‌افزار تحلیل می‌شه یعنی روی این کار می‌شه که چه جوری می‌شه نیازمندی‌ها رو به نرم‌افزار تبدیل کرد. بعدش نرم‌افزار طراحی می‌شه یعنی بخش‌های مختلفش مشخص می‌شن و ساختار نرم‌افزار معلوم می‌شه. سپس پیاده‌سازی انجام می‌شه یعنی در قالب ساختارهایی که در طراحی به دست آمد برنامه‌نویسی می‌شه. بعدش هم نرم‌افزار آزمایش می‌شه و پس از نصب و بهره‌برداری، باید نگهداری بشه یعنی اشکالاتی که کشف می‌شن رفع بشه، تغییرات جدید مورد نیاز درش اعمال بشه و غیره. متدولوژی‌ها این مراحل رو دقیقاً توضیح می‌دن و این که چه جوری باید این کارها انجام بشه.
«مدل توسعه‌ی نرم‌افزار» یک روش کلیه برای توسعه‌ی نرم‌افزار. متدولوژی میاد بهش جزئیات اضافه می‌کنه. بنابراین می‌شه متدولوژی‌ها را براساس مدل‌های توسعه‌ی نرم‌افزار دسته‌بندی کرد، مثلاً متدولوژی‌های سنگین‌وزن در مقابل متدولوژی‌های چابک، یا متدولوژی‌های تکراری (iterative) در مقابل متدولوژی‌های آبشاری (waterfall). این‌ها «مدل توسعه‌ی نرم‌افزار» هستند و یک سطح کلی‌تر از متدولوژی. یعنی یک اصولی دارند که متدولوژی براساس اون اصول میاد جزئیات کار رو تعیین می‌کنه. مثلاً متدولوژی RUP در اصل یک متدولوژی تکراری (iterative) است و از این مدل توسعه‌ی نرم‌افزار استفاده کرده. (البته الان RUP نسبت به اوایلش خیلی بزرگ شده و فراتر از متدولوژیه، ولی الان برای پیچیده نشدن بحث کاری به اون نداریم) اصلاً همین مراحل تحلیل و طراحی و پیاده‌سازی و غیره که گفتم خودش یک جور مدل توسعه‌ی نرم‌افزار رو نشون می‌ده چون متدولوژی‌ها میان این مراحل رو به صورت جزئی توضیح می‌دن یا این که اصلاً ممکنه یک نفر بیاد با روش‌های دیگه‌ای یا با تغییر این مراحل نرم‌افزار تولید کنه (البته مدلی که گفتم خیلی خیلی رایجه).
«مدل» به صورت کلی اگر به کار بره معمولاً منظور نمودارهاییه که از ساختار و رفتار نرم‌افزار می‌سازید. البته مدل متنی هم داریم، مثلاً اگر نیازمندی‌ها رو به صورت دسته‌بندی شده بیارید می‌شه بهش گفت «مدل نیازمندی». مدل باید یک ساختار داشته باشه و جنبه‌ای از نرم‌افزار رو توضیح بده، و می‌شه به صورت متنی یا نموداری مدل رو نشون داد. بیشتر مدل‌ها به کمک نمودارها توصیف می‌شن و برای رسم این نمودارها از زبان‌های مدل‌سازی، به خصوص UML استفاده می‌شه. مثلاً نمودار مورد کاربری (Use Case) یکی از انواع نمودارهاییه که با استفاده از زبان UML کشیده می‌شه.
«معماری» یعنی ساختار کلی نرم‌افزار، یعنی مدلی که نشون بده نرم‌افزار به صورت کلی چه جوری کار می‌کنه. معماری رو معمولاً با تعدادی مدل و نمودار نشون می‌دن. تعیین معماری یکی از فعالیت‌های اصلی و خیلی مهم مهندسی نرم‌افزاره که در اوایل پروژه انجام می‌شه و متدولوژی‌ها در این مورد معمولاً توصیه‌هایی می‌کنند. در معماری‌ها ممکنه از الگوهایی استفاده بشه مثل لایه‌بندی (که اصطلاح «برنامه‌نویسی چندلایه» به اون اشاره می‌کنه) که معروف‌ترین الگوی معماری است.


همه‌ی این‌ها روی هم کلاً یعنی مهندسی نرم‌افزار! هر مفهومی که در مهندسی نرم‌افزار گفته بشه رو می‌شه در همین قالب‌ها توضیح داد. اون سؤال و جوابی که در مورد باغچه مطرح کردید هم جوابش دقیقاً مثالی از متدولوژیه، یعنی راهنمای قدم به قدم و توصیه‌های مربوط به تولید نرم‌افزار.

هر مطلب یا مفهوم یا ابهام دیگه‌ای هست بگید. راستی ERP هم فقط یک مثال از یک نرم‌افزاره (مثل سیستم عامل یا سیستم حسابداری یا ...) و یک مفهوم عمومی مهندسی نرم‌افزار نیست.

Programmer 1
دوشنبه 19 مرداد 1388, 05:17 صبح
سلام ،

دوست عزيز ديدم يك تشكر خالي براي اين پاسخ كافي نيست اين پست رو ارسال كردم، واقعا به خاطر وقتي كه گذاشته ايد و جوابي به اين طولاني را تايپ كرده ايد نهايت تشكر را دارم . البته در پاسخ شما ابهاماتي وجود دارد كه خوشحال مي شوم در پست هاي بعدي من به آن ها جواب بدهيد .

متشكرم /.

Saeed_m_Farid
شنبه 24 مرداد 1388, 23:45 عصر
... ابتدا باغچه اي درست مي كنيم با ابزارهايي مانند بيل و كلنگ و ... ، سپس داخل آن خاك مرغوب ميريزيم ، سپس دانه اي در خاك قرار مي دهيم و بعد از آن آبپاش دستي را از آب پر مي كنيم ،‌ سپس به دانه آب مي دهيم تا رشد كند .
... يك مثال مندراوردي ...


... کاملا معلومه که در داخل این مسایل قاطی کردی ...
... آیا کاشت یک درخت در این فصل به صرف است یا نه ... بعد باید دید که اصلا ما بلدیم که درخت بکاریم ؟ بعد باید یه مکان عالی برای کاشت درخت بر اساس بودجه مون پیدا کنیم , بعد بر اساس شرایط خاکمون درختمون رو انتخاب کنیم و.....



...به قول جومونگ باید تو خودت راهت رو پیدا کنی و هیچ کس در این راه نمی تونه کمکت بکنه ...


... اصلا راحت بگم محور متعامد چي هست ؟ ...
سلام
ببينيد من درست متوجه شدم :
استاد معظم جومونگ معروف به "مندراوردي" مي فرمايند : "براي اينكه راه غايي خود را در طي مرحله "داخل مسایل قاطی کردن"، بدون كمك كساني ديگر يا محورهاي متعامد كه نمي تونن در اين زمينه بهمون كمك كنن پيدا كنيم؛ پس از اطمينان از به صرفه بودن كاشت درخت در فصل جاري و بينش از توانايي خودمون در كاشت درخت، بايد ابتدا باغچه اي با بيل و كلنگ با درنظر گرفتن شرایط خاک و مکان عالی برای کاشت درخت درست كنيم، بعد اون رو با آب پاش دستي از آب پر كنيم و در نهايت درخت ERP از دانه تكنولوژي SOA و خاك مساعد متدولوژي UML (با در نظر گرفتن گستردگي روزافزون آن) به بار خواهد نشست؛ كه با خوردن ميوه ممنوعه اش به زمينِ مهندسي نرم افزار، هبوط خواهيم كرد!"
فكر كنم تمام هدف هستي در اين جمله خلاصه شد!!!
اميدوارم از اين بلاتكليفي در اولين فرصت رهايي يابيد.
فقط جريمه نكنيد، قول ميدم اگه كسي ناراحت شد، خودم پستم رو پاك كنم ....
موفق و در امان خداوند بزرگ باشيد.

R.O.O.T.S
یک شنبه 25 مرداد 1388, 01:37 صبح
نه جومونگ(که اصلن ازش خوشم نمی یاد) نه RUP نه محور متعامد و نه هیچ چیز دیگری کمکت نمی کنه.
این دوره را من بهش می گم سیر تکامل، مدل داروینی(ورژن 3.1).

دروس ریاضی دوره ی راهنمایی و ابتدایی یادت میاد. اون موقع مسائل چقدر برامون سخت و سنگین بود، هیچی نمی فهمیدیم ولی الان اگه مسائل را ببینی خندت می گیره.این بر می گرده به درک ادم نسبت به زمان و سنش.
وقتی زمان می گذره درکت به واسطه تمرین و تجربه کردن بالا می ره(در مورد فعالیت های مغزی یه چیز هایی شنیدم).
شما دوست عزیز باید بذاری زمان بگذره و صد البته کتاب پرسمن را بخون(زبان اصلی) و با داده هات کار کن(همون تمرین کردن). از این شاخه به اون شاخه پریدن به غیر از ایجاد بی نظمی در ذهنت و داده هات چیزی برات نداره(البته نا امیدی هم باش میاد).عجله نکن حالا یدفعه نمی شه هم RUP بلد بود هم UML هم محور متعامد و ...

زیاد تایپ نکردم تا رو حرفام خوب فکر کنی.


R.O.O.T.S

hamidinejad
پنج شنبه 02 مهر 1388, 18:55 عصر
به نظر بنده کسانی که در رشته نرم افزار مشغول به تحصیل هستند آن قدر واحد بیخودی و قدیمی پاس می کنن که دیگه یادشون میره مهندسی نرم افزار چیه و اصلا چه هدفی داره من خودم با یه داشنجو روبرو بودم که می گفت ما بعد از فارغ التحصیلی یا میشیم تایپیست یا برنامه نویس یا طراح وب!

خلاصه کلی باهاش بحث کردم و یه چیزایی گفتم بهش تا نظرش عوض شد.

به نظر بنده یه نفر باید پیدا بشه و یک کتاب بنویسه واقعا کارهایی که در محدوده یه مهندس نرم افزار هست چقدر وسیع هست و هر کسی میتونه توی این علم که هر روز بسیاری از اصول به آن اضافه میشه شنا کنه!