در مبحث مهندسی نرمافزار، کیفیت نرمافزار به دو رده مرتبط اما مجزای زیر اشاره دارد:
بسیاری از جنبههای کیفیت ساختاری نرمافزار تنها با تحلیل و بررسی ساختار درونی و کد آن در سطح واحد، سطح تکنولوژی و سطح سیستم بررسی میشود. اما برخی خصوصیات ساختاری مثل قابلیت استفاده بودن فقط به صورت پویا قابل ارزیابی میباشند .(ارزیابی کاربران و افرادی که با نرمافزار سر و کار دارند حتی اگر با یک نسخهٔ پروتوتایپ روبرو باشند) جنبههای دیگر مثل قابلیت اطمینان ممکن است علاوه بر نرمافزار، سختافزار را نیز در یر بگیرد. پس میتوان آن را به صورت ایستا و پویا ارزیابی کرد.
کیفیت عملیاتی نرمافزار معمولاً به صورت پویا بررسی میشود اما میتوان بررسیهای ایستا هم برای آن در نظر گرفت.
به لحاظ تاریخی ساختار، دستهبندی و مطالعهٔ ویژگیها و معیارهای مورد استفاده در مدیریت کیفیت نرمافزار از مدلهای ISO 9126-3 و ISO 2500:2005 سرچشمه میگیرد. بر اساس این مدلها کنسرسیوم کیفیت نرمافزارهای آی تی پنج خصوصیت اصلی برای یک محصول نرمافزاری دارای ارزش بازاری را معرفی کرد: قابلیت اطمینان، کارایی، امنیت، قابلیت نگه داری و اندازه کافی
اندازهگیری کیفیت نرمافزار در اصل بررسی میزان تطابق نرمافزار با این پنج ویژگی است. اندازهگیری کیفیت نرمافزار در اصل یک نمرهٔ کیفی یا کمی یا ترکیبی از هر دو و سپس یک سیتم وزنگیری که اولویتها را مشخص میکند میباشد. این روش با تجزیه و تحلیل خطاهای برنامهنویسی که منجر به فاجعه میشود خاتمه مییابد. این خطاها در سطح سیستم تا ۹۰ درصد از مشکلات پروژه را نشان میدهند. در حالی که در سطح واحد ۱۰ درصد از مشکلات تولید را شامل میشود. در نتیجه کیفیت کد بدون بدون چهارچوب کل سیستم دارای ارزش محدود است.
برای دیدن، بررسی، آنالیز و ارتباطات اندازهگیری کیفیت نرمافزار، مفاهیم و تکنیکهای تجسم کردن اطلاعات، بسیار مفید است بهخصوص وقتی که چندین فاکتور مختلف با یکدیگر مرتبط باشند. به عنوان مثال نقشهٔ نرمافزار اطلاعات مربوط به توسعه نرمافزار، کیفیت نرمافزار و دینامیک سیستم را مورد بررسی قرار میدهد.
اندازهگیری کیفیت نرمافزار حداقل با دو هدف اساسی صورت میگیرد. مدیریت ریسک و مدیریت هزینه
مدیریت ریسک: خرابی نرمافزار مشکلاتی بیش از ناراحتی و نگرانی ایجاد کردهاست. مشکلات نرمافزار فجایای انسانی ایجاد کردهاست. این مشکلات میتواند از طراحی رابط کاربری ضعیف تا حطاهای اساسی نرمافزار در کد نویسی متغیر باشد. مثالهایی از از مشکلات نرمافزاری که به مرگ منجر شدهاند در مقاله دکتر لوسون موجود است. این مثالها شامل نرمافزارهایی که در دستگاههای پزشکی و دیگر دستگاههای حساس وجود دارند، میباشد ."[مهندسانی که نرمافزارهای جاسازی شده را مینویسند] برنامههای جاوارا میبینند که یک سوم ثانیه برای انجام جمع آوری زباله و به روزرسانی رابط کاربری، زمان صرف میکنند و آنها هواپیماهای در حال سقوط از آسمان را پیش بینی میکنند. ". در ایالات متحده، اداره حمل و نقل هوایی فدرال (FAA)، با ارائهٔ سرویس صدور گواهینامه هواپیما FAA، برنامههای نرمافزاری، قوانین، راهنمایی و آموزشهایی ارائه میدهد، که تأثیر آن بر روی محصولات هواپیمایی است.
مدیریت هزینه: همانند زمینههای دیگر مهندسی، برنامه ای با کیفیت ساختاری مناسب هزینهٔ نگه داری، یادگیری و تغییر بسیار کمتری دارد. آمار نشان میدهد که کیفیت ساختاری ضعیف در برنامههای تجاری (مانند برنامهریزی منابع سازمانی (ERP)، مدیریت ارتباط با مشتری (CRM) یا سیستمهای مالی با پردازشهای بزرگ) باعث افزایش هزینهها میشود و از طرفی باعث ایجاد دوباره کاری (حتی تا ۴۵ درصد از زمان توسعه در برخی سازمانها) میشود. علاوه بر این، کیفیت ساختاری ضعیف به دلیل ارائهٔ دادههای غلط، توقف برنامهها و مشکلات امنیتی و پردازشی باعص ایجاد اختلال در عملکرد سازمانها میشود.
با این حال، بین اندازهگیری و بهبود کیفیت نرمافزار در یک سیستم جاسازی شده (با تأکید بر مدیریت ریسک) و کیفیت نرمافزار در نرمافزارهای تجاری (با تأکید بر هزینه و مدیریت پایداری) تفاوت وجود دارد. سیستمهای جاسازی شده در حال حاضر اغلب شامل یک رابط کاربری هستند و طراحان آنها به همان اندازه که همتایان خودروی برنامههای تجاری متمرکز هستند، نگران قابلیت استفاده و بهرهوری کاربر هستند. گروه دوم به دنبال سیستم ERP یا CRM به عنوان یک سیستم عصبی شرکتی هستند که زمان و عملکرد آن برای رفاه شرکت مهم است. این همگرایی بیشتر در پردازشهای موبایل قابل مشاهده است: کاربری که به یک برنامه ERP در تلفن هوشمند خود دسترسی پیدا میکند، از بین لایههای نرمافزار به کیفیت بستگی دارد.
در حال حاضر هر دو نوع نرمافزار از معماری چند لایه ای و پیشرفته استفاده میکنند، بنابراین تجزیه و تحلیل و اندازهگیری کیفیت نرمافزار باید به صورت جامع و مداوم مدیریت شود، و از هدف نهایی یا استفاده نهایی نرمافزار جدا شوند.
تعاریف مختلف زیادی از کیفیت وجود دارد. در برخی تعاریف، کیفیت "توانایی یک محصول نرمافزاری برای مطابقت با الزامات " است. (طبق ISO / IEC 9001) در حالی که برای دیگران میتواند مترادف با "ارزش مندی برای مشتری" (Highsmith، ۲۰۰۲) باشد.
اولین تعریفی از کیفیت که تاریخ به یاد میآورد از شوهارت در آغاز قرن بیستم است: دو جنبه متداول از کیفیت وجود دارد: یکی به عنوان یک واقعیت عینی مستقل از وجود انسان است. دیگری با آنچه در نتیجه واقعیت عینی فکر میکنیم، احساس میکنیم یا احساس میشود، ارتباط دارد. به عبارت دیگر، یک کیفیت ذهنی وجود دارد. (شیوارت).
Kitchenham و Pfleeger، در ادامه آموزههای دیوید گاروین، پنج دیدگاه مختلف در مورد کیفیت را بیان میکنند:
این مشکل ذاتی در تعریف کیفیت یک محصول، هر نوع محصول، توسط استاد والتر شوگارت بیان شدهاست.
مشکل تعیین کیفیت، مشکل تبدیل نیازهای آینده کاربر به ویژگیهای قابل اندازهگیری است، به گونه ای که میتوان محصولی را طراحی کرد که رضایت را در قبال مبلغی که کاربر پرداخت میکند به او هدیه بدهد. این کار آسانی نیست و به محض احساس احساس موفقیت، متوجه میشویم که نیازهای مصرفکننده تغییر کردهاست، رقبای دیگر وارد میدان شدهاند و …
کیفیت از دید مشتری مهم است، نه کیفیت از دید یک مهندس، نه کیفیت از دید بازاریاب و نه مدیریت. این کیفیت میتواند تجربه واقعی مشتری با محصول یا خدمات باشد که مطابق با خواستههای وی آگاهانه یا صرفاً احساسی بیان شدهاست و از لحاظ فنی عملیاتی یا کاملاً ذهنی اندازهگیری میشود و همیشه نشان دهنده یک هدف اساسی در بازار رقابتی است.
واژه کیفیت معانی مختلفی دارد. دو تا از این معانی را بررسی میکنیم:
- کیفیت شامل ویژگیهای محصول است که نیاز مشتری را برآورده میکند و در نتیجه رضایت مندی از محصول را فراهم میکند.
- کیفیت شامل رفع نواقص است.
با این وجود، میتوان به عنوان یک تعریف کوتاه از کیفیت گفت: کیفیت مناسب بودن یک محصول برای استفاده است.
اگرچه "کیفیت یک ویژگی ادراکی، بسته به مورد و تا حدودی ذهنی است و ممکن است افراد مختلف برداشتهای مختلفی از آن بکنند " (همانطور که در مقاله در مورد کیفیت در تجارت ذکر شدهاست)، کیفیت ساختاری نرمافزار بهطور واضح توسط کنسرسیوم کیفیت نرمافزارهای حوزهٔ آی تی (CISQ) مشخص شدهاست. با هدایت بیل کورتیس، نویسنده چارچوب قابلیت مدل بلوکی و مدیر CISQ و Capers Jones، مشاور برجسته CISQ , CISQ پنج ویژگی اصلی مطلوب یک قطعه از نرمافزار مورد نیاز برای تأمین ارزش تجاری را تعریف کردهاست. در مدل خانه کیفیت، اینها مواردی هستند که باید به آنها برسید:
کیفیت عملکردی نرمافزار به عنوان تطابق آن با الزامات کاربردی به صورت صریح بیان شده تعریف شدهاست، به عنوان مثال با استفاده از تجزیه و تحلیل صدای مشتری (بخشی از طراحی جعبه ابزار Six Sigma و / یا مستند از طریق موارد استفاده) و سطح رضایت کاربر نهایی استفاده میشود. مورد دوم قابلیت استفاده است اینکه چقدر رابط کاربری بصری و پاسخگو است، چقدر عملیات ساده و پیچیده را میتوان انجام داد و پیامهای خطای مفید چقدر است. بهطور معمول، شیوهها و ابزارهای آزمایش نرمافزار اطمینان حاصل میکنند که یک تکه از نرمافزار مطابق با طراحی اصلی، تجربه کاربری برنامهریزی شده و تست پذیری مطلوب رفتار میکند.
ویژگی ساختاری دوگانه کیفیت نرمافزار با مدل ارائه شده در کد کامل استیو مک کانل که ویژگیهای نرمافزار را به دو قسمت تقسیم میکند سازگار است: ویژگیهای کیفیت داخلی و خارجی. ویژگیهای کیفیت خارجی آن بخشهایی از محصول است که با کاربران آن روبرو میشود و کیفیت داخلی برعکس آن است.
یکی از مشکلات تعیین کیفیت این است که «همه احساس میکنند که آن را میفهمند» و تعاریف دیگر از کیفیت نرمافزار میتواند مبتنی بر گسترش مفهوم کیفیتی که در تجارت استفاده میشود باشد.
دکتر تام د مارکو اظهار داشتهاست که «کیفیت محصول تابعی از تغییر جهان برای بهتر شدن» یعنی کیفیت عملکرد و رضایت کاربر در تعیین کیفیت نرمافزار از کیفیت ساختاری مهمتر است.
تعریفی دیگر که توسط جرالد وینبرگ در مدیریت کیفیت نرمافزار ایجاد شدهاست: تفکر سیستمی این است که "کیفیت برای برخی از افراد ارزش دارد". این تعریف تأکید میکند که کیفیت ذاتاً ذهنی است، افراد مختلف کیفیت یک نرمافزار یکسان را متفاوت تجربه میکنند. یکی از نقاط قوت این تعریف سؤالاتی است که تیمهای نرمافزاری را برای بررسی آنها دعوت میکند، سوالاتی از قبیل: "افرادی که میخواهیم به نرمافزار ما ارزش دهند چه کسانی هستند؟" و "چه چیزی برای آنها با ارزش خواهد بود؟".
اگرچه مفاهیم ارائه شده در این بخش برای هر دو کیفیت ساختاری و کاربردی نرمافزار کاربرد دارد، اندازهگیری دومی اساساً از طریق آزمایش انجام میشود [به مقاله اصلی مراجعه کنید: تست نرمافزار ].
اندازهگیری کیفیت نرمافزار درواقع بررسی این است که نرمافزار تا چه میزان خصوصیات مورد انتظار را دارد. این امر میتواند از طریق روشهای کیفی یا کمی یا ترکیبی از هر دو انجام شود. در هر دو مورد، برای هر خصوصیت مطلوب، مجموعه ای از ویژگیهای قابل اندازهگیری وجود دارد که وجود آنها در یک قطعه نرمافزار یا سیستم منجر به وجود ویژگی مورد نظر میشوند. به عنوان مثال، یک ویژگی مرتبط با قابلیت حمل، تعداد عبارات وابسته به هدف در یک برنامه است. بهطور دقیق تر، با استفاده از رویکرد استقرار عملکرد کیفیت، این ویژگیهای قابل اندازهگیری "چگونگی"هایی هستند که باید اجرا شوند تا بتوانند "آنچه راً در تعریف کیفیت نرمافزار بالا را فعال کنید.
ساختار، طبقهبندی و اصطلاحات ویژگیها و معیارهای قابل استفاده برای مدیریت کیفیت نرمافزار از دو مدل ISO 9126-3 و ISO / IEC 25000: 2005 گرفته شدهاست. تمرکز اصلی روی کیفیت ساختاری داخلی است. زیر شاخهها برای رسیدگی به موارد خاص مانند معماری برنامه کاربردی تجاری و خصوصیات فنی مانند دسترسی به دادهها و دستکاریها دادهها ایجاد شدهاند.
ارتباط بین خطاهای برنامهنویسی و نقص تولید نشان میدهد که خطاهای کد اصلی ۹۲٪ از کل خطاهای موجود در سورس کد را تشکیل میدهد. این تعداد بسیار زیاد مشکلات مربوط به کد در نهایت تنها ۱۰٪ از نقص تولید را به خود اختصاص میدهد. روشهای بد مهندسی نرمافزار در سطح معماری تنها ۸٪ از نقص کل را شامل میشود، اما بیش از نیمی از تلاش صرف شده برای رفع مشکلات را انجام میدهد و منجر به ۹۰٪مشکلات جدی در مورد قابلیت اطمینان، امنیت و کارایی در تولید میشود.
بسیاری از روشهای اندازهگیری موجود، عناصر ساختاری برنامه را که منجر به تجزیه سورس کد به دستورالعملهای واحد است، شمارش میکنند (پارک، ۱۹۹۲)، نشانه (Halstead، ۱۹۷۷)، ساختارهای کنترل (McCabe، ۱۹۷۶)، و اشیاء (Chidamber & Kemerer، ۱۹۹۴).
اندازهگیری کیفیت نرمافزار، تعیین وسعت سیستم یا نرمافزار در این ابعاد است. تجزیه و تحلیل را میتوان با استفاده از یک رویکرد کیفی یا کمی یا ترکیبی از هر دو انجام داد تا نمای کلی (با استفاده از میانگین (های) وزنی که نشان دهنده اهمیت نسبی بین عوامل مطرح شده میباشد) ارائه شود.
این دیدگاه از کیفیت نرمافزار در یک روش قدم به قدم باید با شناسایی خطاهای برنامهنویسی بحرانی گسسته تکمیل شود. این خطاها ممکن است یک مورد آزمایشی را از بین نبرند، اما در شرایط خاص میتوانند منجر به وقوع فاجعه بار، تخریب عملکرد، نقض امنیت، خراب کردن داده و مشکلات بی شمار دیگری شوند (Nygard، ۲۰۰۷). یک سیستم واقعی و آماده استفاده، بدون در نظر گرفتن امتیاز آن بر اساس اندازهگیریهای کل، یک سیستم مناسب بهشمار نمیآید.
اندازهگیری ویژگیهای مهم برنامه شامل اندازهگیری ویژگیهای ساختاری معماری برنامه، برنامهنویسی و مستندات درون کد است؛ بنابراین، هر مشخصه تحت تأثیر ویژگیهایی در سطوح متعدد انتزاع در برنامه قرار دارد و همه این موارد را باید در محاسبه اندازهگیری خصوصیات در صورتی که پیشبینی کننده ارزشمندی از نتایج کیفی است که در کسب و کار تأثیر میگذارد، لحاظ کرد.
تحلیل و اندازهگیری کیفیت ساختاری از طریق تجزیه و تحلیل سورس کد، معماری، چارچوب نرمافزار، شمای پایگاه داده در رابطه با اصول و معیارهای تشکیل دهنده معماری مفهومی و منطقی سیستم انجام میشود. این موضوع با تجزیه و تحلیل کدهای اساسی، محلی و مؤلفه ای سطحی که معمولاً توسط ابزارهای توسعه انجام میشود میباشد.
علل اصلی ضعف در قابلیت اطمینان، عدم رعایت شیوههای خوب معماری و رمزگذاری است. این موضوع با اندازهگیری ویژگیهای کیفی استاتیک برنامه قابل تشخیص است. ارزیابی ویژگیهای استاتیک زیربنای قابل اطمینان بودن برنامه، تخمین سطح ریسک تجاری و احتمال بروز نقص احتمالی برنامه را در هنگام بهرهبرداری فراهم میکند.
ارزیابی قابلیت اطمینان مستلزم بررسی حداقل روشهای مهندسی نرمافزار زیر و بهترین خصوصیات فنی است:
بسته به نوع معماری برنامه و مؤلفههای مورد استفاده (مانند کتابخانههای خارجی یا چارچوبها)، موارد شخصی و سفارشی دیگر هم باید تعریف شوند تا از ارزیابی بهتری از قابلیت اطمینان نرمافزار داشته باشیم.
مانند اطمینان، علل ناکارآمدی عملکرد اغلب در موارد نقض معماری و برنامهنویسی خوب است که میتوان با اندازهگیری خصوصیات کیفیت استاتیک یک برنامه آن هارا شناسایی کرد. این ویژگیهای استاتیکی، گلوگاههای عملکرد احتمالی عملیاتی و مشکلات مقیاس پذیری در آینده را پیشبینی میکنند، به ویژه برای برنامههایی که به سرعت اجرای بالایی را برای دستیابی به الگوریتمهای پیچیده یا حجم عظیم دادهها نیاز دارند.
ارزیابی کارایی نیاز به بررسی حداقل روشهای مهندسی نرمافزار زیر و ویژگیهای فنی دارد:
بیشتر آسیبپذیریهای امنیتی به دلیل برنامهنویسی ضعیف و معماری ضعیف است. یک مثال آن تزریق 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 از یکپارچه سازی در تعریف ویژگیهای کیفیت و اندازهگیری کیفیت استفاده میکنند. با تجزیه ویژگیهای کیفیتی یا حتی تعریف لایههای اضافی، ویژگیهای پیچیده و انتزاعی کیفیت (مانند قابلیت اطمینان یا قابلیت نگهداری) قابل کنترل تر و قابل اندازهگیری میشوند. این مدلهای جدید کیفیت در زمینههای صنعتی استفاده شدهاند اما تا کنون به صورت گسترده و عمومی مورد توجه قرار نگرفتهاند.