کیفیت نرم‌افزار
در مبحث مهندسی نرم‌افزار، کیفیت نرم‌افزار به دو رده مرتبط اما مجزای زیر اشاره دارد: بسیاری از جنبه های کیفیت ساختاری نرم‌افزار تنها با تحلیل و بررسی ساختار درونی و کد آن در سطح واحد ، سطح تکنولوژی و سطج سیستم بررسی می شود . اما برخی خصوصیات ساختاری مثل قابلیت استفاده بودن فقط به صورت پویا قابل ارزیابی می باشند .(ارزیابی کاربران و افرادی که با نرم‌افزار سر و کار دارند حتی اگر با یک نسخه ی پروتوتایپ روبرو باشند) جنبه های دیگر مثل قابلیت اطمینان ممکن است علاوه بر نرم‌افزار ، سخت افزار را نیز در یر بگیرد .پس می توان آن را به صورت ایستا و پویا ارزیابی کرد .
کیفیت عملیاتی نرم‌افزار معمولاً به صورت پویا بررسی می شود اما می توان بررسی های ایستا هم برای آن در نظر گرفت .
به لحاظ تاریخی ساختار ، دسته بندی و مطالعه ی ویژگی ها و معیارهای مورد استفاده در مدیریت کیفیت نرم‌افزار از مدل های ISO 9126-3 و ISO 2500:2005 سرچشمه می گیرد . بر اساس این مدل ها کنسرسیوم کیفیت نرم‌افزار های آی تی پنج خصوصیت اصلی برای یک محصول نرم‌افزاری دارای ارزش بازاری را معرفی کرد : قابلیت اطمینان ، کارآیی ، امنیت ، قابلیت نگه داری و اندازه کافی
اندازه گیری کیفیت نرم‌افزار در اصل بررسی میزان تطابق نرم‌افزار با این پنج ویژگی است .اندازه گیری کیفیت نرم‌افزار در اصل یک نمره ی کیفی یا کمی یا ترکیبی از هر دو و سپس یک سیتم وزن گیری که اولویت ها را مشخص می کند می باشد .این روش با تجزیه و تحلیل خطاهای برنامه نویسی که منجر به فاجعه می شود خاتمه می یابد .این خطاها در سطح سیستم تا ۹۰ درصد از مشکلات پروژه را نشان می دهند .در حالی که در سطح واحد ۱۰ درصد از مشکلات تولید را شامل می شود .در نتیجه کیفیت کد بدون بدون چهارچوب کل سیستم دارای ارزش محدود است .
برای دیدن ، بررسی ، آنالیز وارتباطات اندازه گیری کیفیت نرم‌افزار ، مفاهیم و تکنیک های تجسم کردن اطلاعات،بسیار مفید است بخصوص وقتی که چندین فاکتور مختلف با یکدیگر مرتبط باشند .به عنوان مثال نقشه ی نرم‌افزار اطلاعات مربوط به توسعه نرم‌افزار، کیفیت نرم‌افزار و دینامیک سیستم را مورد بررسی قرار می دهد .
اندازه گیری کیفیت نرم‌افزار حداقل با دو هدف اساسی صورت می گیرد . مدیریت ریسک و مدیریت هزینه
مدیریت ریسک : خرابی نرم‌افزار مشکلاتی بیش از ناراحتی و نگرانی ایجاد کرده است .مشکلات نرم‌افزار فجایای انسانی ایجاد کرده است . این مشکلات میتواند از طراحی رابط کاربرب ضعیف تا حطاهای اساسی نرم‌افزار در کد نویسی متغیر باشد .مثال هایی از از مشکلات نرم‌افزاری که به مرگ منجر شده اند در مقاله دکتر لوسون موجود است . این مثال ها شامل نرم‌افزار هایی که در دستگاه های پزشکی و دیگر دستگاه های حساس وجود دارند ، می باشد ."[مهندسانی که نرم‌افزارهای جاسازی شده را می نویسند] برنامه های جاوارا می بینند که یک سوم ثانیه برای انجام جمع آوری زباله و به روزرسانی رابط کاربری ، زمان صرف میکنند و آنها هواپیماهای در حال سقوط از آسمان را پیش بینی می کنند. " . در ایالات متحده ، اداره حمل و نقل هوایی فدرال (FAA) ،با ارائه ی سرویس صدور گواهینامه هواپیما FAA ، برنامه های نرم‌افزاری ، قوانین ، راهنمایی و آموزش هایی ارائه می دهد ، که تأثیر آن بر روی محصولات هواپیمایی است .
مدیریت هزینه: همانند زمینه های دیگر مهندسی ، برنامه ای با کیفیت ساختاری مناسب هزینه ی نگه داری ، یادگیری و تغییر بسیار کمتری دارد . آمار نشان می دهد که کیفیت ساختاری ضعیف در برنامه های تجاری (مانند برنامه ریزی منابع سازمانی (ERP) ، مدیریت ارتباط با مشتری (CRM) یا سیستم های مالی با پردازش های بزرگ) باعث افزایش هزینه ها می شود و از طرفی باعث ایجاد دوباره کاری (حتی تا 45 درصد از زمان توسعه در برخی سازمانها) می شود . علاوه بر این ، کیفیت ساختاری ضعیف به دلیل ارائه ی داده های غلط ، توقف برنامه ها و مشکلات امنیتی و پردازشی باعص ایجاد اختلال در عملکرد سازمان ها می شود .
با این حال ، بین اندازه گیری و بهبود کیفیت نرم‌افزار در یک سیستم جاسازی شده (با تأکید بر مدیریت ریسک) و کیفیت نرم‌افزار در نرم‌افزارهای تجاری (با تأکید بر هزینه و مدیریت پایداری) تفاوت وجود دارد . سیستم های جاسازی شده در حال حاضر اغلب شامل یک رابط کاربری هستند و طراحان آنها به همان اندازه که همتایان خودروی برنامه های تجاری متمرکز هستند ، نگران قابلیت استفاده و بهره وری کاربر هستند. گروه دوم به دنبال سیستم ERP یا CRM به عنوان یک سیستم عصبی شرکتی هستند که زمان و عملکرد آن برای رفاه شرکت مهم است. این همگرایی بیشتر در پردازش های موبایل قابل مشاهده است: کاربری که به یک برنامه ERP در تلفن هوشمند خود دسترسی پیدا می کند ، از بین لایه های نرم‌افزار به کیفیت بستگی دارد.
در حال حاضر هر دو نوع نرم‌افزار از معماری چند لایه ای و پیشرفته استفاده می کنند ، بنابراین تجزیه و تحلیل و اندازه گیری کیفیت نرم‌افزار باید به صورت جامع و مداوم مدیریت شود ، و از هدف نهایی یا استفاده نهایی نرم‌افزار جدا شوند.
تعاریف مختلف زیادی از کیفیت وجود دارد. در برخی تعاریف ، کیفیت "توانایی یک محصول نرم‌افزاری برای مطابقت با الزامات " است. ( طبق ISO / IEC 9001 ) در حالی که برای دیگران می تواند مترادف با "ارزش مندی برای مشتری" (Highsmith، 2002) باشد.
اولین تعریفی از کیفیت که تاریخ به یاد می آورد از شوهارت در آغاز قرن بیستم است: "دو جنبه متداول از کیفیت وجود دارد: یکی به عنوان یک واقعیت عینی مستقل از وجود انسان است." "دیگری با آنچه در نتیجه واقعیت عینی فکر می کنیم ، احساس می کنیم یا احساس می شود ، ارتباط دارد." "به عبارت دیگر ، یک کیفیت ذهنی وجود دارد." (شیوارت ).
Kitchenham و Pfleeger ، در ادامه آموزه های دیوید گاروین ، پنج دیدگاه مختلف در مورد کیفیت را بیان می کنند:
این مشکل ذاتی در تعریف کیفیت یک محصول ، هر نوع محصول ، توسط استاد والتر شوگارت بیان شده است.
مشکل تعیین کیفیت ، مشکل تبدیل نیازهای آینده کاربر به ویژگی های قابل اندازه گیری است ، به گونه ای که می توان محصولی را طراحی کرد که رضایت را در قبال مبلغی که کاربر پرداخت می کند به او هدیه بدهد . این کار آسانی نیست و به محض احساس احساس موفقیت ، متوجه می شویم که نیازهای مصرف کننده تغییر کرده است ، رقبای دیگر وارد میدان شده اند و ... کیفیت از دید مشتری مهم است ، نه کیفیت از دید یک مهندس ، نه کیفیت از دید بازاریاب و نه مدیریت. این کیفیت میتواند تجربه واقعی مشتری با محصول یا خدمات باشد که مطابق با خواسته های وی آگاهانه یا صرفاً احساسی بیان شده است و از لحاظ فنی عملیاتی یا کاملاً ذهنی اندازه گیری می شود و همیشه نشان دهنده یک هدف اساسی در بازار رقابتی است.
واژه کیفیت معانی مختلفی دارد . دو تا از این معانی را بررسی می کنیم :
1- کیفیت شامل ویژگی های محصول است که نیاز مشتری را برآورده می کند و در نتیجه رضایت مندی از محصول را فراهم می کند.
2. کیفیت شامل رفع نواقص است .
با این وجود ، می توان به عنوان یک تعریف کوتاه از کیفیت گفت : کیفیت مناسب بودن یک محصول برای استفاده است .
اگرچه "کیفیت یک ویژگی ادراکی ، بسته به مورد و تا حدودی ذهنی است و ممکن است افراد مختلف برداشت های مختلفی از آن بکنند " (همانطور که در مقاله در مورد کیفیت در تجارت ذکر شده است ) ، کیفیت ساختاری نرم‌افزار به طور واضح توسط کنسرسیوم کیفیت نرم‌افزارهای حوزه ی آی تی ( CISQ) مشخص شده است . با هدایت بیل کورتیس ، نویسنده چارچوب قابلیت مدل بلوکی و مدیر CISQ و Capers Jones ، مشاور برجسته CISQ ، CISQ پنج ویژگی اصلی مطلوب یک قطعه از نرم‌افزار مورد نیاز برای تأمین ارزش تجاری را تعریف کرده است . در مدل خانه کیفیت ، اینها مواردی هستند که باید به آنها برسید :
کیفیت عملکردی نرم‌افزار به عنوان تطابق آن با الزامات کاربردی به صورت صریح بیان شده تعریف شده است ، به عنوان مثال با استفاده از تجزیه و تحلیل صدای مشتری (بخشی از طراحی جعبه ابزار Six Sigma و / یا مستند از طریق موارد استفاده ) و سطح رضایت کاربر نهایی استفاده می شود. مورد دوم قابلیت استفاده است اینکه چقدر رابط کاربری بصری و پاسخگو است ، چقدر عملیات ساده و پیچیده را می توان انجام داد و پیام های خطای مفید چقدر است. به طور معمول ، شیوه ها و ابزارهای آزمایش نرم‌افزار اطمینان حاصل می کنند که یک تکه از نرم‌افزار مطابق با طراحی اصلی ، تجربه کاربری برنامه ریزی شده و تست پذیری مطلوب رفتار می کند.
ویژگی ساختاری دوگانه کیفیت نرم‌افزار با مدل ارائه شده در کد کامل استیو مک کانل که ویژگی های نرم‌افزار را به دو قسمت تقسیم می کند سازگار است: ویژگی های کیفیت داخلی و خارجی. ویژگی های کیفیت خارجی آن بخش هایی از محصول است که با کاربران آن روبرو می شود و کیفیت داخلی برعکس آن است .
یکی از مشکلات تعیین کیفیت این است که "همه احساس می کنند که آن را می فهمند" و تعاریف دیگر از کیفیت نرم‌افزار می تواند مبتنی بر گسترش مفهوم کیفیتی که در تجارت استفاده می شود باشد.
دکتر تام د مارکو اظهار داشته است که "کیفیت محصول تابعی از تغییر جهان برای بهتر شدن" یعنی کیفیت عملکرد و رضایت کاربر در تعیین کیفیت نرم‌افزار از کیفیت ساختاری مهمتر است.
تعریفی دیگر که توسط جرالد وینبرگ در مدیریت کیفیت نرم‌افزار ایجاد شده است: تفکر سیستمی این است که "کیفیت برای برخی از افراد ارزش دارد". این تعریف تأکید می کند که کیفیت ذاتاً ذهنی است ، افراد مختلف کیفیت یک نرم‌افزار یکسان را متفاوت تجربه می کنند. یکی از نقاط قوت این تعریف سؤالاتی است که تیمهای نرم‌افزاری را برای بررسی آنها دعوت می کند ، سوالاتی از قبیل : "افرادی که می خواهیم به نرم‌افزار ما ارزش دهند چه کسانی هستند؟" و "چه چیزی برای آنها با ارزش خواهد بود؟".
اگرچه مفاهیم ارائه شده در این بخش برای هر دو کیفیت ساختاری و کاربردی نرم‌افزار کاربرد دارد ، اندازه گیری دومی اساساً از طریق آزمایش انجام می شود [به مقاله اصلی مراجعه کنید: ].
اندازه گیری کیفیت نرم‌افزار درواقع بررسی این است که نرم‌افزار تا چه میزان خصوصیات مورد انتظار را دارد . این امر می تواند از طریق روش های کیفی یا کمی یا ترکیبی از هر دو انجام شود. در هر دو مورد ، برای هر خصوصیت مطلوب ، مجموعه ای از ویژگی های قابل اندازه گیری وجود دارد که وجود آنها در یک قطعه نرم‌افزار یا سیستم منجر به وجود ویژگی مورد نظر می شوند . به عنوان مثال ، یک ویژگی مرتبط با قابلیت حمل ، تعداد عبارات وابسته به هدف در یک برنامه است. به طور دقیق تر ، با استفاده از رویکرد استقرار عملکرد کیفیت ، این ویژگی های قابل اندازه گیری "چگونگی" هایی هستند که باید اجرا شوند تا بتوانند "آنچه را" در تعریف کیفیت نرم‌افزار بالا را فعال کنید.
ساختار ، طبقه بندی و اصطلاحات ویژگی ها و معیارهای قابل استفاده برای مدیریت کیفیت نرم‌افزار از دو مدل ISO 9126-3 و ISO / IEC 25000: 2005 گرفته شده است. تمرکز اصلی روی کیفیت ساختاری داخلی است. زیر شاخه ها برای رسیدگی به موارد خاص مانند معماری برنامه کاربردی تجاری و خصوصیات فنی مانند دسترسی به داده ها و دستکاری ها داده ها ایجاد شده اند.
ارتباط بین خطاهای برنامه نویسی و نقص تولید نشان می دهد که خطاهای کد اصلی 92٪ از کل خطاهای موجود در سورس کد را تشکیل می دهد. این تعداد بسیار زیاد مشکلات مربوط به کد در نهایت تنها 10٪ از نقص تولید را به خود اختصاص می دهد. روشهای بد مهندسی نرم‌افزار در سطح معماری تنها 8٪ از نقص کل را شامل می شود ، اما بیش از نیمی از تلاش صرف شده برای رفع مشکلات را انجام می دهد و منجر به 90٪مشکلات جدی در مورد قابلیت اطمینان ، امنیت و کارایی در تولید می شود.
بسیاری ازروش های اندازه گیری موجود ، عناصر ساختاری برنامه را که منجر به تجزیه سورس کد به دستورالعمل های واحد است ، شمارش می کنند (پارک ، 1992) ، نشانه (Halstead ، 1977) ، ساختارهای کنترل (McCabe، 1976)، و اشیاء (Chidamber & Kemerer، 1994).
اندازه گیری کیفیت نرم‌افزار، تعیین وسعت سیستم یا نرم‌افزار در این ابعاد است. تجزیه و تحلیل را می توان با استفاده از یک رویکرد کیفی یا کمی یا ترکیبی از هر دو انجام داد تا نمای کلی (با استفاده از میانگین (های) وزنی که نشان دهنده اهمیت نسبی بین عوامل مطرح شده می باشد ) ارائه شود.
این دیدگاه از کیفیت نرم‌افزار در یک روش قدم به قدم باید با شناسایی خطاهای برنامه نویسی بحرانی گسسته تکمیل شود. این حطاها ممکن است یک مورد آزمایشی را از بین نبرند ، اما در شرایط خاص می توانند منجر به وقوع فاجعه بار ، تخریب عملکرد ، نقض امنیت ، خراب کردن داده و مشکلات بی شمار دیگری شوند (Nygard، 2007). یک سیستم واقعی و آماده استفاده ، بدون در نظر گرفتن امتیاز آن بر اساس اندازه گیری های کل ، یک سیستم مناسب به شمار نمی‌آید.
اندازه گیری ویژگی های مهم برنامه شامل اندازه گیری ویژگی های ساختاری معماری برنامه ، برنامه نویسی و مستندات درون کد است . بنابراین ، هر مشخصه تحت تأثیر ویژگی هایی در سطوح متعدد انتزاع در برنامه قرار دارد و همه این موارد را باید در محاسبه اندازه گیری خصوصیات در صورتی که پیش بینی کننده ارزشمندی از نتایج کیفی است که در کسب و کار تأثیر می گذارد ، لحاظ کرد.
تحلیل و اندازه گیری کیفیت ساختاری از طریق تجزیه و تحلیل سورس کد ، معماری ، چارچوب نرم‌افزار ، شمای پایگاه داده در رابطه با اصول و معیارهای تشکیل دهنده معماری مفهومی و منطقی سیستم انجام می شود . این موضوع با تجزیه و تحلیل کدهای اساسی ، محلی و مؤلفه ای سطحی که معمولاً توسط ابزارهای توسعه انجام می شود می باشد .
علل اصلی ضعف در قابلیت اطمینان ، عدم رعایت شیوه های خوب معماری و رمزگذاری است . این موضوع با اندازه گیری ویژگی های کیفی استاتیک برنامه قابل تشخیص است. ارزیابی ویژگی های استاتیک زیربنای قابل اطمینان بودن برنامه ، تخمین سطح ریسک تجاری و احتمال بروز نقص احتمالی برنامه را در هنگام بهره برداری فراهم می کند.
ارزیابی قابلیت اطمینان مستلزم بررسی حداقل روشهای مهندسی نرم‌افزار زیر و بهترین خصوصیات فنی است:
بسته به نوع معماری برنامه و مؤلفه های مورد استفاده (مانند کتابخانه های خارجی یا چارچوب ها) ،موارد شخصی و سفارشی دیگیر هم باید تعریف شوند تا از ارزیابی بهتری از قابلیت اطمینان نرم‌افزار داشته باشیم .
مانند اطمینان ، علل ناکارآمدی عملکرد اغلب در موارد نقض معماری و برنامه نویسی خوب است که می توان با اندازه گیری خصوصیات کیفیت استاتیک یک برنامه آن هارا شناسایی کرد. این ویژگیهای استاتیکی ، گلوگاه های عملکرد احتمالی عملیاتی و مشکلات مقیاس پذیری در آینده را پیش بینی می کنند ، به ویژه برای برنامه هایی که به سرعت اجرای بالایی را برای دستیابی به الگوریتم های پیچیده یا حجم عظیم داده ها نیاز دارند.
ارزیابی کارایی نیاز به بررسی حداقل روشهای مهندسی نرم‌افزار زیر و ویژگیهای فنی دارد:
بیشتر آسیب پذیری های امنیتی به دلیل برنامه نویسی ضعیف و معماری ضعیف است . یک مثال آن تزریق SQL درون سایت است. این موارد به خوبی در لیست هایی که توسط CWE ، و مرکز فوریت های رایانه ای SEI / Computer (CERT) در دانشگاه کارنگی ملون ثبت شده است .
ارزیابی امنیت حداقل نیاز به بررسی بهترین روشها و خصوصیات فنی زیر دارد:
قابلیت نگه داری شامل مفاهیم قطعه بندی کد ، قابل درک بودن ، قابلیت تغییر ، قابلیت آزمایش ، قابلیت استفاده مجدد و قابلیت انتقال از تیم توسعه به تیم دیگر است. این موارد به عنوان مسائل مهم در سطح کد معرفی نمی‌شوند. در عوض ، قابلیت نگهداری ضعیف معمولاً نتیجه هزاران مورد نقض جزئی در مستند سازی ، استراتژی اجتناب از پیچیدگی و شیوه های اصلی برنامه نویسی است که باعث می شود تفاوت بین کد تمیز و آسان برای خواندن و کدهای شلوغ و سخت باشد .
ارزیابی قابلیت نگه داری نیاز به بررسی روشها و خصوصیات فنی زیر دارد:
قابلیت نگه داری به مفهوم بدهی فنی Ward Cunningham است ، که بیانگر هزینه های ناشی از عدم نگهداری صحیح است. دلایل پایین بودن قابلیت نگه داری را می توان به عنوان جسور در مقابل محتاطانه و عمدی در مقابل غیرعمد طبقه بندی کرد ، و اغلب منشأ آنها در ناتوانی توسعه دهندگان ، کمبود وقت ، بی دقتی و اختلاف آنها در هزینه ها و منافع است.
اندازه گیری اندازه نرم‌افزار مستلزم جمع آوری کامل کد منبع از جمله اسکریپت های ساختار پایگاه داده ، سورس کد تغییر داده ها ، کامپوننت ها ، فایل های پیکربندی و غیره است. در واقع دو نوع اندازه نرم‌افزار برای اندازه گیری وجود دارد ، اندازه فنی و اندازه کاربردی:
استاندارد اندازه گیری تجزیه و تحلیل Function Point توسط گروه کاربری بین‌المللی نقطه عملکرد (IFPUG) پشتیبانی می شود. این موضوع می تواند در مراحل اولیه چرخه توسعه نرم‌افزار اعمال شود و به خطوط کد وابسته نیست.
از زمان شروع تحلیل سطح تابع پذیری ، تغییرات زیادی ایجاد شده است و تکنیک های اندازه گیری کاربردی گسترش یافته است ، اقداماتی نظیر COSMIC ، NESMA ، Use Case Points ، FP Lite ، FP . با این حال ، سطح تابع پذیری دارای سابقه آماری دقیق است و از آن به عنوان واحد مشترک اندازه گیری کار در مدیریت توسعه بیشمار برنامه (ADM) یا مشاغل برون سپاری یاد می شود.
یکی از محدودیت های متداول در مورد روش Function Point این است که این یک فرایند دستی است و بنابراین می تواند در پروژه های بزرگ مانند توسعه برنامه یا مشاغل برون سپاری پرهزینه باشد. این جنبه منفی استفاده از روش شناسی رهبران فناوری اطلاعات را به ایجاد کنسرسیوم برای معرفی استاندارد برای خودکارسازی اندازه گیری کیفیت نرم‌افزارتشویق کرد، در حالی که IFPUG همچنان بر فعالیت های دستی تاکید دارد.
خطاهای برنامه نویسی بحرانی شیوه های بد معماری یا کد نویسی هستند که منجر به خطر اختلال در تجارت می شوند. این خطاها اغلب به فناوری وابسته هستند و به اهداف و ریسکهای کسب و کار وابستگی زیادی دارند.
خطاهای برنامه نویسی بحرانی همچنین می توانند براساس مشخصات CISQ طبقه بندی شوند :
پیشنهادهای جدیدتر برای مدل های کیفیت مانند Squale و Quamoco از یکپارچه سازی در تعریف ویژگی های کیفیت و اندازه گیری کیفیت استفاده می کنند. با تجزیه ویژگی های کیفیتی یا حتی تعریف لایه های اضافی ، ویژگی های پیچیده و انتزاعی کیفیت (مانند قابلیت اطمینان یا قابلیت نگهداری ) قابل کنترل تر و قابل اندازه گیری می شوند. این مدل های جدید کیفیت در زمینه های صنعتی استفاده شده‌اند اما تا کنون به صورت گسترده و عمومی مورد توجه قرار نگرفته اند.