تالار گفتمان مانشت
مهندسی نرم افزار --> امکان سنجی و اثبات مفهوم - نسخه‌ی قابل چاپ

مهندسی نرم افزار --> امکان سنجی و اثبات مفهوم - - rasool - - 24 اردیبهشت ۱۳۹۱ ۱۰:۵۸ ق.ظ

به نام او


با سلام
این تاپیک ان شاء الله مباحثی پیرامون امکان سنجی و اثبات مفهوم را در خود جای خواهد داد.

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

اما مطلب :


برخی کارها رو میشه کرد و نیازی به بررسی نداره؛ برای نمونه : “برنامه ای بنویسید که دو عدد را از رودی گرفته و مجموع آنها را در خروجی چاپ کند”.
برخی کار ها رو شما نمیتونید بکنید اما کسانی هستند که با داشتن توانایی بیشتر میتونند اون کار رو بسادگی (یا شاید هم بسختی) انجام بدن برای نمونه: “سیستم عاملی چند وظیفه ای بنویسید”.
برخی کارها ها هم اصولا شدنی نیست حالا چه شما بخواید انجام بدین چه هر کس دیگه ای؛ برای نمونه: “برنامه ای بنویسید که به اسکیموها یخچال فریز امرسان بفروشد”.

بنابراین زمانی که یکی میاد و میخواد که براش نرم افزاری بنویسید یا سایتی بسازید یا شرکتش رو به ریخت ویژه ای براش شبکه کنید نخست باید ببینید که این کار شدنی هست یا نه. این کار رو میگن : «بررسی امکان سنجی».
اگر بررسی امکان سنجی نشون بده که اون کار شدنی است در اون صورت میتونید به سراغ قدمهای بعدی پروژه برید اما اگر بررسی های امکان سنجی نشون بدن که اون کار شدنی نیست یا راه حل واضحی براش نیست در اون صورت شما با یک ریسک بزرگ روبرو هستین و پروژۀ شما از همین نخست توی بحران رفته.

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



بررسی (مطالعه) و آزمون (تست) امکان سنجی

خب نخست باید نیاز های پروژه رو دست جمع آوری کنید در غیر این صورت دارید چیزی رو بررسی میکنید که از اول مد نظر مشتری نبوده.

اگر نیاز مشتری درست فهمیده نشه پاسخی که از بررسی های امکان سنجی در میاد ارزش درستی نداره. اگر منظور مشتری بد فهمیده بشه ممکنه یک کار ساده رو خیلی دشوار فرض کنید یا اینکه برعکس مشتری یک چیز دشوار میخواد اما شما منظورش رو نمیفهمید و گمان میکنید کار ساده است در حالی که (شاید) اینگونه نیست. بنابراین منظور مشتری رو درست بفهمید.

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

زمانی که نیازهای مشتری جمع آوری شد باید بگردید ببینید کدوم یک اون کارهایی که باید انجام بشه براتون سخت و نشدنی به نظر میاد یا اینکه هر چی اندیشه میکنید یه جایاهییش براتون گنگه و نمیدونید که دقیقا راه حلش چیه. ابن بخشها رو جدا کنید و امکان سنجی شون کنید.


برای نمونه یه زمانی از من خواستن برای شهر کتاب یک سایت فروشگاهی بنویسم که بتونه به آمازون (کتابفروشی آنلاین) وصل بشه و از اونجا لیست محصولات بیاره و از این جنگولک بازی ها. درسته که اون زمان وصل شدن به بانک پارسیان خودش سرطانی بود اما آمازون دیگه خداییش تابلو بود که باید امکان سنجی بشه. پارسیان نیازی به امکان سنجی نداشت تنها چیزی که بود این بود که سخت کاری داشت. چیز پیچیده ای نداشت اما از آمازون هیچ ایده ای نداشتم و بنابراین نخست باید امکان سنجی میشد. حالا اگر به برنامه نویس سایت آمازون میگفتند بیا همین سایت رو بنویس اون باید میرفت دروازه پارسیان رو بررسی میکرد و در اون زمینه امکان سنجی میکرد چون احتملا براش کلی ابهامات داشته.

البته پس از بررسی های امکان سنجی آشکار شد که کار با آمازون به مراتب از کار با بانک پارسیان ساده تر هم هست چون مستندات و راهنمای برنامه نویسان اش خیلی خوب نوشته شده بود.

سپس باید بفهمید اون کارهایی که سرطان هستند رو چه جوری باید انجام بدین، راه حلش چی میشه، فلان کسی که انجام داده چی کار کرده و … .

پس اون چیزهایی که نیاز به بررسی امکان سنجی دارند رو پیدا کنید یا به عبارتی ببینید چه چیزهایی ممکنه بعدا انجامشون دشوار یا نشدنی باشه یا از همین حالا تابلو هستند که کارهای سخت یا ناشدنی هستند سپس اون چیزها رو بررسی کنید تا بیینید چه باید بکنید تا اون نیازهای رو پیاده سازی کنید ...


خیلی از برنامه نویس ها و مهندسین نرم افزار گول توانایی فنی رو میخورند و گمان میکنند همین که یک کاری از دید فنی و محض امکان پذیره یعنی از دید مهندسی و اقتصادی هم شدنی است.


به هیچ وجه این خطا رو مرتکب نشید

امکان سنجی تنها به بعد فنی محدود نمیشه و دو فاکتور مهم دیگر یعنی زمان و هزینه رو هم در بر میگیره.

این که یکی یه گوشه ای از دینا میتونه کاری رو در یک چشم به هم زدن و با مبلغی ناچیز انجام بده معنی اش این نیست که شما هم میتونید همون کار رو با همون هزینه در همون زمان انجام بدید.

مثلا اینکه مایکروسافت میتونه آفیس بسازه و بفروشه دونه ای فلان دلار معنیش این نیست که پس توی ایران هم میشه این کار رو کرد.


باز یک نمونه دیگر رو یاد میکنم از تجربه شخصی خودم. زمانی من در یک شرکتی کار میکردم که نمایندۀ یک شرکت نرم افزاری بود که یک سیستم مدیریت محتوی داشت با بسیاری امکانات و توانایی های خوب و دلربا و بدرستی هم سیستم خوبی بود. یک مشتری اومد و گفت سایتی میخواد که توش به فرنگستان گل بفروشه و از اونجا آدرس توی ایران بگیره و گل بفرسته و خلاصه بسی ایده های زیبا و جالب داشت که همه برای عملی شدن به یک سایت نیاز داشتن که این کارها رو اتوماسیون کنه. ما میدونستیم که نرم افزاری که میخوایم باهاش سایت این مشتری رو بسازیم از دید فنی میتونه همه این کار ها رو انجام بده و همین جا بزرگترین اشتباهمون رو مرتکب شدیم و فاز امکان سنجی رو رها کردیم و گفتم : آقا میشه! براتون میکنیم و اینقدر پول میگیریم و فلان تاریخ هم تحویل میدیم. تا زمانی که من توی اون شرکت بودم چهار بار هزینه و زمان رو افزایش دادیم و الان یک سال از آخرین باری که من اونجا بودم میگذره و هنوز که هنوزه اون سایت بالا نیومده. بنابر آخرین اخباری که دارم مدیر شرکت دو برنامه نویس خارجی (که سالها با اون سیستم کار میکردند) رو بکار گرفت تا اونها تونستند بخشی از کار رو به تندی انجام بدند و بعد دوباره ناچارشد سه برابر اونها به یک برنامه نویس دیگه (که خود اون شرکت خارجی معرفی کرده بود) دستمزد بده تا یکی دیگه از امکانات سایت رو برنامه نویسی کنه اما هنوز اون سایت بالا نیومده و تا الان پنج سال شده که این پروژه در دست ساخت و سازه. دقت کنید که همه اون پروژه از دید فنی شدنی بود اما مشکل این بود که ما بر اون سیستم تسلط نداشتیم و از زیر و بم سیستم آگاه نبودیم و در نتیجه برای ما شدنی نبود که در اون هزینه و زمانبندی که پیش بینی کرده بودیم پروژه رو تحویل بدیم.



بنابراین به صرف اینکه یه کاری رو میشه کرد معنیش این نیست که اون کار رو اگر شما انجام بدین میتونید در همون زمان و با همون هزینه کار رو به انجام برسونید.

من میتونم سیستم عامل چند وظیفه ای بنویسم اما ده سال به درازا میکشه و من باید از مشتری صد برابر کل ارزش یک سیستم عامل پول بگیرم بنابراین نوشتن یک سیستم عامل چند وظیفه ای در فاز امکان سنجی رد میشه اما نه به دلیل اینکه از دید فنی شدنی نیست بلکه به این دلیل که از دید مهندسی (زمان و هزینه و سودآوری) شدنی نیست.

البته این که یه شماری از مردم میتونند همون کار رو در زمان و هزینه ای پذیرفتنی انجام بدن بسیار خبر خوبیه. شما در این موارد باید با اونها وارد مذاکره بشید و اون بخش از کار رو از تیم خودتون بیرون ببرید و به همون مردمان اینکاره واگذار کنید.

به این کار میگن :
«بهره برداری از منابع بیرون سازمانی».

یعنی من یه پروژه ای دارم که چند جاش کار من و تیم من نیست، اون جاهاشو میدیم کسانی که این کاره هستند بنویسند و من دستمزد اونها رو میدم. به عبارتی من بخشی از کار رو بیرون از تیم خودم انجام میدم و از توانایی یک تیم دیگه بهره میبرم. من دستمزد اونها رو میپردازم و اگر نیاز نباشه اونها با مشتری روبرو نمیشند.

برخی اصطلاحات :

کار شدنی : Feasible
انجام شدنی بودن : Feasibility
بررسی امکان سنجی : Feasibility ُُStudy
آزمون امکان سنجی : Feasibility Test
ریسک بزرگ، ریسک عمده : Major Risk
پر خطر : High Risk
بحران : Crisis
بعد فنی : Technical Aspect
زمان و هزینه : Time and Cost
بهره برداری از منابع بیرون سازمانی : Out-sourcing




----------------------------------------
منبع متن + مطالب بیشتر

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


مهندسی نرم افزار --> امکان سنجی و اثبات مفهوم - teacherpc - 28 مهر ۱۳۹۴ ۰۹:۳۹ ق.ظ

بسیار عالی بود
کسی اطلاعات مفید در این زمینه داره که بشه واسه تجزیه و تحلیل سیستم استفاده کرد؟