آشنایی با ۱۷ مفهوم مهم در ارتباط با ساخت نرم افزارهای کاربردی
۱۷ مفهوم مهم در ارتباط با ساخت نرم افزارهای کاربردی
آشنایی با ۱۷ مفهوم مهم در ارتباط با ساخت نرم افزارهای کاربردی
۱٫ چرخه حیات نرمافزار چیست؟
فرآیند تولید نرمافزار که عمدتا بهنام چرخه حیات تولید نرمافزار شناخته میشود، ساختاری است که روی توسعه و تولید محصولات نرمافزاری اعمال میشود. عبارتهای مشابهی چون چرخه حیات نرمافزار و فرآیند نرمافزار در این رابطه استفاده میشود. الگوهای گوناگونی نظیر فرایندهای (خاص) وجود دارند که هر کدام خطمشی مختص (آن فرآیندها) برای انجام کارها و فعالیتهای متنوع در طول فرایندها را مشخص میکنند. برخی عنوان میکنند که طرح چرخه حیات یک عبارت بسیار عمومی است و فرآیند تولید نرمافزار عبارت تخصصیتر است. برای مثال خیلی از فرایندهای تولید نرمافزار ویژهای هستند که خود زیر مجموعه چرخه حیات مارپیچ بهشمار میروند.
۲٫ برنامهریزی (امکانسنجی)
از مهمترین کارها در تولید نرمافزار استخراج نیازمندیها یا تحلیل نیازمندیهای آن سامانه است. مشتریان عمومی معمولاً تصور مفهومی، انتزاعی و مبهمی از نتیجه نهایی خواستههایشان دارند و نمیدانند به درستی نرمافزار مورد نظرشان چه کاری باید انجام دهد.
۳٫ پیادهسازی، آزمون و مستندسازی
پیادهسازی آن قسمت از فرایند تولید نرمافزار است که مهندسان نرمافزار در دنیای واقعی تمام کدهای پروژه را مینویسند و به قول معروف برنامهنویسی میکنند.
۴٫ استقرار و نگهداری سامانه
استقرار و تحویل سامانه پس از اینکه آزمون مناسب را گذراند و برای انتشار، فروش یا هر نوع توزیع برای محیط کار نهایی تأیید شد انجام خواهد شد.
۵٫ آموزش کار با نرمافزار
آموزش نرمافزار و پشتیبانی خیلی مهم است و خیلی از تولیدکنندگان و توسعهدهندگان نرمافزارها اهمیتی به آن نمیدهند. مهم نیست که چقدر زمان و برنامهریزی توسط تیم تولید و توسعه نرمافزار برای ایجاد نرمافزار مصرف کردهاند اگر در آخر کار کاربری در سازمان نباشد تا از نرمافزار استفاده کند ساخت نرمافزار کاری بیهودهای بوده است. مردم معمولاً در برابر تغییرات مقاومت نشان میدهند و از ماجراجویی در محیط ناآشنا اجتناب میکنند، برای همین در فاز استقرار این خیلی مهم است کلاسهای آموزشی برای کاربران جدیدِ نرمافزار گذاشته شود.
۶٫ مدیریت پروژه
در مدیریت پروژه نرمافزاری و آزمون نرمافزار اعتبارسنجی (validation) و صحتسنجی (verification) فرایند بررسی این است که سامانه نرمافزاری مشخصاتی که باید را دارا باشد و هدف مقصود از طراحی خود را برآورده میسازد. این فرایند در کلیه مراحل تولید سیستم باید اجرا شود تا از اعتبار و صحت ورودیها و خروجیهای سیستم محاسباتی اطمینان حاصل شود. اعتبار سنجی و صحت سنجی با یکدیگر متفاوت هستند، بری بوهم به طور موجز و خلاصه تفاوت این دو را در قالب دو سوال صحت سنجی، آیا محصول به درستی ایجاد شده است و اعتبار سنجی، آیا محصول در برآوردن نیازها به درستی عمل میکند مطرح میکند.
۷٫ اصالتسنجی
اصالتسنجی یا احراز هویت به تعیین صحت و سقم یک ویژگی، داده یا نهاد گفته میشود. این فرایند ممکن است شامل تأیید هویت یک شخص، دنبال کردن ریشههای یک سازه بشری، مطمئن شدن از اینکه یک کالا همانی است که بستهبندی و شناسبرگش ادعا میکنند، یا اطمینان از قابل اعتماد بودن یک نرمافزار رایانهای باشد. در دنیای نرمافزار و فناوری اطلاعات اصالت سنجی بدین معنا است که یک سرویس دهنده بتواند تشخیص دهد کسی که تقاضایی را روی آن سیستم دارد شخص حقیقی است یا یک شیاد است تا بدین ترتیب به گیرنده پیام اطمینان داده شود که پیام از همان مبدأیی است که ادعا شدهاست. هر مکانیزمی که بتواند هویت واقعی یک فرد را بدون هیچ ابهامی، تأیید یا رد کند سرویسی جهت اصالتسنجی است. این سرویس برخلاف باور عموم یکی از پیچیدهترین مباحث امنیت شبکه بهشمار میرود. در سطح حداقل، احراز هویت تضمین میکند که پیام از منبع موثقی میرسد. علاوه بر این احراز هویت میتواند شامل حفاظت در مقابل تغییر، تأخیر، تکرار و ترتیب مجدد پیام باشد. عنصر مهم طرح احراز هویت، استفاده از احرازکننده است که معمولاً کد احراز هویت پیام (MAC) یا تابع درهم سازی است.
۸٫ کیفیت نرمافزار
در مبحث مهندسی نرمافزار، کیفیت نرمافزار به دو رده مرتبط اما مجزای زیر اشاره دارد:
کیفیت عملیاتی نرمافزار (Software Functional Quality): شاخصی جهت نشان دادن میزان تطابق نرمافزار با نیازمندیهای عملیاتی تعریف شده برای نرمافزار.
کیفیت ساختاری نرمافزار (Software Structural Quality): که منعکس کننده میزان دست یابی به نیازمندیهای غیر عملیاتی مانند استحکام (Robustness) و قابلیت نگهداری (Maintainability) نرمافزار است.
بسیاری از جنبههای کیفیت ساختاری نرمافزار تنها با تحلیل و بررسی ساختار درونی و کد آن در سطح واحد ، سطح تکنولوژی و سطج سیستم بررسی می شود، اما برخی خصوصیات ساختاری مثل قابلیت استفاده بودن فقط به صورت پویا قابل ارزیابی می باشند .(ارزیابی کاربران و افرادی که با نرمافزار سر و کار دارند حتی اگر با یک نسخه ی پروتوتایپ روبرو باشند) جنبه های دیگر مثل قابلیت اطمینان ممکن است علاوه بر نرمافزار ، سخت افزار را نیز در یر بگیرد .پس می توان آن را به صورت ایستا و پویا ارزیابی کرد. کیفیت عملیاتی نرمافزار معمولاً به صورت پویا بررسی می شود اما می توان بررسی های ایستا هم برای آن در نظر گرفت. ضمین کیفیت نرمافزار عبارتست از نظارت بر روند مهندسی نرمافزار و روشهایی که برای اطمینان یافتن از کیفیت آن مورد استفاده قرار میگیرند. روشهایی که بدین منظور ایجاد شدهاند بسیار زیاد و متنوع هستند که هریک انطباق با چند مورد از استانداردها (مثل ایزو ۹۰۰۰ و یک مدل مثل CMMI) را بررسی و تضمین میکنند.
۹٫ تضمین کیفیت نرمافزار
روشهای تضمین کیفیت نرمافزار کل فرایند توسعه نرمافزار را دربرمیگیرند. از جمله مراحل توسعه نرمافزار میتوان به تعریف نیازمندیها، طراحی نرمافزار، کدنویسی، بازبینی کد، مدیریت پیکربندی نرمافزار، تست، مدیریت پخش، یکپارچه سازی محصول اشاره کرد. تضمین کیفیت نرمافزار به اهداف، الزامات، تواناییها، فعالیتها، اندازهگیریها و ارزیابیها سامان میبخشد. تضمین کیفیت نرمافزار برحسب (ISO/IEC 15504 v.2.5 (SPICE یک فرایند حمایتی است که باید به وسیله طرحهای از پیش تعیین شده و isO 15504 کیفیت را در تک تک محصولات، فعالیتها و فرایندها بهطور مستقل تضمین کند. پس از مباحث مطرح در چگونگی ایجاد نرمافزار و بحثهای مربوطه؛ یکی از چالشهای موجود بررسی مفهوم چیستی کیفیت نرمافزار و متعاقب آن معیارهای سنجش و روشهای تضمین کیفیت آن است. صحبت از کیفیت نرمافزار و بررسی و سنجش آن تنها از طریق پاسخگویی به سوالات زیر و مشخص کردن روشی برای رسیدن به این پاسخ امکانپذیر است:
تعریف صریح و دقیق معنا و مفهوم «کیفیت نرمافزار»
ایجاد مجموعه ای فعالیتهایی که ما را از بالا بودن کیفیت محصولات نرمافزاری ارائه شده مطمئن میکنند.
اجرا کردن فعالیتهای کنترل و ضمانت کیفیت در همه پروژههای نرمافزاری
استفاده از ابزارها در راستای توسعه استراتژیهای بهبود فرایندهای نرمافزار و در نتیجه باکیفیت شدن محصول نهایی
تحلیل ساختیافته
تحلیل ساختیافته در مهندسی نرمافزار روشی برای تحلیل و تبدیل نیازمندیهای حرفهای به مشخصات و در نهایت به برنامههای نرمافزاری یا پیکربندیهای سخت افزاری و فرایندهای دستی مرتبط میباشد .
۱۰٫ مدلسازی
مدل سازی داده (به انگلیسی: Data modeling) در مهندسی نرمافزار به فرایند ایجاد مدل داده برای استفاده در سیستم اطلاعاتی، با استفاده از تکنیکهای مدل کردن داده گویند.
۱۱٫ مدیریت ریسک
مدیریت خطر یا مدیریت ریسک کاربرد سیستماتیک سیاستهای مدیریتی، رویهها و فرایندهای مربوط به فعالیتهای تحلیل، ارزیابی و کنترل ریسک میباشد. مدیریت ریسک عبارت از فرایند مستندسازی تصمیمات نهایی اتخاذ شده و شناسایی و بهکارگیری معیارهایی است که میتوان از آنها جهت رساندن ریسک تا سطحی قابل قبول استفاده کرد. مدیریت ریسک یکی از قسمتهای محوری مدیریت استراتژیک هر سازمان بهشمار میرود. این شیوه شامل فرایندهایی است که از طریق آن سازمانها میتوانند به صورت روشمند خطرهای مرتبط با فعالیتهایشان را شناسایی کنند. یک رویکرد مدیریت خطر موفق باید با سطح خطر در سازمان متناسب و با دیگر فعالیتهای سازمان همراستا باشد. از دیگر ویژگیهای مدیریت خطر موفق میتوان به جامعیت گستره کار، گرهخوردگی با فعالیت روزمره، و پویایی در پاسخگویی به شرایط نام برد. در تعریف ایزو ۳۱۰۰۰، فرایند مدیریت خطر دارای مراحل شناخت خطر در محدوده مورد نظر، برنامهریزی برای فرایندهای باقیمانده، شناسایی خطر و ارزیابی خطر است.
۱۲٫ مشخصه کاربردی
مشخصه کاربردی (Functional specification) در مهندسی سیستم و توسعه نرمافزار، یک سند است که عملکردهایی را مشخص مینماید که یک سیستم یا یک جزء تشکیل دهنده باید اجرا نماید. مستندسازی بهطور معمول توصیف میکند که کاربر سیستم و همچنین مشخصات درخواست شده ورودیها و خروجیها به چه نیاز دارند. یک مشخصه کاربردی واکنش فنی تری به یک سند الزامات تطبیقی بهشمار میرود. بنابراین نتایج مرحله تجزیه و تحلیل الزامات را سرعت میدهد. در سیستمهای پیچیدهتر سطوح چندگانه از مشخصات کاربردی معمولاً در کنار یکدیگر قرار دارند، بهعنوان مثال در سطح سیستم روی سطح ماژول یا روی سطح جزئیات فنی. یکی از روشهای محبوب نوشتن یک سند مشخصات کاربردی شامل طراحی یا ارائه یک فریم ساده یا تصویرهای دقیق و از لحاظ گرافیکی طراحی شده UI است. پس از اینکه این امر انجام شد، و نمونههای صفحه نمایش توسط همه ذینفعان تأیید شدند، عناصر گرافیکی میتوانند شماره گذاری شوند و دستور العملهای نوشته شده میتوانند برای هر عدد در نمونه صفحه نمایش اضافه شوند. بهعنوان مثال، یک صفحه ورود به سیستم میتواند فیلد نام کاربری با برچسب ‘۱’ و فیلد رمزعبور با برچسب ‘ ۲ ‘ داشته باشد و سپس هر عدد را میتوان در نوشتن برای استفاده توسط مهندسان نرمافزار و بعدها برای اهداف آزمایش بتا اعلام نمود تا اطمینان حاصل شود که عملکرد مورد انتظار بودهاست. مزیت این روش این است که جزئیات اضافی بیشماری را میتوان به نمونههای صفحه نمایش پیوند داد.
۱۳٫ زبان مدلسازی
زبان مدلسازی (Modeling language) در مدلسازی علمی و مهندسی سیستمها و نرمافزار، به هر زبان ساختگی اطلاق میشود، که قابلیت بیان اطلاعات و دانش یا معرفی سیستمها را دارا باشد و در یک ساختار تعریف شده، توسط مجموعهای از قوانین (بمنظور تفسیر اجزای ساختار) مورد استفاده قرار گیرد. زبان مدلسازی میتواند گرافیکی یا متنی باشد.
۱۴٫ الگوی برنامهنویسی
الگو برنامهنویسی یا پارادایم برنامهنویسی (Programming paradigm) به شیوههای اساسی برنامهنویسی رایانه گویند. یک زبان برنامهنویسی میتواند یک یا چند شیوه برنامهنویسی را پشتیبانی نماید. برای مثال، برنامههای نوشته شده با سی++ میتوانند کاملاً به صورت رویهای باشند یا کاملاً منطبق بر شیوه برنامهنویسی شئگرا که در تضاد کامل با شیوه رویهای است بوده یا حتی حاوی عناصری از هر دو شیوه باشند. تصمیمگیری برای چگونگی استفاده از عناصر شیوههای برنامهنویسی برعهده طراح برنامه یا برنامهنویس میباشد.
۱۵٫ معماری نرمافزار
معماری نرمافزار یعنی ساختار و سازمان یک سیستم نرمافزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز میباشد. در واقع اجزاء را در حوزههای مرتبط به هم گروه بندی میکند. دیگر حوزههای مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز میشوند.معماری نرمافزار از کلیدیترین بخشهای تولید نرمافزار مخصوصاً نوع تجاری آن است که البته در سالهای اخیر با ایجاد مدلهای کلاسیک تولید نرمافزار به نرمافزارهای عظیم تر محدود شدهاست. معماری نرمافزار در واقع انتخاب یک ساختار کلی برای پیادهسازی یک پروژه نرمافزاری بر مبنای مجموعهای از نیازهای کاربری و تجاری یک سیستم نرمافزاری است تا هم بتوان کاربردهای مورد نظر را پیادهسازی کرد و هم بتوان کیفیت نرمافزار، تولید آن و نگهداری آن را نیز بهینه کرد و سرعت بخشید. به عبارتی دیگر: معماری نرمافزار یک برنامه یا سیستم محاسباتی، ساختار یا ساختارهای آن سیستم محاسباتی است که خصوصیات قابل رویت از بیرون، عناصر و ارتباطات بین آنها را نشان میدهد. معماری نرمافزار فرایند تعریف یا راه حل نرمافزاری ساختار منداست یه شکلی که بتواند کلیه نیازمندیهای فنی و عملیاتی مورد انتظار را، پوشش دهد. این فرایند باید به شکلی انجام شود که معیارهای کیفی مانند بهره دهی ، امنیت و قابلیت اطمینان و مدیریتپذیری ، بهینه شده باشند. فیلیپ کرچن و گریدی بوش معماری نرمافزار را به صورت زیر تعریف می نمایند: “معماری نرمافزار شامل تصمیمات کلیدی راجع به ساختار یک سیستم نرمافزاری است که شامل انتخاب اجزای سازنده نرمافزار و رابطههای آنها است . همچنین رفتار این اجزا را به عنوان تعاملی که باهم برای ساختن یک زیر سیستم بزرگتر ، انجام میدهند ، مشخص می سازد. معماری نرمافزار همچنین، کارکردها ، قابلیت استفاده ،انعطاف پذیری، عملکرد ، استفاده مجدد، قابل درک بودن، محدودیتهای اقتصادی و فناوری، نحوه تبادل اطلاعات و جنبههای زیبایی سیستم نرمافزاری را شامل میشود.”
۱۶٫ مدل دادهای
مدل داده (Data model) نوعی مدل انتزاعی است که عناصر داده را سازمان میدهد و نحوه ارتباط با دیگر دادهها را استانداردسازی میکند، همچنین نحوه ارتباط آن داده با ویژگیهای موجودیتهای جهان واقعی را نیز استانداردسازی میکند. برای مثال، یک مدل داده تعیین میکند که عناصر داده نمایش دهنده یک خودرو شامل تعدادی عنصر داده دیگری است که سایز و رنگ خودرو را نمایش میدهند و مالک آن خودرو را نیز تعریف میکند. مدل داده به دو معنی به کار برده میشود. معنی اول به اشیایی گفته میشود که توسط یک سیستم کامپیوتری، با توجه به خصوصیات و رابطههای آن نمایش داده میشود که این اشیاء در دنیای واقعی وجود دارند مثل مشتری، سفارش یا موجودی. تعریف دوم مدل داده که در مقاله مدلهای انتزاعی پایگاه دادهها توضیح داده شده مربوط به مفاهیم و قوانینی هستند که در مدل سازی پایگاههای داده استفاده میشوند.
۱۷٫ آزمون نرمافزار
آزمون نرمافزار به فرایند ارزیابی نرمافزار به منظور اطمینان از عملکرد صحیح آن در رویدادهایی مختلفی که ممکن است در دوره استفاده از نرمافزار با آن مواجه شود میباشد و به عبارت دیگر پیدا کردن خطاهایی احتمالی یک نرمافزار برای عملکرد درست، صحیح و بهینه آن در طول استفاده از آن است. هر چقدر نرمافزار بتواند با رویدادها مختلف به صورت مطلوب تر و قابل پذیرش تری چه از نظر عملکرد و چه از راحتی کاربر داشته باشد میتوان انتظار داشت نرمافزار دارای عملکرد بهتری میباشد. آزمون برنامه شامل اجرای بخش هایی (کامپوننت هایی) از برنامه یا بخش هایی از سیستم میشود تا مشخصات موردنظر سیستم را ارزیابی کند. بصورت کلی این مشخصات مشخص میکنند که هرکدام از بخش های برنامه ویژگی های زیر را تحت عملیات آزمون کردن دارند :
به نیازمندی هایی که توسعه و طراحی نرم افزار را جهت دهی کرده اند رسیده است؟
به انواع ورودی ها پاسخ مناسبی میدهد؟
عملکرد خود را در زمان قابل قبولی انجام میدهد؟
به اندازه کافی کارآمد است؟
آیا میتوان آن را روی محیطی که برای آن برنامه ریزی انجام گرفته است نصب و اجرا کرد؟
به نتیجه کلی که مطلوب سرمایه گذاران است دست پیدا کرده است؟
اصول تست با توجه به نیازمندیهای کاربر برنامهریزی قبل از اجرا (test plan) نوشتن برنامه تست قانون پارتو %۸۰ خطاهای کشف نشده در ۲۰٪ کد است تست باید از اجزای کوچک شروع شود ممکن نیست (exhaustive) تست کامل برای مؤثر بودن باید توسط شخص ثالث بیطرف انجام شود معیارهای تستپذیری نرمافزار به شرح زیر است:
قابلیت اجرا Operability – هرچه نرمافزار بهتر کار کند و در محیطهای بیشتری قابل اجرا باشد، n بهتر قابل ارزیابی است
مشاهدهپذیری Observability – قابلیت مشاهده نتایج ارزیابی
کنترلپذیری Controlability – قابلیت اجرای تستهای خودکار (مثل امکان اجرای خودکار تستهای واحد توسط jUnit برای زبان جاوا)
تجزیهپذیری Decomposability – ارزیابی میتواند هدفمند تر شود
سادگی Simplicity – کاهش پیچیدگی معماری و منطق برنامه
پایداری Stability – برای ارزیابی تغییرات کمی بخواهد
درکپذیری Understandability – قابلیت درک طراحی و وابستگیهای بین اجزا
این آزمون در سطوح مختلفی همچون آزمون واحد (Unit testing)، آزمون یکپارچهسازی افزایشی، آزمون یکپارچهسازی (Integration testing)، آزمون سیستم (System testing)، آزمون پذیرش (Acceptance testing)، آزمون آلفا و آزمون بتا خلاصه میشود.
منبع : شبکه