مقالات علمی

نرم افزار ویزیو Visio چیست؟
2023-10-30
پروژه های جذاب برنامه نویسی برای ایجاد یک فرصت شغلی ایده آل
2023-10-30
نمایش همه

آشنایی با مفاهیم ساخت نرم افزار ها

تماس بگیرید

توضیحات

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

چرخه حیات نرم افزار چیست؟

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

برنامه ریزی (امکان سنجي)

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

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

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

استقرار و نگهداری سامانه

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

آموزش کار با نرم افزار

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

مدیریت پروژه

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

اصالت سنجی

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

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

کیفیت نرم افزار

در بحث مهندسی نرم افزار ، کیفیت نرم افزار به دو رده مرتبط اما مجزای زیر اشاره دارد:

کیفیت عملیاتی نرم افزار(Software Functional Quality) :

شاخصی جهت نشان دادن میزان تطابق نرم افزار با نیازمندی های عملیاتی تعریف شده برای نرم افزار.

کیفیت ساختاری نرم افزار(Software Structural Quality) :

که منعکس کننده میزان دست یابی به نیازمندی های غیر عملیاتی مانند استحکام (Robustness) و قابلیت نگهداری (Maintainability) نرم افزار است.

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

تضمين کيفيت نرم افزار عبارتست از نظارت بر روند مهندسي نرم افزار و روش هايي که براي اطمينان يافتن از کيفيت آن مورد استفاده قرار مي گیرند. روش هایی که بدین منظور ايجاد شده اند بسيار زياد و متنوع هستند که هريک انطباق با چند مورد از استانداردها (مثل ایزو و يک مدل مثل CMMI) را بررسي و تضمين مي کنند.

تضمین کیفیت نرم افزار

روش های تضمین کیفیت نرم افزار، کل فرايند توسعه نرم افزار را دربر می گیرند. از جمله مراحل توسعه نرم افزار می توان به تعریف نیازمندی ها، طراحی نرم افزار، کدنویسی، بازبینی کد، مدیریت پیکربندی نرم افزار، تست، مدیریت پخش، یکپارچه سازی محصول اشاره کرد. تضمین کیفیت نرم افزار به اهداف، الزامات، توانایی ها، فعالیت ها، اندازه گیری ها و ارزیابی ها سامان می بخشد. تضمین کیفیت نرم افزار برحسب (ISO/IEC 15504 v.2.5 (SPICE يک فرایند حمایتی است که باید به وسیله طرح های از پیش تعیین شده و isO 15504 کیفیت را در تک تک محصولات، فعالیت ها و فرایندها بطور مستقل تضمین کند. پس از مباحث مطرح در چگونگی ایجاد نرم افزار و بحث های مربوطه؛ یکی از چالش های موجود بررسی مفهوم چیستی کیفیت نرم افزار و متعاقب آن معیارهای سنجش و روش های تضمین کیفیت آن است. صحبت از کیفیت نرم افزار و بررسی و سنجش آن تنها از طریق پاسخگویی به سوالات زیر و مشخص کردن روشی برای رسیدن به این پاسخ امکانپذیر است:

تعریف صریح و دقیق معنا و مفهوم کيفيت نرم افزار :

ایجاد مجموعه ای فعالیت هایی که ما را از بالا بودن کیفیت محصولات نرم افزاری ارائه شده مطمئن می کنند.

اجرا کردن فعالیت های کنترل و ضمانت کیفیت در همه پروژه های نرم افزاری :

استفاده از ابزارها در راستای توسعه استراتژی های بهبود فرایندهای نرم افزار و در نتیجه با کیفیت شدن محصول نهایی

تحلیل ساخت یافته

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

مدل سازی

مدل سازی داده در مهندسی نرم افزار به فرایند ایجاد مدل داده برای استفاده در سیستم اطلاعاتی، با استفاده از تکنیک های مدل کردن داده گويند.

مدیریت ریسک

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

مشخصه کاربردی

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

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

زبان مدل سازی

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

الگوی برنامه نویسی

الگو برنامه نویسی یا پارادایم برنامه نویسی (Programming paradigm) به شیوه های اساسی برنامه نویسی رایانه گویند. یک زبان برنامه نویسی می تواند یک یا چند شیوه برنامه نویسی را پشتیبانی نماید. برای مثال، برنامه ها نوشته شده با C++ می توانند کاملاً به صورت رویه ای باشند یا کاملاً منطبق بر شیوه برنامه نویسی شئ گرا که در تضاد کامل با شیوه رويه ای است بوده یا حتی حاوی عناصری از هر دو شیوه باشند. تصمیم گیری برای چگونگی استفاده از عناصر شیوه های برنامه نویسی برعهده طراح برنامه یا برنامه نویس مي باشد.

معماری نرم افزار

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

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

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

مدل داده ای

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

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

آزمون نرم افزار

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

  • به نیازمندی هایی که توسعه و طراحی نرم افزار را جهت دهی کرده اند رسیده است؟
  • به انواع ورودی ها پاسخ مناسبی می دهد؟
  • عملکرد خود را در زمان قابل قبولی انجام می دهد؟
  • به اندازه کافی کارآمد است؟
  • آیا می توان آن را روی محیطی که برای آن برنامه ریزی انجام گرفته است نصب و اجرا کرد؟
  • به نتیجه کلی که مطلوب سرمایه گذاران است دست پيدا کرده است؟

اصول تست با توجه به نیازمندی های کاربر برنامه ریزی قبل از اجرا (test plan) نوشتن برنامه تست قانون پارتو خطاهای کشف نشده در کد است. تست باید از اجزای کوچک شروع شود ممکن نيست (exhaustive) تست کامل برای مؤثر بودن باید توسط شخص ثالث بی طرف انجام شود. معیارهای تست پذیری نرم افزار به شرح زیر است:

  • قابلیت اجراOperability : هرچه نرم افزار بهتر کار کند و در محیط های بیشتری قابل اجرا باشد، بهتر قابل ارزیابی است.
  • مشاهده پذیریObservability : قابلیت مشاهده نتایج ارزیابی.
  • کنترل پذیری Controlability : قابلیت اجرای تست های خودکار.
  • تجزیه پذیری Decomposability : ارزیابی می تواند هدفمندتر شود.
  • سادگی Simplicity : کاهش پیچیدگی معماری و منطق برنامه.
  • پایداری Stability : برای ارزیابی تغییرات کمی بخواهد.
  • درک پذیری Understandability : قابلیت درک طراحی و وابستگی های بین اجزا.

این آزمون در سطوح مختلفی همچون آزمون واحد (Unit testing)، آزمون یکپارچه سازی افزایشی، آزمون یکپارچه سازی (Integration testing)، آزمون سیستم (System testing)، آزمون پذیرش (Acceptance testing)، آزمون آلفا و آزمون بتا خلاصه می شود.