مدیریت پروژه

اولین قدم در مدیریت پروژه، دانستن حقایق است

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

اهمیت برنامه ریزی بر هیچکس پوشیده نیست. اما باید این را در نظر داشته باشیم که هیچ وقت کارها همون طوری که در ذهن ماست و به همان خوبی و خوشمزگی جلو نمیروند. اول باید ببینیم اگر برنامه ریزی داشته باشیم، چه نتایجی در انتها عاید ما خواهد شد، در واقع فواید برنامه ریزی در انتها برای ما چه دستاوردهایی خواهد داشت. برنامه ریزی یعنی، یک هدف مشخص کن، راه رسیدن به این هدف را پیدا کن، دست به کار شو!

فواید برنامه ریزی برای یک پروژه

  • رسیدن به لیست مشخصی از وظایف پروژه
  • ایجاد نظم در انجام کارها در زمان مشخص
  • ارائه یک دید کلی در مورد وضعیت پروژه
  • ارائه راه حل برای انجام کارهای بزرگ تر در قالب کارهای کوچک تر
  • ایجاد ابزار جهت کنترل پروژه و اندازه گیری بازدهی
  • مدیرت موثر تر منابع پروژه
  • افزایش احتمال رسیدن به اهداف و در نهایت موفقیت پروژه

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

Project-Management

چطور برنامه ریزی را شروع کنیم؟

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

یافتن حقایق پروژه

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

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

استفاده از ابزارهای مدیریت پروژه

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

در مطالب بعدی به موضوعات گفته شده خواهیم پرداخت.

farasun.wordpress.com

Subcribe to Farasun feed جهت خواندن مطالب آینده مشترک وبلاگ شوید.

وبلاگ

….

بعد از مدت ها، شاید 13 الی 14 ماه، سری به این وبلاگ میزنم. دلم برای نوشتن تنگ شده، دوست دارم باز هم بنویسم و باز هم یادبگیرم. توی این مدت از همه چیز دور بودم. برای الان من خیلی بعید به نظر می رسد که یه روزی وبلاگی در مورد برنامه نویسی کامپیوتر داشتم! اگر خودم بشینم و مطالب دو سه سال قبل این وبلاگ را بخونم باورم نمیشه که خودم این ها رو نوشته باشم! دوران سختی داشتم، خیلی سخت. به نظر میرسه همه چیز داره دوباره عادی میشه! اما هنوزم مطمئن نیستم!

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

اگر میدونستم اینقدر طول میکشه هیچ وقت عنوان نوشته قبلی را به زودی نمیذاشتم.

وبلاگ

به زودی…

فیلتر شدن کل وبلاگ های وردپرس دات کام و بلاگر اتفاق تلخی بود، البته نه به تلخی خیلی از اتفاقاتی که این روزها بر ما می گذرد. اما به هر حال باعث شد بخش عمده ای از محتوای وب فارسی عملاً از دسترس بخش زیادی از کاربران اینترنت ایران خارج شود. مسدود کردن وبلاگ های سرویس های وردپرس و بلاگر بدون در نظر گرفتن محتویات آن ها، احمقانه ترین نوع فیلترینگی بود که تا به حال دولت ایران به کاربران اینترنت کشور تحمیل کرده است. مطمئناً این حرکت نه باعث سر به راه شدن و ساکت شدن مردم می شود و نه باعث رونق گرفتن کسب و کار بلاگفایی می شود که با تبلیغات هک بلوتوث و آموزش فشن کردن مو و فروحتن اطلاعات وبلاگ نویسان کسب درآمد می کند!

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

امیدوارم روزی برسد که دسترسی آزاد به اطلاعات، اینترنت و سرویس های وب جزئی از حقوق شهروندی تک تک مردم ایران باشد. به امید آن روز

مهندسی نرم افزار

کیفیت در نرم افزار واقعاً به چه معناست!؟

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

پرسمن «کیفیت نرم افزار» را در مهندسی نرم افزار به صورت زیر تعریف کرده است :

In the context of software engineering, software quality measures how well software is designed (quality of design), and how well the software conforms to that design (quality of conformance)

این تعریف فقط به زبان انگلیسی تمام منظور خود را می رساند. در واقع کیفیت یک نرم افزار در این تعریف بر اساس کیفیت طراحی و کیفیت پیروی از این طراحی مطرح شده است. کیفیت پیروی از طراحی یعنی نرم افزار تولید شده تا چه اندازه مطابق طراحی اولیه ساخته شده است. این تعریف از کیفیت نرم افزار، نقش تحلیل گران و طراحان را در کیفیت یک محصول نرم افزاری برجسته تر می کند. موفقیت یا شکست تحلیل گران در تحلیل مسائل نرم افزاری تاثیر مستقیم خود را در خروجی پروژه نرم افزاری می گذارد. توسعه دهندگان و برنامه نویسان نیز نحوه تطابق پیاده سازی با طراحی را تعیین می کنند. میزان وفاداری آن ها به طراحی رابطه مستقیمی با کیفیت خروجی محصول نرم افزاری دارد، البته زمانی که طراحی به درستی انجام شده باشد.

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

نیازمندی ها

نمی توان از یک نرم افزار انتظار خروجی با کیفیت داشت زمانی که توسعه دهندگان آن، نیازمندی های پروژه را به خوبی درک نکرده باشند. شناخت نیازمندی های یک نرم افزار، کلیدی ترین بخش تضمین کیفیت نرم افزار است. با شناخت درست نیازمندی ها می توان به یک خروجی با کیفیت دست پیدا کرد. برای مطالعه بیشتر مطلب «مستندات نیازمندی ها و نقش آن در موفقیت یک پروژه نرم افزاری» را بخوانید.

طراحی

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

پیاده سازی

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

تست

تست نرم افزار پس از پیاده سازی، اگر به درستی انجام شود، کیفیت خروجی نرم افزار را به طرز شگرفی افزایش می دهد. در تست مشخص می شود که چه مشکلاتی در پیاده سازی وجود دارند که باید حل شوند. کیفیت نرم افزار با تعداد انجام تست های درست رابطه مستقیم دارد. هر چقدر بیشتر نرم افزار را تست کنیم، در انتها نرم افزارمان کیفیت بهتری خواهد داشت. با انجام تست های مکرر می توانید خروجی نهایی با کیفیت تری ارائه کنید و در نتیجه مشتریان راضی تری داشته باشید. در حال حاضر روش های بسیاری برای تست نرم افزار وجود دارند که همگی سعی می کنند تا کیفیت نرم افزار را بالا ببرند. چندی از متدولوژی های Agile در سیکل توسعه خود به صورت جدی از روش های تست نرم افزار استفاده می کنند تا از کیفیت محصولات نرم افزاری تولید شده اطمینان پیدا کنند. برای مثال TDD یا Test-Driven Development روشی است که برنامه نویسان را مجبور می کند تا قبل از کدنویسی، تست های مربوط به آن را بنویسند!

توزیع و استقرار

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

آموزش و پشتیبانی

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

farasun.wordpress.com

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

(1) : IEEE 610.12-1990 Standard Glossary of Software Engineering Terminology

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