مقدمه
بسیاری از معیارها و مدلهای کیفی آنالیز نرمافزارهای شیءگرا تنها پس از تکمیل نرمافزار و یا زمانی نزدیک به آن قابل استفاده هستند. مبنای کار آنها بر اساس اطلاعاتی است که از پیادهسازی محصول استخراج شده. از این رو، نتیجهگیری بسیار دیرتر از آنچه که بتواند به بهبود مشخصههای کیفیت نرمافزار کمک نماید، مشخص میشود. در واقع، ما نیازمند معیارها و مدلهایی هستیم که در همان مراحل اولیه توسعه (نیازمندی و طراحی) تضمین نماید که آنالیز و طراحی دارای ویژگیهای مطلوبی است که میتواند به یک محصول نهایی با کیفیت ختم شود. این امر به توسعهگران کمک مینماید که مشکلات را حل کرده، موارد ناسازگار با استانداردها را رفع نموده و نیز پیچیدگیهای بیمورد را در همان مراحل اولیه چرخه تولید محصول حذف نمایند. این امر باید کمک شایانی به طرحریزی آزمایشهای مؤثر، مدیریت بهتر پروژه و منابع و مهمتر از همه کاهش کارهای مجدد در خلال پیادهسازی و پس از آن بنماید. (1)
حال، جهت ارائه روشی که بتواند کیفیت نرمافزارهای شیءگرا را اندازهگیری نماید، باید موانع زیر بر طرف شود. قبل از هر چیز نیازمند روشی هستیم که در زودترین زمان ممکن در چرخه توسعه، کیفیت نرمافزارهای شیءگرا را تشخیص دهد. در واقع، باید معیاری را تعدیل و یا ابداع نماییم که اولاً در همان مراحل اولیه قابل اجراء بوده و ثانیاً نتایج و تخمینهای مطمئنی نیز ارائه نماید. همچنین باید راهی سنجشپذیر جهت مرتبط نمودن ویژگیهای قابل اندازهگیری شیءگرا با صفات مطلوب سطح بالای نرمافزار پدید آورد. این ارتباط نیازمند تعریف است. همچنین باید مدلهای کیفی مختلفی تهیه شود که از طریق آنها بتوان محیطهای نرمافزاری متفاوت را مدل کرده، کمیتهای مورد نظر نگرشهای گوناگون را پاسخگو بود. در ضمن، فرآیند اندازهگیری نیز باید خودکار شده، به ابزارهایی جهت استخراج خودکار داده از سیستمهای نرمافزاری بزرگ تبدیل شوند که بتوان در موقع نیاز بهراحتی آنها را تعدیل نمود.
مدلهای کیفیت قبلی
یکی از اولین مدلهای کیفی محصولات نرمافزاری توسط مک کال و همکارانش پیشنهاد شد. مدل ایشان که اولین مدل از این نوع میباشد، کیفیت محصولات نرمافزاری را سلسله مراتبی از فاکتورها، ضوابط و معیارها میبیند. تلاشهای بینالمللی نیز منجر به تهیه استاندارد ISO 9126 گشت. گرچه تمامی این مدلها در تعریف مدل متفاوت برخورد کردهاند، و اما یک مشکل مشترک دارند؛ همگی در تعریف جزئیات و معیارهای سطح پایین مورد نیاز ارزیابی کیفیت دچار ابهام هستند. عدم وجود شفافیت در این مدلها راهنمایی ناچیزی در اختیار توسعهگران قر میدهد.
مشکل دیگر مدلهای اولیه، ضعف آنها در به شمار آوردن وابستگی میان صفات کیفی است. اگرچه چندین صفت سطح بالا جهت توصیف کیفیت محصول مورد استفاده قرار میگیرد، ولی عموماً هر کدام از زاویهای نگاه میکنند که تنها با زیرمجموعهای از صفات مرتبط هستند. از آن جایی که تأثیر صفات بر کل کیفیت مستقل نمیباشد، صفات و یا مجموعهای از صفات کیفی میتوانند تأثیرات متضادی بر کل کیفیت داشته باشند؛ به عنوان مثال، صفت انعطافپذیری، دستیابی به هزینه پایین نگهداری را دچار مشکل مینماید.
ضعف دیگر مدلهای اولیه، عدم توانایی آنها در به شمار آوردن درجه تأثیر صفات است. گرچه کلیت کیفیت محصول، برآمدی از مجموعهای از صفات است، اما تأثیر تکتک آنها بر کیفیت محصول یکسان نمیباشد. بنابراین، تأثیر یک صفت نیازمند یک فاکتور وزنی است؛ برای مثال، در یک سازمان بزرگ با یک شبکه پیچیده و پردازش بلادرنگ، احتمالاً صفات بازدهی و قابلیت اطمینان بیشترین اهمیت را به خود اختصاص میدهند؛ اما در سازمانی با زیرساختهای متفاوت، این قابلیت حمل و توسعهپذیری هستند که در درجه اول اهمیّت قرار میگیرند. تعیین مجموعه صفات کیفی کار آسانی نبوده و بستگی به اهداف مدیریتی و تجاری، رقابت، اقتصاد و مدت زمان پروژه دارد. (2)
گرچه مدلهای اولیه چارچوبی عالی برای شروع ارائه نمودهاند، ولی باید تعریف و ارزیابی معیارهای جدید، ارتباطات و وزنها را نیز به آنها افزود.
توسعه مدل
مدتها نیاز به چارچوبی برای مدلهای کیفی محصولگرا حس میشد. این چارچوب اولین بار توسط درومی توسعه یافت. این چارچوب ضمن مرتفع نمودن بعضی از مشکلات مدلهای اولیه نظیر مک کال و ISO 9126، یک متدولوژی جهت توسعه مدلهای کیفی به صورت پایین به بالا تعریف نموده که تشخیص و محاسبه جزئیات سطح پایین را تضمین مینماید.
مدل کیفی درومی نیز نظیر مدلهای اولیه به تجزیه صفات کیفی سطح بالا به خواص قابل لمس مؤلفههای محصول (نیازمندی، طراحی و پیادهسازی) تکیه میکند. سه عنصر اصلی در مدل کیفی عام درومی به چشم میخورد: خواصی از محصول که کیفیت محصول را متأثر میسازند، یک مجموعه از صفات کیفی سطح بالا و ارتباط بین آنها. (3)
متدولوژی پیشنهادی در این تحقیق، با نام مدل کیفی طراحی شیءگرا (Quality Model For Object – Oriented Design – QMOOD) متدولوژی مدل کیفی عام درومی را بسط داده است.
در تعریف مراحل به تعیین و مشخص نمودن صفات کیفی طراحی، خواص کیفی طراحی، معیارهای طراحی شیءگرا و طراحی شیءگرای مؤلفهها پرداخته و در اتصالات، نگاشت صفات سطح پایین را به صفات سطح بالا مشخص مینماییم.
1. تعیین صفات کیفی طراحی
QMOOD نیز همانند ISO 9126 صفات کارکرد، قابلیت اطمینان، کارآیی، قابلیت استفاده، قابلیت نگهداری و قابلیت حمل را به عنوان مجموعه اولیه صفات کیفی در نظر گرفته است. سپس هر کدام از صفات به طور جداگانه بررسی شد تا از نظر چگونگی تأثیر در کیفیت طراحی و نیز کافی بودن این صفات، مورد سنجش و ارزیابی قرار گیرند. صفت قابلیت استفاده و قابلیت اطمینان، به دلیل متمایل بودن به کیفیت پیادهسازی نرمافزار از مجموعه حذف شدند. واژه قابلیت حمل نیز بیشتر در زمینه پیادهسازی نرمافزار بهکار میرود. از هیمن رو، با توسعهپذیری که سنخیت بیشتری با طراحی دارد، جایگزین شد؛ به طور مشابه، بازدهی نیز جای خود را به مؤثر بودن داد. در نهایت، قابلیت نگهداری هم با قابل فهم بودن تعویض شد. قابلیت استفاده مجدد نیز به عنوان یکی از صفات حائز اهمیت در کیفیت طراحی شیءگرا نیز به این مجموعه اضافه شده است.
انعطافپذیری سیستمهای نرمافزاری نیز یکی از مشخصههای مهم، چه در توسعه و چه از نظر کاربر نهایی است. بنیان این مشخصه باید در طراحی لحاظ گردد. ضمن اینکه معماری نرمافزاری هم باید این مشخصه را پشتیبانی نماید. بنابراین، انعطافپذیری هم به عنوان یک صفت کیفی به مجموعه اضافه گشت.
جدول 1 تعریف صفات کیفی به کار رفته در توسعه مدل QMOOD را خلاصه مینماید.
جدول 1 – تعریف صفات کیفی
2. تعیین خواص طراحی شیءگرا
خواص طراحی، مفاهیم ملموسی هستند که از طریق امتحان ساختار داخلی و خارجی، ارتباطات و کارکرد مؤلفهها، صفات، روشها و کلاسها قابل تشخیص میباشند. ارزیابی تعریف کلاس از نظر رابطه وراثتی آن با دیگر کلاسها از نظر رابطه وراثتی آن با دیگر کلاسها و بررسی مؤلفهها، صفات و روشهای درونی آن، اطلاعات مهمی در زمینه مشخصههای ساختار و کارکرد کلاس و اشیای آن در اختیار میگذارد.
ویژگیهای تجرید، کپسولهسازی، همبستگی، پیوستگی، پیچیدگی و اندازه طراحی هم به عنوان مشخصههای ساختاری و هم شیءگرایی محسوب میشوند. در مقابل، پیغامدهی، ترکیب، وراثت، چند شکلی و سلسله مراتب کلاس توسط شیءگرایی معرفی شدهاند (4) و بنابراین، تنها در طراحی شیءگرا مطرح میشوند. همان طور که در جدول 2 مشخص شده است، نسخه اولیه QMOOD شامل هر دو مجموعه میباشد.
جدول 2 – تعاریف ویژگیهای طراحی
3. تعیین معیارهای طراحی شیءگرا
هر کدام از خواصی که در مدل QMOOD معین شده است، اشاره به صفت و یا مشخصهای دارد که میتوان بهخوبی آن را به یک یا چند معیار طراحی نظیر نمود. این اطلاعات در مورد طراحیهای شیءگرا باید شامل تعریف کلاسها و سلسله مراتب آنها، اعلان روشها به همراه نوع پارامترهایشان و اعلان فیلدها باشد. (5)
با نگاهی به معیارهای طراحی فعلی در مییابیم که معیارهایی وجود دارند که میتوانند در تشخیص برخی از خواص نظیر تجرید، پیغامدهی و وراثت مورد استفاده قرار گیرند. در کنار اینها برخی دیگر از خواص طراحی نظیر کپسولهسازی و ترکیب، هیچ نظیری در معیارهای طراحی شیءگرا ندارند. همچنین در عین حال که معیارهای لازم برای تشخیص پیچیدگی، همبستگی و پیوستگی ارائه شده است، ولی این معیارها در اواخر اتمام پیادهسازی قابل محاسبهاند و به همین دلیل، نمیتوان از آنها در مدل QMOOD استفاده نمود. این نقیصه ما را به تعریف 5 معیار جدید رهنمون میشود. معیار دسترسی داده Data Access Metric (DAM) معیار همبستگی مستقیم کلاس Direct Class Coupling Metric (DCC) پیوستگی بین روشهای کلاس (Cohesion Among (CAM) Methods ، اندازه تراکم (Measare Of Aggregation (MOA) و اندازه تجرید وظیفگی (Measure Of Functional Abstraction (MFA) که جهت محاسبه تنها به اطلاعات طراحی نیاز دارند. مجموعه کامل معیارهای به کار رفته در QMOOD در جدول 3 آمده است.
جدول 3 – تشریح معیارهای طراحی
4. تعیین طراحی مؤلفههای شیءگرا
طراحی مؤلفهها که معماری طراحی شیءگرا را مشخص مینمایند، مشتمل بر اشیا، کلاسها و ارتباطات بین آنها است. کیفیت یک کلاس از طریق سازندههای آن، شامل صفات، روشها و در صورت وجود دیگر اشیای موجود در آن مشخص میشود. دیگر مؤلفهای که میتواند در طراحی شیءگرا تعیین شود، سلسله مراتب کلاسها است که خانواده کلاسها را سازماندهی میکند. بنابراین، مجموعهای از مؤلفهها که قادر به آنالیز، نمایش و پیادهسازی طراحی شیءگرا است، باید شامل صفات، روشها، اشیا (کلاسها)، ارتباطات و سلسله مراتب کلاسها باشد.
به طور کلی، در تمامی زبانهای برنامهنویسی شیءگرا شکل خاصی جهت نمایش این مؤلفههای بنیادی طراحی و ارائه شده است. از آنجایی که زبان برنامهنویسی شیءگرای C++ جهت نمایش انتخاب شده است، کیفیت طراحی بهراحتی توسط شناسایی شکل متناظر این مؤلفهها، قابل ارزیابی است. ابزار خودکار QMOOD++ جمعآوری معیارها را از مؤلفههای طراحی شده در زبان C++ تسهیل مینماید.
5. نگاشت خواص دارنده صفات کیفی به خواص طراحی
خواص دارنده کیفیت طراحی مؤلفهها بر اساس خواص طراحی متناظر آنها دستهبندی میشوند. اگرچه خواص بنیادی دارنده کیفیت زیاد میباشند (صفات، روشها و کلاسها)، اما تعداد بسیاری از آنها مشترکاند؛ برای مثال، صفات، روشها و کلاسها همگی دارای نام میباشند. از این رو، نام را میتوان یک خاصیت دارنده صفت کیفیت تلقی نمود. زمانی که نام خود – توصیفگر باشد، طراحی از قابلیت فهم بالاتری برخوردار بوده و به همین دلیل، پیچیدگی نیز کمتر میشود. کپسولهسازی هم برای صفات، روشها و کلاسها صفت کیفی تلقی میشود که مستقیماً به کپسولهسازی نگاشت میشوند. به همین طریق، بقیه خواص دارنده صفات کیفی نیز میتوانند به زیرمجموعهای از 11 خاصیت جدول 2 نگاشت شوند.
6. تخصیص معیارها طراحی به خواص طراحی
هدف این تخصیص، یافتن مجموعه کوچک مناسبی است که شامل اطلاعات کافی جهت تشخیص دقیق خواص طراحی باشد. معیارهای اندازه طراحی در کلاسها (Design Size In Classes (DSC)) و تعداد سلسله مراتب (Number Of Hiercharchies (NOH)) جهت تشخیص دو خاصیت Size و Hierarchies در QMOOD به کار میرود. تجرید به ساختار سلسله مراتب طراحی اشاره داشته و از این رو، توسط میانگین تعداد پدران (Average Number Of Ancestors (ANA)) ارزیابی میشود.
تعریف خاصیت کپسولهسازی طراحی در جدول 2 به دسترسی اعلان صفات اشاره داشته که توسط معیار DAM بیان میشود. معیار همبستگی مستقیم کلاس (Direct Class Coupling (DCC)) اندازهای برای ارتباط مستقیم دو کلاس بوده و از این رو، جهت ارزیابی خاصیت همبستگی طراحی مورد استفاده قرار میگیرد. معیارهای پیوستگی بین روشهای کلاس(CAM)، اندازه تراکم (MOA) و اندازه واسط کلاس جهت ارزیابی خواص پیوستگی، تراکم و پیغامدهی طراحی به کار میرود. وراثت از طریق زیر کلاسسازی از کلاسهای موجود مشخص میشود. بنابراین، واضح است که معیار MFA بهخوبی از عهده ارزیابی این خاصیت طراحی بر میآید. برای یک طراحی شیءگرا که در C++ نمایش داده شده، اندازه خاصیت چند شکلی طراحی از طریق تعداد روشهای Virtual موجود در کلاس ارزیابی شده و توسط معیار تعداد روشهای چند شکل (Number Of Polymorphic) تعیین میشود. معیار تعداد روشها (NOM) توسط چیدامبر به عنوان مشخصه پیچیدگی و کمرر نیز از آن جهت (Weighted Methods Per Class (WMC) کلاس استفاده نموده است. زمانی که وزن تمامی روشها یکسان در نظر گرفته شود، WMC و NOM ارزیابی یکسانی ارائه مینمایند. جدول 4 معیارهای طراحی به کار رفته جهت ارزیابی 11 خاصیت طراحی را به طور خلاصه نمایش میدهد.
جدول 4- معیارهای طراحی جهت ویژگیهای طراحی
7. اتصال خواص طراحی به صفات کیفیت
جهت بیان چگونگی تأثیرگذاری خواص طراحی بر کیفیت طراحی و نیز ارتباط مشخصههای محصول با صفات کیفی، باید مطالعه کاملی در زمینه روشهای توسعه شیءگرا انجام شود.
اطلاعات حاصل از این مطالعه نشان میدهد که تجرید تأثیر قابل توجهی بر انعطافپذیری، مؤثر بودن محصول، وظیفگی و قابلیت توسعه محصول دارد.
کپسولهسازی انعطافپذیری، قابلیت توسعه مجدد و فهم طراحی را افزایش میدهد. همبستگی پایین نشانهای از فهم، قابلیت توسعه و قابلیت توسعه مجدد محصول است؛ حال آنکه همبستگی بالا تأثیر معکوسی بر صفات فوق دارد. پیوستگی نیز تأثیر مهمی بر فهم طراحی و قابلیت استفاده مجدد محصول از خود نشان میدهد.
ارتباط اشیا از طریق مبادله پیغام و در نتیجه پیغامدهی، مستقیماً بر وظیفگی و مؤثر بودن محصول اثر گذاشته و همین طور کمک قابل توجهی به قابلیت استفاده مجدد محصول مینماید. اما در عین اینکه وراثت قابلیت استفاده مجدد، وظیفگی، توسعهپذیری و مؤثر بودن داخلی محصول را افزایش میدهد، قابلیت بالقوهای در تأثیر گذاری منفی بر انعطافپذیری و فهم طراحی از خود بروز میدهد. به طور مشابه همچنانکه استفاده دقیق از ترکیب اشیا میتواند به طور قابل ملاحظهای قابلیت استفاده مجدد داخلی، وظیفگی و انعطافپذیری را افزایش دهد، استفاده مفرط و نادرست آن نیز متقابلاً درک طراحی را مشکلتر مینماید. همچنین ترکیب اشیا، مؤثر بودن و توسعهپذیری محصول را متأثر مینماید؛ بدین معنا که انعطافپذیری، توسعهپذیری، مؤثر بودن و وظیفگی محصول را افزایش داده و از طرف مقابل تأثیر منفی بر فهم طراحی داشته، درک آن را مشکلتر مینماید. واضح است که معنای مستقیم پیچیدگی نیز غامض بودن درک طراحی است. عموماً هر چه پیچیدگی محصول بیشتر باشد، درک آن هم مشکلتر بوده و نیز بر انعطافپذیری و قابلیت استفاده مجدد محصول نیز تأثیر نامطلوب خواهد داشت.
جدول 5 تأثیر هر کدام از خواص طراحی را بر صفات کیفیت نمایش میدهد. پیکان رو به بالا تأثیر مثبت خاصیت را مشخص مینماید.
جدول 5 – ارتباط خواص طراحی و صفات کیفی
7-1. وزندهی اتصالات بین خواص طراحی و صفات کیفیت
بر اساس ارتباطاتی که بین خواص طراحی و صفات کیفیت در جدول 5 آمده است، تأثیرگذاری هر کدام از خواص طراحی بر صفات کیفیت به طور نسبی وزندهی شده تا مقادیر محاسبه شده برای تمامی صفات دارای محدوده یکسانی شوند. این محدوده بین 1- تا 1+ انتخاب شده است.
در اولین مرحله مقداردهی مقدار 1+ و یا 5/0+ برای تأثیرات مثبت و برای تأثیرات منفی نیز 1- و یا 5/0- در نظر گرفته شده است. پس از اعمال این مقادیر وزنی اولیه، حاصل بهطور نسبی تغییر مییابد، تا تمامی مقادیر محاسبه شده در محدوده مشخص شده قرار گیرند. این نتایج در جدول 6 نمایش یافته است. علت انتخاب این راهکار٬ سادگی و سر راست بودن آن است.
جدول 6- فرمولهای محاسبه صفات کیفی
8. تصحیح و وفق دادن مدل
اعمال تغییرات در مدل کیفی QMOOD بهسادگی انجام پذیرفته و به همین دلیل، بهراحتی میتوان وزنهای مختلف، زوایای دید و اهداف متفاوت را پیادهسازی نمود. در پایینترین سطح، معیارهای ارزیابی خواص طراحی تغییر میکند و با مجموعه متفاوتی از خواص طراحی جهت ارزیابی کیفیت انتخاب میشود و یا صفات کیفیت مورد ارزیابی تغییر مییابند. ارتباطات تأثیرگذاری خواص طراحی بر صفات کیفیت و وزنهای آنها نیز میتواند تغییر یابد تا نمایش بهتری از اهداف سازمانی ارائه نمایند.
نتیجهگیری و جهت تحقیقات آینده
مدل سلسله مراتبی QMOOD، جهت ارزیابی صفات کیفی سطح بالای طراحی شیءگرا، توسعه یافت. همچنین توانایی مدل در تشخیص کیفیت کلی نرمافزار بر اساس اطلاعات طراحی نیز با استفاده از تخمین مدل در مورد چندین پروژه با نیازمندی یکسان و مقایسه آن با نتایج ارزیابی انسانی تأیید گشت. استفاده از ابزار ++QMOOD جهت جمعآوری اطلاعات معیارهای طراحی و نیز محاسبه صفات کیفی ساده و خوش تعریف میباشد.
در کنار راحتی استفاده و صریح بودن فرضیات، نزدیکی نتایج مدل با ارزیابی انسانی بسیار نزدیک میباشد. این امر کارآیی مدلهایی از این نوع را در تشخیص کیفیت محصولات نرمافزاری آشکار مینماید. در کنار ابهام مسأله تشخیص کیفیت نرمافزار، مدل QMOOD ابزاری جهت اعمال مدلها و راهکارهای مختلف برای برای تسریع در ارزیابی پروژههای واقعی ارائه میدهد که نزدیکی و تقارب نقطه نظرات مختلف را موجب میشود.
پی نوشت ها:
* این مقاله در اولین کنفرانس ملی مهندسی نرم افزار ایران در سال 1388 ارائه شده است.