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

  

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

  

تضمین کیفیت نرم‌افزار برحسب (ISO/IEC 15504 v.2.5 (SPICE یک فرایند حمایتی است که باید به وسیله طرح‌های از پیش تعیین شده و isO 15504 کیفیت را در تک تک محصولات، فعالیت‌ها و فرایندها به‌طور مستقل تضمین کند.
  

  

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

  

۱. تعریف صریح و دقیق معنا و مفهوم «کیفیت نرم‌افزار»
  

  

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

  

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

  

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

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

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

تست به عنوان یک فرایند کلیدی در تضمین کیفیت سیستم‌های نرم‌افزاری ایفاء نقش می‌کند. در حال حاضر تست به عنوان یک صنعت در حوزه نرم‌افزار محسوب می‌شود. طبق آمارهای ارائه شده از سوی مؤسسه IDC، چهل درصد از بودجه نرم‌افزارها صرف تست و آزمون آن می‌گردد. در سال‌های اخیر آمارهای شگفت‌آوری از سوستی مؤسسه NIST دربارهٔ شکست سیستم‌های نرم‌افزاری ارائه شده‌است. در کشور ایالات متحده، این شکست‌ها سالیانه حدود ۵۹٫۵ میلیارد دلار به اقتصاد این کشور صدمه می‌زند. طبق بررسی‌های انجام شده با بکارگیری تست در تمام فازهای تولید نرم‌افزار ۲۲٫۲ میلیارد دلار از این خسارت را می‌توان کاهش داد. در کشور ما نیز با توجه به رشد فناوری اطلاعات و ارتباطات در طی چند سال گذشته و تولید بومی بسیاری از نرم‌افزارهای داخلی، نیاز به این فرایند بیش از پیش احساس شده و در صورت عدم توجه به آن، کاهش کیفیت سیستم‌های ارائه شده، عدم رضایت مشتری و در نهایت از دست دادن بازار را به همراه خواهد داشت.

انواع فعالیت‌های تضمین کیفیت
----------------------------

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

  

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

  

**نظارت بر کیفیت**: نظارت بر کیفیت یک سیستم از ابعاد مختلف و با شیوه‌های متفاوتی می‌تواند صورت بگیرد. نظارت بر کیفیت سیستم‌های نرم‌افزاری را از ابعاد مختلف کارکردی و غیرکارکردی (خصوصاً کارایی و امنیت) و با شیوه‌های Black-Box و White-Box انجام می‌پذیرد. در شیوه Black-Box، بررسی کیفیت سیستم از طریق اجرای تست‌های مختلف و بدون دسترسی به مستندات مشروح و سورس کد صوت می‌گیرد. در مقابل، در شیوه White-Box، بررسی کیفیت سیستم در شرایطی که امکان دسترسی به مستندات مشروح تحلیل، طراحی و پیاده‌سازی سیستم وجود دارد، صورت گرفته و خطاها و نقاط ضعف سیستم به صورت دقیقتر شناسایی می‌گردد.
  

  

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

  

**تست و آزمون**: آزمون نرم‌افزار یکی از فعالیت‌های کنترل کیفیت است که هدف اولیه آن پیدا کردن خطاهاست. وظیفه SQA آنست که از درست برنامه‌ریزی شدن فرایند تست و بهینگی اجرای آن اطمینان حاصل کند.
  

  

**مدیریت تغییر**: تغییر یکی از مخرب‌ترین جنبه‌های یک پروژه نرم‌افزاری است. درصورتی که تغییرات به درستی مدیریت نشوند می‌توانند سبب گیجی و سردرگمی شده و این سردرگمی اغلب موارد به کم کیفیت شدن محصول خواهد انجامید. در این زمینه SQA وظیفه دارد از برقراری و اعمال روش‌های مناسب مدیریت تغییر اطمینان حاصل کند.
  

  

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

  

**مدیریت ایمنی**: نرم‌افزار همیشه یک مؤلفه محوری سیستم‌هایی که برای کاربری انسانی استاندارد شده‌اند (مثل خودرو یا برنامه‌های کاربردی هواپیما) می‌باشد، از همین رو تأثیر نقص‌های پنهان آن می‌تواند فاجعه بار باشد. مسئولیت SQA آنست که ضمن ارزیابی تأثیر خرابی نرم‌افزار، اقدام‌های لازم برای کاهش ریسک بروز این خرابی را انجام دهد.
  

  

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

منابع
-----

* (فارسی)
* مشارکت‌کنندگان ویکی‌پدیا. «Software quality assurance». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۲۹ ژانویه ۲۰۱۶.
* Software Engineering Practitioners Approach (ویرایش هفتم) (انگلیسی)

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

|  |  |
| --- | --- |
|  | در ویکی‌انبار پرونده‌هایی دربارهٔ تضمین کیفیت نرم‌افزار موجود است. |

* Software Engineering Body of Knowledge Ch. 11 Sec. 2.1


| * ن
* ب
* و
مهندسی نرم‌افزار |
| --- |
| حوزه‌ها | تحلیل نیازمندی‌ها •  تحلیل سامانه‌ها •  طراحی نرم‌افزار •  برنامه‌نویسی •  روش‌های صوری •  وارسی مدل •  تست نرم‌افزار •  توسعه نرم‌افزار •  گسترش نرم‌افزار •  نگهداری نرم‌افزار |
| مفاهیم | مدل‌سازی داده •  معماری سازمانی •  مشخصات کاربردی •  زبان مدل‌سازی •  پارادایم برنامه‌نویسی •  نرم‌افزار •  معماری نرم‌افزار •  فرایند توسعه نرم‌افزار •  فرایند تولید نرم‌افزار •  کیفیت نرم‌افزار •  تضمین کیفیت نرم‌افزار •  Software archaeology •  تحلیل ساختمند |
| گرایشات | مدل چابک •  مدل طراحی جنبه‌گرا •  شیءگرایی •  آنتولوژی •  سرویس‌گرایی •  چرخه حیات توسعه سیستم‌ها |
| مدل‌ها | 

|  |  |
| --- | --- |
| مدل‌های توسعه | مدل چابک •  آریوپی  •  اسکرام •  مدل مارپیچی •  مدل آبشاری •  برنامه‌سازی مفرط •  مدل وی •  مدل تکراری و افزایشی •  پیش‌نمونه |
| مدل‌های دیگر | Automotive SPICE •  مدل بلوغ قابلیت یکپارچه •  مدل داده •  مدل تابع •  مدل اطلاعات •  فرامدل •  مدل شیءگرایی •  مدل‌سازی سیستم‌ها •  مدل نما |
| زبان‌های مدل سازی | IDEF •  زبان مدل‌سازی یکپارچه |

 |
| مهندساننرم‌افزار سرشناس | 
* ویکتور باسیلی
* کنت بک
* گریدی بوچ
* فردریک بروکز
* Barry Boehm
* وارد کانینگهام
* تام دی ماکرو
* ادسخر دیکسترا
* مارتین فولر
* تونی هور
* واتس هامفری
* مایکل ای. جکسون
* ایوار جاکوبسون
* Stephen J. Mellor
* برترند میر
* دیوید پارناس
* وینستون واکر رویس
* جیمز رامبا
* نیکلاوس ویرت
* Edward Yourdon
* Mohamed Fayad

 |
| حوزه‌های مرتبط | 
* علوم رایانه
* مهندسی کامپیوتر
* مدیریت پروژه
* مدیریت ریسک
* مهندسی سامانه‌ها

 |
|  •  رده  •  انبار |

| * ن
* ب
* و
استانداردهای آی‌تریپل‌ئی |
| --- |
| کنونی | 
* 488
* 730
* 754
	+ Revision
* 854
* 828
* 829
* 896
* 1003
* 1014
* 1016
* 1076
* 1149.1
* 1154
* 1164
* 1275
* 1278
* 1284
* 1355
* 1394
* 1451
* 1497
* 1516
* 1541
* 1547
* 1584
* 1588
* 1596
* 1603
* 1613
* 1666
* 1667
* 1675
* 1685
* 1800
* 1801
* 1815
* 1850
* 1900
* 1901
* 1902
* 1904
* 1905
* 2030
* 11073
* 12207
* تعمیر و نگهداری نرم‌افزار
* 16085
* 16326
* 29148
* 42010

 |
| آی‌تریپل‌ئی ۸۰۲ | 

|  |  |
| --- | --- |
| 802.1 | 
* D
* p
* Q
* Qat
* Qay
* w
* X
* ab
* ad
* AE
* ag
* ah
* ak
* aq
* ax
* az

 |
| 802.11 | 
* a
* b
* c
* d
* e
* f
* g
* h
* i
* j
* k
* n
* p
* r
* s
* u
* v
* w
* y
* ac
* ad
* af
* ah
* ai
* ax
* be

 |

* .2
* .3
* .4
* .5
* .6
* .7
* .8
* .9
* .10
* .12
* .14
* .15
	+ .1
	+ .4
	+ .4a
* 16
	+ e
* .17
* .18
* .20
* .21
* .22
 |
| Proposed | 
* P1363
* P1619
* P1699
* P1823
* P1906.1

 |
| جایگزین | 
* 754-1985
* 830
* 1219
* 1233
* 1362
* 1364
* 1471

 |
| 
*See also*
IEEE Standards Association

 |

| * ن
* ب
* و
کیفیت نرم‌افزار |
| --- |
| کیفیت‌ها | 

|  |  |
| --- | --- |
| درونی | 
* Size
* نگهداشت‌پذیری
* Flexibility
* قابلیت حمل نرم افزار
* بازبهره‌پذیری
* برنامه‌نویسی رایانه‌ای
* مقیاس‌پذیری
* Testability
* فهم
* همراهی آزادانه
* Orthogonality

 |
| بیرونی | 
* کاربردپذیری
* مهندسی قابلیت اطمینان
* سازگارپذیری
* صحت
* صحت و دقت
* کارایی الگوریتمی
* توانمندی
* Security
* امنیت سیستم نرم‌افزار

 |

 |
| استانداردها و فهرست‌ها | 
* ISO/IEC 9126
* نیازمندی‌های غیرعملیاتی
* List of system quality attributes

 |
| فرآیندها | 
* Software quality management
* Software quality control
* تضمین کیفیت نرم‌افزار

 |
| 
* 
* Commons

 |