گروه نرم افزاری هیلتن

موضوع کلی:مهندسی نرم‌افزارتجربی

مهندسی نرم‌افزارتجربی

Empirical Software Engineering



مهندسی نرم‌افزارتجربی (Empirical Software Engineering)

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

اهمیت موضوع استفاده از مهندسی نرم‌افزارتجربی

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

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

چه نیازی به مطالعات تجربی در مهندسی نرم‌افزار داریم؟

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

  1. برای اثبات نظریه ها (خرد عمومی: مثلا Object Oriented خوب است.)
  2. پیدا کردن رابطه ها(رابطه بین نگهداری و معیارها)
  3. انتخاب درست و بهتر مدل ها،روش ها، ابزارها
  4. قضاوت در مورد دقت و صحت مدل ها
  5. ارزیابی محصولات
  6. ارزیابی فرایند ها

اهداف و مزایای مطالعات تجربی در مهندسی نرم‌افزار

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

1- اکتشاف (برای کشف چیزهای که اتفاق می‌افتد.)
2- دنبال بینش‌های جدید باشیم
3- برای پیدا کردن پاسخی برای پرسش‌ها
4- برای اندازه‌گیری(کیفی و کمی محصولات)
5- برای توصیف(به تصویر کشیدن مشخصات دقیق از شرایط،رویداد ها،پروژه ها)
6- توضیحات (به دنبال توضیح از وضعیت مشکل‌ها به صورت علمی و رابطه بین آنها)
7- پیداکردن روابط
8- پیدا‌کردن تفاوت ها و تغییرات

مطالعه و تحقیق‌های تجربی در مهندسی نرم‌افزار به منظور بهبود مهندسی نرم افزار و هدف اصلی از مهندسی نرم‌افزار تجربی (Empirical Software Engineering)را می‌توان به صورت کلی در دو دسته طبقه بندی کرد.
1- هم سطح کردن(تراز کردن) تحقیقات دانشگاهی با علم و صنعت.
2- افزایش شناخت(شناخته ابزار و محصولات).

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

Empirical Software Engineering مهندسی نرم‌افزارتجربی

  1. بررسی تکنیک های فعلی
  2. بررسی روند در طول زمان
  3. ارزیابی روش های مطرح شده

مهندسی نرم افزار تجربی مانند هر علوم دیگر شامل مفاهیم پایه و اساسی است که عبارتند از:

  1. جمع آوری داده
  2. اندازه‌گیری
  3. تحلیل و تجزیه
که هر کدام را در ادامه به صورت کامل شرح داده می‌شود.

جمع‌آوری داده

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

اشیا یا منابع مورد نیاز برای تحقیقات مهندسی نرم‌افزار تجربی

محقق می‌تواند داده های مورد نیاز خود را برای تحقیقات تجربی از منابع زیر بدست آورد یا به عبارت دیگر محدوده تحقیقات تجربی به پنج دسته طبقه بندی می‌شود(شکل زیر).

  1. بررسی سازمان یا سازمان ها
  2. بررسی فرایند تولید نرم‌افزار (چرخه حیاط نرم افزار مثل فرایند تست)
  3. ارزیابی محصولات (مستندات و نرم افزار ها)
  4. منابع (افراد و ابزار ها برای انجام فعالیت ها)
  5. بازدید پروژه ها
Empirical Software Engineering مهندسی نرم‌افزارتجربی

برخی از راههای جمع‌آوری داده

1- اندازه‌گیری:

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

2- مصاحبه:

این داده ها براساس مصاحبه با افراد و گروه ها بدست می آید.

3- پرسش نامه:

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

4- مشاهدات

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

اندازه‌گیری

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

انواع اندازه‌گیری

                                    
1-	اندازه‌گیری مستقیم در مقابل اندازه‌گیری غیرمستقیم
  •	اندازه‌گیری مستقیم: بدست آوردن ارزش مستقیماً از روی صفات شیء در حال مطالعه.
  •	اندازه‌گیری غیر مستقیم: بدست آوردن ارزش اشیاء بر اساس مقادیر داده شده به مشخصات مختلف آن شیء.  
2-	اندازه‌گیری هدفمند در مقابل ضمنی:
  •	اندازه‌گیری هدفمند: بدون قضاوت برروی ارزش ها می‌توان فهمید. این نوع اندازه‌گیری دو حالت دارد یا به هدف رسید یا نه، ارزش میانی ندارد مثال زمان تحویل پروژه.
  •	اندازه‌گیری ضمنی: بازتاب قضاوت از اندازه‌گیری ارزش ها بسته به نظرات ما. 
3-	اندازه‌گیری کمی و کیفی:
  •	کیفی: داده ها و محصولات را از لحاظ کیفیت می‌سنجد.
  •	کمی: داده ها و محصولات را از لحاظ حجم و مقدار می‌سنجد.

نقش مهندسی نرم‌افزار تجربی در متدولوژی های چابک(Agile methodology)

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

اعمال مهندسی نرم‌افزار تجربی در معماری نرم‌افزار

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

Empirical Software Engineering مهندسی نرم‌افزارتجربی

مراجع:

[1] Barry Boehm et al, Foundations of Empirical Software Engineering, Springer (2005).
[2] Forrest J. Shull et al, The role of replications in Empirical Software Engineering, Springer 29 January (2008).
[3] Davide Falessi et al, Applying Empirical Software Engineering to Software Architecture :Challenges and Lessons Learned, march 2009 Technical Report.
[4] Victor R. Basili, The Role of Experimentation in Software Engineering: Past, Current, and Future Springer
[5] Barbara Kitchenham and David Budgen , Empirical Software Engineering, IEE October (2002)
[6] WALTER F. TICHY, Hints for Reviewing Empirical Work in Software Engineering , Kluwer Academic Publishers (2001)
[7] Barry Boehm ,Laurie Williams , A Survey of Agile Development Methodologies (2007)
[8] P. A gerfalk, and B. Fitzgerald, Flexible and distributed software processes: old petunias in new bowls? Communications of the ACM 49
[9] L. Williams, A. Cockburn, Agile software development: it’s about feedback and change, IEEE(2003)
[10] Tore Dyba, Torgeir Dingsøyr, Empirical studies of agile software development: A systematic review , Elsevier 24 January (2008)
[11] Mikael Lindvall1, Vic Basili1,at al , Empirical Findings in Agile Methods
[12] http://www.scholar.google.com
[13] http://academic.research.microsoft.com







گروه برنامه نویسی هیلتن

گروه برنامه نویسی هیلتن