دوستدار نرمافزار، فلسفه و ادبیات. وب سایت:http://www.alihoseiny.ir
8 کاری که باید پیش از شروع نوشتن یک نرمافزار موفق انجام بدهید
در دنیای نرمافزار, هدف ساختن یک نرمافزار موفق است. نرمافزار موفق, نرمافزاری است که در زمان و با بودجهی مورد نظر, انتظارات کاربررا برآورده کند.
تا اینجای کار همهچیز بدیهی بهنظر میرسد. امّا اگر بدانید که 68 درصد پروژههای IT شکست میخورند, آنوقت متوجّه میشوید که این هدف بهظاهر ساده, یعنی نوشتن نرمافزار موفّق, بیش از حد انتظار غیر قابل دسترس است.
گر این 8کار را به درستی انجام دهید, تا حد زیادی خیالتان از عدم شکست نرمافزار راحت خواهد شد.
1-پروژههای مشابهرا پیدا کنید
اوّلین کاری که باید قبل از شروع پروژهی جدید انجام بدهید, پیدا کردن پروژههای مشابه دیگر است.
این کار دو مزیت دارد: اوّل اینکه اگر پروژهی مشابهی وجود داشته باشد, پس میتوانید مطمئن شوید که از لحاظ فنّی امکان پیادهسازی آن وجود دارد.
دوم اینکه باعث میشود نمایی واقعی از نحوهی عملکرد ویژگیهای مختلف پروژه پیدا کنید. این باعث میشود که ایدهای کلّی در مورد پیادهسازی بخشهای مختلف پروژه پیدا کنید و مطمئن شوید که دانش فنّی لازم برای انجام آنرا دارید.
این کار به معنی کپی کردن پروژههای مشابه نیست. تنها قرار است به شما سرنخی در مورد امکانپذیر بودن پیادهسازی این نرمافزار بدهد.
همچنین اگر نمونهی مشابهی پیدا نکردید به این معنی نیست که دیگر شکست خوردهاید و نباید این پروژهرا شروع کنید. فقط باید زمان و دقّت بیشتریرا در مرحلهی بعدی خرج کنید.
2-محدوده و مقیاس پروژهرا تعیین کن
پیش از انجام هرکار دیگری, باید محدوده و مقیاس پروژهرا مشخّص کنید.
محدوده(scope) پروژه چیست؟
محدوده(scope) پروژه, ویژگیهایی است که پروژه حتماً باید داشته باشد. به زبان ساده, آن چیزی که پروژه هست.
تقریباً همیشه محدودهرا مشتری تعریف میکند. امّا شما هم میتوانید با دادن مشاوره به او در تعیین درست محدوده کمک کنید.
مقیاس(scale) پروژه چیست؟
مقیاس پروژه به چیزهای زیادی اطلاق میشود. تعداد خطهای کد نرمافزار, میزان دادهای که باید ذخیره یا پردازش شود, تعداد کاربرانی که از سیستم استفاده میکنند و ... .
هرچقدر مقیاس نرمافزار بزرگتر باشد, زمان و هزینهی بیشتری برای پیادهسازی آن لازم است و احتمال شکست آن بیشتر میشود.
3-استک تکنولوژیرا درست کنید
لیستی از تکنولوژیهایی که فکر میکنید میتوان از آنها برای پیادهسازی پروژه استفاده کرد تهیّه کنید. اگر میتوانید به تکنولوژیهای به کار رفته در پروژههای مشابه دسترسی داشته باشید که چه بهتر.
حالا تکنولوژیهای مشابهرا دستهبندی کنید. در هر دسته, هر تکنولوژیرا بر اساس میزان تسلّط تیم, جامعهی کاربری, توانایی در برطرف کردن نیازهای پروژه و البته trend های بازار مرتّب کنید.
بهعلاوه میتوانید تکنولوژیهای جدید مشابه هر دستهرا هم به آن اضافه کنید. با این کار هم پشتهی تکنولوژی پروژهرا بهدست میآورید, هم مطمئن میشوید که از تکنولوژیهای از رده خارج شده و ضعیف استفاده نمیکنید.
در نهایت تعداد کمی از تکنولوژیهای هر دستهرا نگهدارید و باقیرا دور بریزید.
4-سناریوهای شکسترا بررسی کنید
اگر همین امروز پشتیبانی تکنولوژی اصلی پروژه متوقف شود چه کار میکنید؟ اگر دو روز پس از شروع پروژه برنامهنویس ارشدتان تیمرا ترک کرد چگونه شرایط را مدیریت میکنید؟
پاسخ به این سؤالات و سؤالات مشابه که به مشکلات پس از شروع پیادهسازی مربوط میشوند, نقشی حیاتی در موفّقیّت پروژهی شما بازی خواهند کرد.
باید برای مشکلات مختلف راه حل های مناسب داشته باشید. شاید یک راه حل منجر به موفّقیّتآمیز تمام شدن پروژه نشود, ولی با درج یک بند اضافی به قرارداد, جلوی مشکلات بعدیرا خواهد گرفت.
5-پیادهسازی پروژه امکان پذیر است؟
حالا زمان این است که از خودمان سؤال کنیم که آیا اصلاً میتوان این پروژهرا پیادهسازی کرد یا نه؟
برای این کار به چهار چیز نیاز است: حداکثر بودجهی پروژه, زمان نهایی تحویل, استک فناوری و ارزیابی واقعبینانه از تواناییهای تیم.
دو مورد اوّلرا مشتری مشخّص میکند. شما پس از صحبت با مشتری و گرفتن نیازهای پروژه, از او درخواست میکنید که حدّاکثر بودجهای که برای این کار دارند را تعیین کنند و بگویند که بیشترین زمانی که برای دریافت پروژه میتوانند صبرکنند چقدر است.
گاهی اوقات مشتری ترکیبات مختلفیرا اعلام میکند. مثلاً میگوید اگر پروژهرا 10 روزه تحویل دهید, میتوانند تا x تومان به شما پرداخت کنند. امّا اگر پروژهرا 20 روز تحویل دهید تنها y تومان خواهند داد.
وقتی تمامی ترکیبات مبلغ-زمان را داشتید, میتوانیم ارزیابی نهاییرا انجام دهیم. چون استک تکنولوژیرا در مرحلهی قبل ساختیم و طبیعتاً باید خودتان ارزیابی تیمرا قبلاً انجام داده باشید.
حالا کاری که باید بکنید این است که ببینید آیا با توجّه به تیم, ترکیبی از گروههای مختلف استک تکنولوژی وجود دارد که یکی از ترکیبهای مبلغ-زمان را ارضا کند؟
برای این کار باید مجموع زمانهای یادگیری, پیادهسازی و تسترا برای تکنولوژیهای مختلف حساب کنید. همچنین هزینههایتانرا برای طراحی, پیادهسازی, تست و یادگیری محاسبه کنید.
اگر ترکیبی از گروههای مختلف استک تکنولوژی توانست یکی از ترکیباترا ارضا کند, پس شما میتوانید پروژهرا انجام دهید. در غیر این صورت این پروژه شکست خواهد خورد. پس نباید آنرا بپذیرید.
6-داستانهای کاربر(user story)را بنویسید.
حالا که مطمئن شدید که پروژه امکانپذیر است, زمان نوشتن داستانهای کاربر است.
داستان کاربر(user story) چیست؟
داستان کاربر ابزاری است که اوّلین بار در توسعهی چابک نرمافزار(Agile) تعریف شد. در داستان کاربر یک ویژگی نرمافزار از دیدگاه کاربر نهایی توصیف میشود. در داستان کاربر, نوع کاربر, نیاز او و دلیل یا نتیجهی آن نیاز نوشته میشود.
برای مثال: مدیر بتواند تصاویر را قبل از ارسال تأیید کند تا مطمئن شود آنها قابل قبول اند.
داستان کاربر قبل از شروع کار نتیجهی نهاییرا مشخّص میکند. بنابراین باعث میشود که در بخشهای بعدی و هنگام پیادهسازی سردرگم نشوید.
بهعلاوه, چون به زبان ساده و از دیدگاه کاربر نهایی نوشته شده اند, تعامل با مشتریرا راحتتر میکنند و بهتر میتوانید زبان همدیگر را بفهمید.
با نوشتن داستانهای کاربر, عملاً امکان فهم اشتباه نیازهای پروژه و شکست خوردن آن به این دلیل از بین میرود.
7-مناسبترین معماریرا انتخاب کنید
در حالت کلّی مناسبترین معماری وجود ندارد. ولی وقتی که یک تیم مشخّص میخواهد که یک پروژهی خاصرا با یک استک فناوری از پیش تعیین شده پیادهسازی کند, میتوان مناسبترین معماریرا پیدا کرد.
مناسبترین معماری, معماریای است که اکثر اعضای تیم با آن آشنا باشند. همچنین باید امکان استفادهی آسان از همهی تکنولوژیها در آن معماری وجود داشته باشد. بهعلاوه باید بین نیازهای پروژه و معماری انتخابی هماهنگی منطقی وجود داشته باشد.
8-دیاگرامهارا فراموش نکن
دیاگرامها یکی از مهمترین اجزای یک نرمافزار موفق هستند. شما باید قبل از شروع پیادهسازی نرمافزار, سیستمرا در سطح کامپوننت طراحی کنید. بعد از آن هم باید به سراغ طراحی کلاسهای هر کامپوننت بروید.
این کار از اکثر اشتباهات زمان پیادهسازی جلوگیری میکند و باعث میشود بعداً به خاطر مشکلات ناشی از سردرگمی توسعهی محصول به عقب نیفتد.
اگر این 8 کار را به درستی و بادقّت انجام دهید, احتمال شکست پروژهی نرمافزاریتانرا تا حد چشمگیری کاهش میدهید و میتوانید با خیال راحت وارد مرحلهی پیادهسازی شوید.
مطلبی دیگر از این انتشارات
ریفکتورینگ (Refactoring) - بخش اول
مطلبی دیگر از این انتشارات
آموزش زبان برنامهنویسی Rust – قسمت۱۲- در اعماق Struct
مطلبی دیگر از این انتشارات
ساخت یه CRUD با Laravel و Vue