بدنه دانش مهندسی نرم افزار (SWEBOK)
مقدمه
هر رشتهاي براي خود مفاهيمي دارد كه بايد توسط افرادي كه قصد فعاليت در آن حوزه را دارند فرا گرفته شود. براي مثال مهندسين عمران بايد در زمينه نقشه كشي، تأسيسات و شناخت مواد مطالبي مختلفي را مطالعه كرده و به خاطر بسپارد. شكي نيست كه در مورد رشته مهندسي نرم افزار هم اين چنين است. اشكالي كه برخي به اين موضوع وارد ميدانند اين است كه نرم افزار به حدي متغير و وابسته به فن آوري (تكنولوژي) است كه پاية با ثباتي نميتوان براي آن بنا نمود.
حال سئوال اينجاست كه به بهانة متغير بودن نرم افزار ميتوان از تدوين و مطالعة اصول توليد (مهندسي) نرم افزار سرباز زد؟ نگاهي به اتفاقاتي كه تا كنون افتاده مياندازيم:
در سال ۱۹۶۸ در همايش معروف NATO اولين هستة با ثبات براي مهندسي نرم افزار تدوين شد. سال ۱۹۶۸ چه مباحثي در حوزة نرم افزار وجود داشت؟
- اولين الگوريتم جستجوي صحيح دودويي در سال ۱۹۶۲ منتشر شده بود.
- در سال ۱۹۶۸ در مورد مضر بودن Goto بحثهاي داغي در جريان بود.
- اولين كتاب در زمينه تحليل نيازمنديهاي نرم افزار در سال ۱۹۷۹ منتشر شد. يعني ۱۱ سال بعد از همايش NATO
با اين حال ۱۰ تا ۲۰ درصد دانش مهندسي نرم افزار آن موقع هنوز استفاده ميشود. [McC03]
همانگونه كه در شكل ميبينيد، هستة دروني تا كنون ثابت بوده و بخش خاكستري نشان دهنده كل دانش مهندسي نرم افزار فرض شده كه از سال ۱۹۶۸ تا كنون افزوده شده يا تغيير كرده است.
در حال حاضر در مقايسه با سال ۱۹۶۸ هزاران عنوان كتاب و مقاله در زمينه مهندسي نرم افزار نگاشته شده و بيش از ۲۰۰۰ صفحه استاندارد مهندسي نرم افزار در IEEE دسته بندي شده است. شكل زير نشان دهنده وضع در سال ۲۰۰۳ است.
۵۰ درصد دانش مهندسي نرم افزار به ثبات رسيده است و انتظار ميرود تا ۳۰ سال آينده اطلاعات موجود در هسته اعتبار خود را حفظ كنند. [McC03] و اين نشان ميدهد يك فعال در اين حوزه براي فراگيري آنها ميتواند برنامه ريزي كند. به هر حال تغيير در همه رشتهها وجود دارد هر روز خبر از كشف شيوههاي جديد و تغيير در نظريههاي رشتههاي مختلف شنيده ميشود و نميتوان از نرم افزار انتظار داشت براي هميشه ثابت بماند تا ما انگيزه پيدا كنيم و به مطالعة دانش مهندسي نرم افزار بپردازيم. واقعيت اين است كه فن آوري زير ساختهاي توليد نرم افزار را بيشتر تحت تأثير قرار ميدهند و دانش توليد نرم افزار در كل تغييرات كمتري را به خود ميبينند.
پيكرة دانش مهندسي نرم افزار (Software Engineering Body of Knowledge)
حال كه بيان شد دانش مهندسي نرم افزار وجود دارد و به اندازه كافي با ثبات است، نوبت معرفي آن ميرسد. ارائه تمام دانش در اين نوشتار ممكن نيست، به همين دليل به معرفي و ارائه منبع براي مطالعه بيشتر اكتفا ميكنم.
بانيان تهيه SWEBOK گروهي از شركتها، دانشگاهها و فعالان حوزه نرم افزار زير چتر IEEE ميباشند كه من در اين نوشتار از آخرين نسخه آن يعني ۲۰۰۴ با عنوان “راهنماي پيكرة دانش مهندسي نرم افزار” به عنوان مرجع استفاده كردهام. در وب سايت مربوطه راهنما براي دانلود وجود دارد و اطلاعات تكميلي براي علاقمندان موجود است. توضيح اين نكته لازم است كه دانش مهندسي نرم افزار چندين هزار صفحه مطلب است و راهنماي آن صرفاً به معرفي چهارچوب و منابع مستندات آن در ادبيات مهندسي نرم افزار ميپردازد.
حوزههاي مرتبط با مهندسي نرم افزار در ادامه آمده است:
همانگونه كه در شكل نمايش داده شده است، مهندسي نرم افزار از علوم كامپيوتر، رياضيات، علوم شناختي (روانشناسي و جامعه شناسي)، مديريت پروژه، و نظامهاي مختلف مهندسي الهام گرفته است.
با توجه به همين نقطه آغازين، SWEBOK حوزههاي دانش تشكيل دهندة تواناييهاي پايهاي براي يك مهندس نرم افزار حرفهاي را شناسايي كرده است.
- نيازمنديهاي نرم افزاري: كشف، مستندسازي، و تحليل عملياتي كه بايد در نرم افزار پياده سازي شود.
- طراحي نرم افزار: تعريف ساختار اصلي سيستم در سطوح معماري و جزئي، تقسيم بندي در ماژولها، تعريف واسطهاي ماژولها، و انتخاب الگوريتمهاي دروني ماژولها.
- ساخت نرم افزار: پياده سازي نرم افزار شامل طراحي تفصيلي، كد نويسي، خطايابي، تست يونيتها، بازبيني فني، و بهينه سازي كارايي. اين ناحيه بعضاً با طراحي نرم افزار و تست نرم افزار هم پوشاني دارد.
- تست نرم افزار: شامل تمام فعاليتهاي مرتبط با اجراي نرم افزار كه با هدف پي بردن به نقايص و ارزيابي خصيصههاي نرم افزار صورت ميپذيرد. تست كردن شامل برنامه ريزي تست، طراحي حالت آزمون (Test Case)، و انواع خاصي از تست شامل تستهاي توسعه، تست يونيت، تست مؤلفه، تست سيستم، تستهاي استرس، و تستهاي پذيرش ميباشد.
- نگهداري نرم افزار: بازنگري و بهبود نرم افزار، مستندات و تستهاي موجود.
- مديريت پيكربندي نرم افزار: شناسايي، مستندسازي، و كنترل تغيير تمام دارايي هاي منطقي پروژة نرم افزاري شامل كد منبع، محتوا (موارد ترسيمي، صدا، متن و ويدئو)، نيازمنديها، طراحي، تداركات تست، تخمينها، برنامهها، و مستندات مربوط به كاربر.
- كيفيت نرم افزار: كليه عمليات مربوط به حصول اطمينان از سازگاري نرم افزار با نيازمنديهاي فني را شامل ميشود. مهندسي كيفيت شامل برنامه تضمين كيفيت، سنجش كيفيت، قابليت اطمينان (Reliability)، تست، بازبيني فني، مميزي، تحقيق و تأييد صحت برنامه.
- مديريت مهندسي نرم افزار: برنامه ريزي، پيگيري، و كنترل پروژه، شغل، يا تشكيلات نرم افزاري.
- ابزارها و روشهاي مهندسي نرم افزار: حمايت از ابزار و روششناسيها (Methodology)، مانند ابزارهاي CASE، كتابخانههاي كد قابل استفاده مجدد، و روشهاي قراردادي، شامل ممارست در جهت تعميم و گسترش ابزار و روششناسيها در درون سازمان.
- فرآيند مهندسي نرم افزار: فعاليتهايي در رابطه با بهبود كيفيت در توسعة نرم افزار، دقت، بهرهوري، و ديگر مشخصات پروژه و محصول.
تا اينجا دليل تدوين SWEBOK بيان شد و بصورت خلاصه كليات آن را مطرح كردم. دو نكته را در پايان متذكر ميشوم:
- SWEBOK تهيه شده، فقط شامل مواردي است كه توسط بيشتر فعالان حوزه نرم افزار پذيرفته شده و از ذكر مباحث بحث برانگيز و در حال بررسي اجتناب شده است.
- در هر پروژهاي نياز به استفاده از تمام حوزههاي مطرح شده نمي باشد، ولي در صورت كاربردي بودن (با توجه به بند بالا) قابل استفاده است.
شما هم ميتوانيد با مطالعه راهنماي تهيه شده توسط IEEE اطلاعات زيادي را بدست آوريد و با آگاهي بيشتري نرم افزار توليد كنيد.
ارجاعات
نظرات
-
1 ژانویه 2017 در 7:10 ق.ظ -
سپاس از فضایی که ایجاد کردید. مطالبی که عنوان میشه بسیار عالی هستن و میتونه مجموعه خوبی رو یکجا جمع آوری کنه. امیدوارم حرکتتون ادامه دار باشه.
-
1 ژانویه 2017 در 7:49 ب.ظ -
ممنون از توجه شما. با توجه به عدم استقبال فعلا برنامه برای ادامه ندارم. شاید در آینده فرصت دیگری ایجاد شد.
-
2 فوریه 2018 در 1:47 ق.ظ -
مطالب فوق العادس، لطفا ادامه بدید
-
8 آگوست 2018 در 12:31 ب.ظ -
سلام
مطالبتون بسیار مفید هست
لطفا ادامه بدید …
لطفاً نظر بدین
[…] كلي نسبت به بخشهاي مختلف مهندسي نرم افزار است. قبلاً اشارهاي به SWEBOK كردم، حال برپاية آن به معرفي حوزههاي دانش مهندسي نرم […]