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

در مبحث مهندسی نرم‌افزار، کیفیت نرم‌افزار به دو رده مرتبط اما مجزای زیر اشاره دارد:
 کیفیت عملیاتی نرم‌افزار (Software Functional Quality): شاخصی جهت نشان دادن میزان تطابق نرم‌افزار با نیازمندی‌های عملیاتی تعریف شده برای نرم‌افزار.
 کیفیت ساختاری نرم‌افزار (Software Structural Quality): که منعکس کننده میزان دست یابی به نیازمندی‌های غیر عملیاتی مانند استحکام (Robustness) و قابلیت نگهداری (Maintainability) نرم‌افزار است.
بسیاری از جنبه های کیفیت ساختاری نرم‌افزار تنها با تحلیل و بررسی ساختار درونی و کد آن در سطح واحد ، سطح تکنولوژی و سطج سیستم بررسی می شود . اما برخی خصوصیات ساختاری مثل قابلیت استفاده بودن فقط به صورت پویا قابل ارزیابی می باشند .(ارزیابی کاربران و افرادی که با نرم‌افزار سر و کار دارند حتی اگر با یک نسخه ی پروتوتایپ روبرو باشند) جنبه های دیگر مثل قابلیت اطمینان ممکن است علاوه بر نرم‌افزار ، سخت افزار را نیز در یر بگیرد .پس می توان آن را به صورت ایستا و پویا ارزیابی کرد .

کیفیت عملیاتی نرم‌افزار معمولاً به صورت پویا بررسی می شود اما می توان بررسی های ایستا هم برای آن در نظر گرفت .

به لحاظ تاریخی  ساختار ، دسته بندی  و مطالعه ی ویژگی ها و معیارهای مورد استفاده در مدیریت کیفیت نرم‌افزار از مدل های ISO 9126-3  و ISO 2500:2005  سرچشمه می گیرد . بر اساس این مدل ها کنسرسیوم کیفیت نرم‌افزار های آی تی پنج خصوصیت اصلی برای یک محصول نرم‌افزاری دارای ارزش بازاری را معرفی کرد : قابلیت اطمینان ، کارآیی ، امنیت ، قابلیت نگه داری و اندازه کافی

اندازه گیری کیفیت نرم‌افزار در اصل بررسی میزان تطابق نرم‌افزار با این پنج ویژگی است .اندازه گیری کیفیت نرم‌افزار در اصل یک نمره ی کیفی یا کمی یا ترکیبی از هر دو و سپس یک سیتم وزن گیری که اولویت ها را مشخص می کند می باشد .این روش با تجزیه و تحلیل خطاهای برنامه نویسی که منجر به فاجعه می شود خاتمه می یابد .این خطاها در سطح سیستم تا ۹۰ درصد از مشکلات پروژه را نشان می دهند .در حالی که در سطح واحد ۱۰ درصد از مشکلات تولید را شامل می شود .در نتیجه کیفیت کد بدون بدون چهارچوب کل سیستم دارای ارزش محدود است .

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

انگیزه  
اندازه گیری کیفیت نرم‌افزار حداقل با دو هدف اساسی  صورت می گیرد . مدیریت ریسک و مدیریت هزینه

مدیریت ریسک : خرابی نرم‌افزار مشکلاتی بیش از ناراحتی و نگرانی ایجاد کرده است .مشکلات نرم‌افزار فجایای انسانی ایجاد کرده است . این مشکلات میتواند از طراحی رابط کاربرب ضعیف تا حطاهای اساسی نرم‌افزار در کد نویسی متغیر باشد .مثال هایی از از مشکلات نرم‌افزاری که به مرگ منجر شده اند در مقاله دکتر لوسون موجود است . این مثال ها شامل نرم‌افزار هایی که در دستگاه های پزشکی و دیگر دستگاه های حساس وجود دارند ، می باشد ."[مهندسانی که نرم‌افزارهای جاسازی شده را می نویسند] برنامه های جاوارا می بینند  که یک سوم ثانیه برای انجام جمع آوری زباله و به روزرسانی رابط کاربری ، زمان صرف میکنند و آنها هواپیماهای در حال سقوط از آسمان را پیش بینی می کنند. "  .  در ایالات متحده ، اداره حمل و نقل هوایی فدرال (FAA) ،با ارائه ی  سرویس صدور گواهینامه هواپیما FAA ، برنامه های نرم‌افزاری ، قوانین  ، راهنمایی و آموزش  هایی ارائه می دهد ،  که تأثیر آن بر روی محصولات هواپیمایی است .

مدیریت هزینه: همانند زمینه های دیگر مهندسی  ، برنامه ای با کیفیت ساختاری مناسب هزینه ی نگه داری ، یادگیری و تغییر بسیار کمتری دارد . آمار نشان می دهد که کیفیت ساختاری ضعیف در برنامه های  تجاری  (مانند برنامه ریزی منابع سازمانی (ERP) ، مدیریت ارتباط با مشتری (CRM) یا سیستم های مالی با پردازش های بزرگ) باعث افزایش هزینه ها می شود و از طرفی باعث ایجاد دوباره کاری  (حتی تا  45 درصد از زمان توسعه در برخی سازمانها) می شود  .  علاوه بر این ، کیفیت ساختاری ضعیف به دلیل ارائه ی داده های غلط ، توقف برنامه ها  و مشکلات امنیتی و پردازشی  باعص ایجاد اختلال در عملکرد سازمان ها می شود .

با این حال ،  بین اندازه گیری و بهبود کیفیت نرم‌افزار در یک سیستم جاسازی شده  (با تأکید بر مدیریت ریسک) و کیفیت نرم‌افزار در نرم‌افزارهای تجاری (با تأکید بر هزینه و مدیریت پایداری) تفاوت وجود دارد .  سیستم های جاسازی شده در حال حاضر اغلب شامل یک رابط کاربری هستند و طراحان آنها به همان اندازه  که  همتایان خودروی برنامه های تجاری متمرکز هستند ، نگران قابلیت استفاده و بهره وری کاربر هستند. گروه دوم  به دنبال سیستم ERP یا CRM به عنوان یک سیستم عصبی شرکتی هستند که زمان و عملکرد آن برای رفاه شرکت مهم است.  این همگرایی بیشتر در پردازش های موبایل قابل مشاهده است: کاربری که به یک برنامه ERP در تلفن هوشمند خود دسترسی پیدا می کند ، از بین لایه های نرم‌افزار به کیفیت بستگی دارد.

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

تعاریف  
تعاریف مختلف زیادی از کیفیت وجود دارد. در برخی تعاریف ، کیفیت  "توانایی یک محصول نرم‌افزاری برای مطابقت با الزامات " است.  ( طبق ISO / IEC 9001 ) در حالی که برای دیگران می تواند مترادف با "ارزش مندی برای مشتری" (Highsmith، 2002)  باشد.

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

پنج دیدگاه Kitchenham ، Pfleeger و Garvin در کیفیت 
Kitchenham و Pfleeger ، در  ادامه آموزه های دیوید گاروین ،  پنج دیدگاه مختلف در مورد کیفیت را بیان می کنند:
 دیدگاه آرمان گرایانه که  به جنبه متافیزیکی کیفیت می پردازد.  در این دیدگاه ،  کیفیت ، "چیزی است که ما به عنوان یک ایده‌آل برایش تلاش می کنیم ، اما ممکن است هرگز به طور کامل اجرا نشود".   به سختی می توان تعریف کرد .  
 دیدگاه کاربر مربوط به مناسب بودن محصول برای استفاده است .دیدگاه  آرمان گرایانه یک دیدگاه ذاتی است ، اما دیدگاه کاربر به‌طور خاص و مشخص تر از ویژگی های محصول که پاسخگوی نیاز کاربران باشد برنامه ریزی می شود . 
 چشم انداز تولید ، کیفیت را مطابق با الزامات و اصول  نشان می دهد.  این جنبه از کیفیت توسط استانداردهایی مانند ISO 9001 تأکید می شود ، که کیفیت را "مجموعه ای از خصوصیات بالقوه " تعریف می کند (ISO / IEC 9001  ).
 چشم انداز محصول که بیان می کند که  می توان با اندازه گیری ویژگیهای ذاتی محصول ، کیفیت آن را ارزیابی کرد.
 چشم انداز نهایی کیفیت ،براساس  ارزش است.  این دیدگاه بیان می کند که دیدگاههای مختلف کیفیت ممکن است اهمیت و یا ارزش متفاوتی را برای ذینفعان مختلف داشته باشد.

کیفیت نرم‌افزار مطابق Deming 
این مشکل ذاتی در تعریف کیفیت یک محصول ، هر نوع محصول ، توسط استاد والتر شوگارت بیان شده است.

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

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

کیفیت نرم‌افزار مطابق Juran 
واژه کیفیت معانی مختلفی دارد . دو تا از این معانی را بررسی می کنیم :

1- کیفیت شامل ویژگی های محصول است که نیاز مشتری را برآورده می کند و در نتیجه رضایت مندی از محصول را فراهم می کند.

2. کیفیت شامل رفع نواقص است .

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

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

 قابلیت اطمینان
 یک ویژگی برای مقاومت و استحکام ساختاری.  قابلیت اطمینان سطح ریسک و احتمال خرابی های احتمالی را اندازه گیری می کند.  همچنین ضعف های موجود را به دلیل تغییراتی که در نرم‌افزار ایجاد شده است ("پایداری آن" مطابق با ISO) اندازه گیری می کند.  هدف از بررسی  قابلیت اطمینان ، کاهش و جلوگیری از خرابی برنامه ، قطع برنامه ها و خطاهایی است که به طور مستقیم بر کاربران تأثیر می گذارد است .
 
 بهره وری
 سورس کد  و ویژگی های معماری نرم‌افزار مواردی هستند که عملکرد برنامه در  حالت اجرا را تضمین می کنند. بهره وری به ویژه برای برنامه های کاربردی در محیط های با سرعت بالا مانند پردازش الگوریتمی یا تراکنشی که مقیاس پذیری و بهره وری به صورت موازی مهم هستند کاربرد دارد .  تجزیه و تحلیل بهره وری  سورس کد و مقیاس پذیری ،تصویر روشنی از تاثیر کاهش بهره وری روی رضایت کاربر ارائه می دهد .
 
 امنیت
 آزمونی از احتمال نقض امنیت به  دلیل شیوه های نادرست برنامه نویسی و معماری.  این موضوع ،  خطر روبرو شدن با آسیب های اساسی  که به تجارت آسیب می رساند را کم می کند. 
 
 قابلیت نگهداری
 قابلیت نگه داری،  شامل مفهوم سازگاری ، قابلیت حمل و انتقال (از یک تیم توسعه به تیم دیگر) است.  اندازه گیری و نظارت بر قابلیت نگه داری  ، این قابلیت برای مواردی که  در آن تغییرات توسط برنامه های زمانی محدود به بازار انجام می شود و در جایی که مهم است فناوری اطلاعات پاسخگو به تغییرات محور در تجارت باشد.  همچنین کنترل هزینه های نگهداری نیز ضروری است.
 
 اندازه
 در حالی که اندازه به خودی خود از ویژگی های کیفیت  نیست ،اما به وضوح بر حفظ آن تأثیر می گذارد.  در کنار ویژگی های کیفیت که بررسی شد ، اندازه نرم‌افزار می تواند برای ارزیابی میزان کار تولید شده توسط تیم ها و همچنین بهره وری آنها از طریق داده های  زمانی و سایر معیارهای مرتبط با SDLC مورد استفاده قرار گیرد .

کیفیت عملکردی نرم‌افزار به عنوان تطابق آن با الزامات کاربردی به صورت  صریح بیان شده تعریف شده است ، به عنوان مثال با استفاده از تجزیه و تحلیل صدای مشتری (بخشی از طراحی جعبه ابزار Six Sigma و / یا مستند از طریق موارد استفاده ) و سطح رضایت کاربر نهایی استفاده می شود.  مورد دوم  قابلیت استفاده است  اینکه  چقدر رابط کاربری بصری و پاسخگو است ، چقدر عملیات ساده و پیچیده را می توان انجام داد و پیام های خطای مفید چقدر است.  به طور معمول ، شیوه ها و ابزارهای آزمایش نرم‌افزار اطمینان حاصل می کنند که یک تکه از نرم‌افزار مطابق با طراحی اصلی ، تجربه کاربری برنامه ریزی شده و تست پذیری مطلوب رفتار می کند.

ویژگی ساختاری  دوگانه کیفیت نرم‌افزار با مدل ارائه شده در کد کامل استیو مک کانل که ویژگی های نرم‌افزار را به دو قسمت تقسیم می کند سازگار است: ویژگی های کیفیت داخلی و خارجی.  ویژگی های کیفیت خارجی آن بخش هایی از محصول است که با کاربران آن روبرو می شود و کیفیت داخلی برعکس آن است .

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

دکتر تام د مارکو اظهار داشته است که "کیفیت محصول تابعی از تغییر جهان برای بهتر شدن"  یعنی   کیفیت عملکرد و رضایت کاربر در تعیین کیفیت نرم‌افزار از کیفیت ساختاری مهمتر است.

تعریفی دیگر که توسط جرالد وینبرگ در مدیریت کیفیت نرم‌افزار ایجاد شده است: تفکر سیستمی  این است که "کیفیت برای برخی از افراد ارزش دارد".    این تعریف تأکید می کند که کیفیت ذاتاً ذهنی است ،  افراد مختلف کیفیت یک نرم‌افزار یکسان را متفاوت تجربه می کنند.  یکی از نقاط قوت این تعریف سؤالاتی است که تیمهای نرم‌افزاری را برای بررسی آنها دعوت می کند ، سوالاتی از قبیل :  "افرادی که می خواهیم به نرم‌افزار ما ارزش دهند چه کسانی هستند؟"  و "چه چیزی برای آنها با ارزش خواهد بود؟".

اندازه گیری 
اگرچه مفاهیم ارائه شده در این بخش برای هر دو کیفیت ساختاری و کاربردی نرم‌افزار کاربرد دارد ، اندازه گیری دومی اساساً از طریق آزمایش انجام می شود [به مقاله اصلی مراجعه کنید: تست نرم‌افزار ].

مقدمه 

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

ساختار ، طبقه بندی و اصطلاحات ویژگی ها و معیارهای قابل استفاده برای مدیریت کیفیت نرم‌افزار از دو مدل ISO 9126-3 و  ISO / IEC 25000: 2005 گرفته  شده است.  تمرکز اصلی روی کیفیت ساختاری داخلی است.  زیر شاخه ها برای رسیدگی به موارد خاص مانند معماری برنامه کاربردی تجاری و خصوصیات فنی مانند دسترسی به داده ها و دستکاری ها داده ها  ایجاد شده اند.

ارتباط  بین خطاهای برنامه نویسی و نقص تولید نشان می دهد که خطاهای کد اصلی 92٪ از کل خطاهای موجود در سورس کد  را تشکیل می دهد.  این تعداد بسیار زیاد مشکلات مربوط به کد در نهایت تنها 10٪ از نقص تولید را به خود اختصاص می دهد.  روشهای بد مهندسی نرم‌افزار در سطح معماری تنها 8٪ از نقص کل را شامل می شود ، اما بیش از نیمی از تلاش صرف شده برای رفع مشکلات را انجام می دهد و منجر به 90٪مشکلات جدی در مورد قابلیت اطمینان ، امنیت و کارایی در تولید می شود.

تجزیه و تحلیل مبتنی بر کد 
بسیاری ازروش های اندازه گیری موجود ، عناصر ساختاری برنامه را که منجر به تجزیه سورس کد به دستورالعمل های واحد است ، شمارش می کنند (پارک ، 1992) ،  نشانه (Halstead ، 1977) ،  ساختارهای کنترل (McCabe، 1976)، و اشیاء (Chidamber & Kemerer، 1994).

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

این دیدگاه از کیفیت نرم‌افزار در یک روش قدم به قدم  باید با شناسایی خطاهای برنامه نویسی بحرانی گسسته تکمیل شود.  این حطاها ممکن است یک مورد آزمایشی را از بین نبرند ، اما در شرایط خاص می توانند منجر به وقوع فاجعه بار ، تخریب عملکرد ، نقض امنیت ، خراب کردن داده  و مشکلات بی شمار دیگری شوند (Nygard، 2007).  یک سیستم واقعی  و آماده استفاده ، بدون در نظر گرفتن امتیاز آن بر اساس اندازه گیری های کل ، یک سیستم مناسب  به شمار نمی‌آید.

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

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

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

ارزیابی قابلیت اطمینان مستلزم بررسی حداقل روشهای مهندسی نرم‌افزار زیر و بهترین خصوصیات فنی است:
 شیوه های معماری کاربرد
 شیوه های برنامه نویسی
 پیچیدگی الگوریتم ها
 پیچیدگی شیوه های برنامه نویسی
 انطباق با برنامه نویسی شی گرا و ساختار یافته  (در صورت امکان)
 نسبت استفاده مجدد از الگوها
 برنامه نویسی کثیف
 استفاده از خطا و استثنا (برای همه لایه ها - GUI ، منطق و داده ها)
 طراحی چند لایه
 مدیریت محدودیت منابع
 نرم‌افزار از الگوهای جلوگیری می کند که منجر به رفتارهای غیر منتظره می شود
 نرم‌افزار مدیریت یکپارچگی و ثبات داده ها را کنترل می کند
 سطح پیچیدگی تبادلات

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

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

ارزیابی کارایی نیاز به بررسی حداقل روشهای مهندسی نرم‌افزار زیر و ویژگیهای فنی دارد:
 شیوه های معماری کاربرد
 تعامل مناسب با منابع گران قیمت و  یا منابع راه دور
 عملکرد دسترسی به داده ها و مدیریت داده ها
 مدیریت حافظه ، شبکه و فضای دیسک
 شیوه های برنامه نویسی
 انطباق با برنامه نویسی شی گرا و ساختار یافته (در صورت لزوم)
 انطباق با بهترین شیوه های برنامه نویسی SQL

امنیتی 
بیشتر آسیب پذیری های امنیتی به دلیل  برنامه نویسی ضعیف و معماری  ضعیف است . یک مثال آن  تزریق SQL درون سایت است.  این موارد  به خوبی در لیست هایی که توسط CWE ،  و مرکز فوریت های رایانه ای SEI / Computer (CERT) در دانشگاه کارنگی ملون ثبت شده است .

ارزیابی امنیت حداقل نیاز به بررسی بهترین روشها و خصوصیات فنی  زیر دارد:
 شیوه های معماری کاربرد
 انطباق طراحی چند لایه
 بهترین شیوه های امنیتی (اعتبار سنجی ورودی ، SQL Injection ، فیلمبرداری متقاطع سایت و غیره  )
 تمرین های برنامه نویسی (سطح کد)
 خطا و مدیریت استثنا
 بهترین شیوه های امنیتی (دسترسی به توابع سیستمی، کنترل دسترسی به برنامه ها)

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

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

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

اندازه نرم‌افزار 
اندازه گیری اندازه نرم‌افزار مستلزم جمع آوری کامل کد منبع از جمله اسکریپت های ساختار پایگاه داده ، سورس کد تغییر داده ها ،  کامپوننت ها ، فایل های پیکربندی و غیره است. در واقع دو نوع اندازه نرم‌افزار برای اندازه گیری وجود دارد ، اندازه فنی و اندازه کاربردی:
 چندین روش اندازه گیری فنی نرم‌افزار وجود دارد که به طور گسترده مطرح شده است. متداول ترین روش اندازه گیری فنی تعداد خطوط کد در هر بخش  ، تعداد فایل ها  ، توابع ، کلاس ها ، جداول و غیره است که از آن می توان نقاط عملکرد پس زمینه را محاسبه کرد.
 متداول ترین روش اندازه گیری اندازه عملکرد ، تجزیه و تحلیل Function Point  است .  اندازه گیری Function Point  بر اساس نیاز کاربر انجام می شود و نمایش دقیقی از اندازه را برای توسعه دهنده / تخمین گر و مقدار (عملکردی که باید تحویل داده شود) ارائه می دهد و عملکرد تجاری را که به مشتری تحویل داده می شود ، منعکس می کند.  این روش شامل شناسایی و وزن ورودی ها ، خروجی ها و داده های قابل تشخیص کاربر است. عدد بدست آمده  برای استفاده در تعیین کمیت و ارزیابی تحویل نرم‌افزار و عملکرد (هزینه توسعه در هر نقطه عملکرد ؛ نقص تحویل در هر نقطه عملکرد ؛ نقاط عملکرد در هر ماه برای کارکنان) در دسترس است.

استاندارد اندازه گیری تجزیه و تحلیل Function Point  توسط گروه کاربری بین‌المللی نقطه عملکرد (IFPUG) پشتیبانی می شود. این موضوع می تواند در مراحل اولیه چرخه توسعه نرم‌افزار اعمال شود و به خطوط کد  وابسته نیست.

از زمان شروع تحلیل سطح تابع پذیری  ، تغییرات زیادی ایجاد شده است و  تکنیک های اندازه گیری کاربردی گسترش یافته است ، اقداماتی نظیر  COSMIC ، NESMA ، Use Case Points ، FP Lite ، FP .  با این حال ، سطح تابع پذیری دارای سابقه آماری دقیق است و از آن به عنوان واحد مشترک اندازه گیری کار در مدیریت توسعه بیشمار برنامه (ADM) یا مشاغل برون سپاری یاد می شود.

یکی از محدودیت های متداول در مورد روش Function Point این است که این یک فرایند دستی است و بنابراین می تواند در پروژه های بزرگ  مانند توسعه برنامه یا مشاغل برون سپاری  پرهزینه باشد.  این جنبه منفی استفاده از روش شناسی رهبران فناوری اطلاعات را به ایجاد کنسرسیوم برای  معرفی استاندارد برای خودکارسازی اندازه گیری کیفیت نرم‌افزارتشویق کرد، در حالی که IFPUG همچنان بر فعالیت های دستی تاکید دارد.

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

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

مدل های عملیاتی تر 
پیشنهادهای جدیدتر برای مدل های کیفیت مانند Squale و Quamoco  از یکپارچه سازی در تعریف ویژگی های کیفیت و اندازه گیری کیفیت  استفاده می کنند.  با تجزیه ویژگی های کیفیتی یا حتی تعریف لایه های اضافی ، ویژگی های پیچیده و انتزاعی کیفیت (مانند قابلیت اطمینان یا قابلیت نگهداری ) قابل کنترل تر و قابل اندازه گیری می شوند.  این مدل های جدید کیفیت در زمینه های صنعتی استفاده شده‌اند  اما تا کنون  به صورت گسترده و عمومی مورد توجه قرار نگرفته اند.

منابع

پیوند به بیرون 

کیفیت نرم‌افزار
اندیشه نظام‌ها
تست نرم‌افزار
کد منبع