این مطلب بخشی از آموزش اصول برنامه نویسی شی گرا هست.
اولین قدم از فرآیند طراحی، جمع آوری نیازمندی هاست. فهمیدن اینکه برنامه یا محصول شما چه کاری باید انجام دهد، چه مشکلی را می خواهید حل کنید؟ چرا در وهله اول برنامه را می سازید؟ هسته نیازمندی های عملیاتی برنامه چیست؟ یا به عبارت دیگر، برنامه چه کارهایی باید انجام دهد؟ چه ویژگی ها و قابلیت هایی نیاز است؟ علاوه بر همه اینها، ممکن است نیازمندی های غیر عملیاتی نیز وجود داشته باشد که محدودیت هایی را در مورد چگونگی عملکرد برنامه اعمال می کند.
به عنوان مثال، برنامه ای که معاملات بانکی را کنترل می کند، یا برنامه ای که اطلاعات مراقبت های بهداشتی را ذخیره می کند، به احتمال زیاد باید مقررات خاصی را رعایت کند. این برنامه می تواند نیازمندی های اجرایی از قبیل زمان پاسخ و یا پاسخگویی همزمان به چندین کاربر را داشته باشد، همچنین نیازمندی های پشتیبانی مانند اینکه اگر ساعت 2 صبح جمعه برای برنامه مشکلی پیش آمد چه اتفاقی می افتد؟ و نیازمندی امنیتی که بسته به کاربرد برنامه می تواند یک نیازمندی عملیاتی و یا غیر عملیاتی در نظر گرفته شود.
طبق تجربه من، صنعتی که دوست دارد قوانین لازم را بنویسد، صنعت هوافضا است! اگر می خواهید چیزی را به فضا ببرید، به مجموعه کاملی از نیازمندی ها نیاز دارید تا مطمئن بشید که برای اولین بار درست کار می کند. بنابراین به عنوان یه مهندس کامپیوتر بیاید برخی نیازمندی ها رو با هم بنویسیم، ما وضیفه داریم یک ماکروویو فضایی ایجاد کنیم تا فضانوردان بتوانند غذاهای خودشون رو توی ماه گرم بخورند! مانند بسیاری از پروژه ها، ایجاد یک مایکروویو فضایی هم نرم افزار و هم عناصر سخت افزاری را در بر می گیرد اما روند نوشتن مطالب یک مهارت کلی است که برای همه نوع پروژه ها کاربرد دارد.
به طور معمول اگر شما در حال تهیه یک برنامه برای مشتری یا کاربران خود هستید، نیاز به داشتن اطلاعات بیشتری برای حل مشکل دارید. ممکن است مشتری فقط یک ایده مبهم از چیزی که نیاز دارد، داشته باشد و یا دقیقا بداند که چه چیزی نیاز دارد. به عنوان یک توسعه دهنده باید برای فهمیدن نیاز مشتری و اینکه بدانید آیا می توانید خواسته مشتری را انجام دهید یا خیر، وقت بگذارید. یک اشتباه معمول که اکثر توسعه دهندگان به اون دچار می شنوند، داشتن ده ها ایده نیمه کاره در مورد ویژگی های جالب برنامه است، در حالیکه کار اصلی که باید انجام بدهند را نادیده می گیرند. اگر شما نیروی محرکه برنامه هستید و ایده از شماست، احتمالا همه جوانب برنامه را دیده اید و می توانید از این مرحله بگذرید.
برای نوشتن نیازمندی های عملیاتی من از عبارات زیر برای توصیف آنچه باید انجام شود استفاده می کنم.
* سیستم باید ..... را انجام دهد
* برنامه باید ..... را انجام دهد
این نیازمندی ها می توانند جمله های کوتاه و ساده یا پیچیده باشند.
خب برگردیم به مثال مایکروویو فضایی خودمون و لیستی از نیازمندی های عملیاتی اون رو بنویسیم،
- سیستم باید مواد غذایی را در بسته های فضایی گرم کند.
- به کاربر اجازه دهید تا زمان آماده سازی مواد غذایی را تنظیم کند.
- زمانیکه غذا آماده شد به کاربر توسط پیجر فضایی خبر دهید.
- سیستم باید زمان پخت و پز را بر اساس غذایی که داده می شود تنظیم کند.
- برنامه باید انواع مواد غذایی را از سوپرکلاس انتزاعی به ارث ببرد.
همه موارد بالا خوب هستند بجز مورد آخر، "برنامه باید انواع مواد غذایی را از سوپرکلاس انتزاعی به ارث ببرد". این مورد را باید حذف کنیم، در تعریف نیازمندی ها هیچ کاری با شی گرایی نداریم. نیازمندی ها نباید شامل کلماتی مانند ارث بری (Inheritance)، انتزاعی (Abstraction) و یا حتی کلاس (Class) و شی (Object) باشد. اینها جزئیاتی هستند که بعداً به آنها خواهیم رسید.
خب بریم سراغ نیازمندی های غیر عملیاتی، از اونجایی که این نیازمندی ها ویژگی های مورد نیاز برنامه رو توصیف می کنند، باید توضیحی باشند راجع به چطور بودن برنامه. آنها قابلیت هایی مانند نگهداری، اعتماد، استفاده و در دسترس بودن را توصیف میکنند.
برگردیم به مثال خودمون و نیازمندی های غیر عملیاتی اون،
- باید همیشه در دسترس باشد.
- زمانی که دستکش کار پوشیدیم قابل استفاده باشد.
- با سیستم عامل های ویندوز، مک، لینوکس و همچنین اندروید سازگار باشد.
موارد بالا خوب هستند بجز آخری، آیا واقعا ماکروویو فضایی نیاز دارد که با تمام سیستم عامل ها سازگار باشد؟! شاید بگویید که این قابلیت فعلا کاربردی ندارد اما در آینده به آن نیاز خواهیم داشت. و خب البته این یک اشتباه رایج است. نباید همه نیازها را در ابتدا در نظر گرفت، در مرحله اول فقط روی حداقل مطلوب نیازها تمرکز کنید، نه چیزهای اختیاری،خوب و یا ویژگی های رویایی شما.
اگر اولین مرحله از نیازمندی های شما کامل نیست، اشکالی ندارد شما می توانید در آینده آنها را کامل کنید. هدف از این مرحله نوشتن نیازمندی ها می باشد و ایرادی ندارد اگر ساده باشد.
قسمت قبلی : آموزش اصول برنامه نویسی شی گرا : UML
قسمت بعدی : آموزش اصول برنامه نویسی شی گرا : نیازمندی ها + FURPS