نرم افزار

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

ساخت و توسعه نرم افزار (Software development)

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

 

فعالیت‌های توسعه نرم افزار (Software development)


شناسایی نیاز

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

در کتاب” مناظره های بزرگ نرم افزاری” آلن ام. دیویس در فصل “ملزومات” و زیرفصل “تکه گم شده توسعه نرم افزار” بیان میکند:

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

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

برنامه ریزی توسعه نرم افزاری

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

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

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

طراحی نرم افزار

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

پیاده سازی، آزمایش و مستندسازی

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

مستندسازی طرح یکپارچه نرم افزار به جهت نگهداری آینده و تقویت، در طی توسعه انجام میشود. این مرحله میتواند شامل نوشتن یک API، چه داخلی چه خارجی، باشد. فرایند مهندسی نرم افزارِ اخذ شده توسط تیم توسعه تعیین میکند در صورت نیاز، چه میزان مستندسازی داخلی لازم است. مدل های برنامه-رانده (مثل آبشار) معمولاً مستندسازی بیشتری نسبت به مدل های چابک ایجاد میکنند.

گسترش و نگهداری نرم افزار

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

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

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