فرآیند طراحی در روند توسعه نرم افزار

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


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

Image for post
Image for post

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

ما با پرسیدن سوالاتی در مورد مسائلی که مشتری ممکن است در نظر نگرفته باشد، و  بررسی فعال دیدگاه مشتری نیازمندی‌ها مورد نیاز را استخراج می‌کنیم.  این نقطه شروع به عنوان استخراج نیازمندی‌ها ( eliciting requirements ) شناخته می‌شود. با داشتن یک ایده واضح از آنچه می‌خواهید انجام دهید، می‌توانید به مدل طراحی مفهومی ( Conceptual Design ) و در نهایت نمودارهای طراحی فنی ( Technical Design diagrams ) بدست آورید. ممکن است مشتاق باشید که سریعا کار پیاده‌سازی را انجام دهید، اما نیازمندی‌ها و فعالیت‌های طراحی بسیار مهم هستند.
استخراج نیازمندی‌ها نه تنها شامل گوش دادن به آنچه مشتری به شما می‌گوید است، بلکه پرسیدن سؤالاتی برای روشن کردن آنچه مشتری به شما نگفته است هم شامل می‌شود. هنر استخراج نیازمندی‌ها در پرسیدن سؤالات بعدی آشکار می‌شود. هنگامی که به این سوالات پاسخ داده شد، اکنون مجموعه‌ای اولیه از الزامات دارید که به شما امکان می‌دهد به طرح‌های ممکن فکر کنید. فعالیت طراحی شامل در نظر گرفتن الزامات و ترسیم یک راه حل است. این فعالیت شامل تولید یک طرح مفهومی و سپس یک طراحی فنی است.
مدل‌های مفهومی، افکار اولیه شما را در مورد چگونگی برآورده شدن الزامات ارائه می‌دهند. در این مرحله، با شناسایی اجزا و اتصالات اصلی بر روی طراحی تمرکز می‌کنید و فعلا جزئیات فنی را به تعویق می‌اندازید.
من توصیه می کنم قبل از شروع به شکل‌گیری طرح فنی، طرح مفهومی را به پایان برسانید. هرچه طرح مفهومی شما واضح‌تر باشد، طرح‌های فنی شما بهتر خواهد بود. پس از انجام مدل‌های مفهومی، نوبت به تعریف جزئیات فنی راه حل می‌رسد.
شما از طراحی مفهومی، همه اجزا و ارتباطات اصلی و مسئولیت‌های مرتبط با آنها را می‌دانید. توصیف چگونگی انجام این مسئولیت‌ها هدف طراحی فنی است. در طراحی فنی، شما شروع به تعیین جزئیات فنی هر جزء می‌کنید. این کار با تقسیم اجزا به اجزای کوچکتر و کوچکتر انجام می‌شود که به اندازه کافی خاص هستند تا با جزئیات طراحی شوند.


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

نیازمندی: به عنوان یک زبان آموز، می‌خواهم دروه‌های مرتبط را از طریق صفحه جستجو جستجو کنم.

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

Image for post
Image for post

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

Image for post
Image for post

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

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


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