کیفیت در نرم افزار واقعاً به چه معناست!؟

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

پرسمن «کیفیت نرم افزار» را در مهندسی نرم افزار به صورت زیر تعریف کرده است :

In the context of software engineering, software quality measures how well software is designed (quality of design), and how well the software conforms to that design (quality of conformance)

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

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

نیازمندی ها

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

طراحی

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

پیاده سازی

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

تست

تست نرم افزار پس از پیاده سازی، اگر به درستی انجام شود، کیفیت خروجی نرم افزار را به طرز شگرفی افزایش می دهد. در تست مشخص می شود که چه مشکلاتی در پیاده سازی وجود دارند که باید حل شوند. کیفیت نرم افزار با تعداد انجام تست های درست رابطه مستقیم دارد. هر چقدر بیشتر نرم افزار را تست کنیم، در انتها نرم افزارمان کیفیت بهتری خواهد داشت. با انجام تست های مکرر می توانید خروجی نهایی با کیفیت تری ارائه کنید و در نتیجه مشتریان راضی تری داشته باشید. در حال حاضر روش های بسیاری برای تست نرم افزار وجود دارند که همگی سعی می کنند تا کیفیت نرم افزار را بالا ببرند. چندی از متدولوژی های Agile در سیکل توسعه خود به صورت جدی از روش های تست نرم افزار استفاده می کنند تا از کیفیت محصولات نرم افزاری تولید شده اطمینان پیدا کنند. برای مثال TDD یا Test-Driven Development روشی است که برنامه نویسان را مجبور می کند تا قبل از کدنویسی، تست های مربوط به آن را بنویسند!

توزیع و استقرار

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

آموزش و پشتیبانی

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

farasun.wordpress.com

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

(1) : IEEE 610.12-1990 Standard Glossary of Software Engineering Terminology

در مطالب بعدی به مباحث بیشتری در مورد کیفیت نرم افزار خواهیم پرداخت، برای پیگیری آن ها می توانید مشترک فید فراسان شوید.

فریم ورک های تست واحد برای دات نت

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

تست واحد مربوط به برنامه نویسان است و ربطی به کاربران یا حتی آزمایش کنندگان کیفی یک نرم افزار ندارد. یک برنامه نویس اگر تمام قسمت های کوچک برنامه خود را مورد آزمایش واحد قرار داده باشد، در پایان برنامه ای با حداقل باگ را تحویل کاربران خواهد داد. برای انجام تست واحد در پلت فرم های مختلف ابزارهای مختلفی وجود دارد. برای دات نت می توان فریم ورک های Unit Testing زیادی مثال زد. در ادامه با برخی از فریم ورک های تست واحد برای دات نت آشنا می شوید.

NUnit : یک فریم ورک خوش ساخت کدباز است که از دنیای جاوا و با پورت کردن پروژه JUnit به دات نت بوجود آمد و با استفاده از Resharper و TestDriven.NET می توان از تمام قابلیت های آن در ویژوال استادیو بهره برد. مستندات خوبی دارد و مثال های بسیار زیادی برای آن در وب وجود دارد.

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

csUnit : یک فریم ورک کدباز و رایگان است که تمام ویژگی های یک فریم ورک تست واحد خوب را یکجا دارد. با تمام زبان های برنامه نویسی دات نت سازگاری دارد و شامل ابزار GUI، پلاگین ویژوال استادیو و خط فرمان برای اجرای آزمایش هاست.

xUnit : فریم ورک کدباز جدیدی است که به توسعه دهندگان اجازه می دهد تا از TDD به سادگی هر چه تمام تر برای توسعه نرم افزار خود استفاده کنند. شامل ابزار GUI و خط فرمان برای اجرای تست هاست و می توانید با استفاده از TestDriven.NET یا Resharper در ویژوال استادیو از آن بهره ببرید.

Visual Studio Unit Testing Framework : راه حل مایکروسافت برای انجام آزمایش های واحد در دات نت است که در نسخه های Team System ویژوال استادیو 2005 به بعد وجود دارد. تست های واحد ساخته شده با این فریم ورک می توانند به صورت مستقیم درون ویژوال استادیو اجرا شوند یا با ابزار MSTest.exe از خط فرمان اجرا شوند.

farasun.wordpress.com

اگر به مبحث Unit Testing علاقه دارید پیشنهاد میکنم سری نوشته های آقای وحید نصیری در این مورد را حتماً بخوانید.

Visual Studio Unit Testing Framework : راه حل مایکروسافت برای انجام آزمایش های واحد در دات نت است که در نسخه های Team System ویژوال استادیو 2005 به بعد وجود دارد. تست های واحد ساخته شده با این فریم ورک می توانند به صورت مستقیم درون ویژوال استادیو اجرا شوند یا با ابزار MSTest.exe از خط فرمان اجرا شوند.

تستا را دریابید!

یکی از اهداف وبلاگ فراسان، معرفی و کمک به گسترش فرهنگ استفاده از نرم افزارهای رایگان، آزاد و کدباز بوده و هست. همان طور که می دانید شرکت های بسیاری از مدل اوپن سورس برای توسعه محصولات نرم افزاری خودشان استفاده می کنند. شرکت های معروفی همچون سان، موزیلا و حتی گوگل در این زمینه بسیار موفق بوده اند. همین شرکت اتوماتیک که تولید کننده نرم افزار محبوب وردپرس است، از مدل اوپن سورس برای گسترش محصولاتش استفاده می کند و تا به حال به موفقیت های بسیاری رسیده است و از نظر مالی بسیار پیشرفت کرده و خواهد کرد. وقتی میگوئیم نرم افزار آزاد (=Free) منظورمان ابن نیست که الزاماً این نرم افزار مجانی است و بدون هزینه می توان از آن استفاده کرد. هرچند که بیشتر نرم افزارهای آزاد رایگان اند. مدل تجاری اوپن سورس مدلی پذیرفته شده در سطح جهان است و شرکت های بزرگی از این راه پولدار شده اند. اما متاسفانه در کشور ما برای تولید نرم افزار این مدل نه تنها پذیرفته نیست بلکه عدم آشنایی کاربران با اینگونه نرم افزارها سد بزرگی است برای تولیدکنندگان محصولات نرم افزاری کشورمان که احیاناً می خواهند در این راه وارد شوند.

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

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

برای اطلاعات بیشتر و مشاهده خصوصیات تستا کلیک کنید!

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

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

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :