مهندسی نرم افزار ویدیو کلوپ SSADM بخش اول
نرم افزار ویدئوکلوپ
در این بخش به بررسی کلی سیستم پرداخته شده است و توضیح مختصری از کارهای انجام شده می آید. نرم افزار “ ویدئو کلوپ “ به منظور مدیریت بر سیستم کرایه و اجاره فیلمهای یک ویدئو کلوپ طراحی و پیاده سازی شده است. این سیستم کلیه عملیات مورد نیاز که قبلا در قالب سیستم سنتی که به صورت دستی و کاغذی انجام می گرفت به صورت خودکار و با قابلیتهای بسیار بیشتر در اختیار کاربران قرار می دهد.
قابلیت بارز این نرم افزار منطبق بودن بالای آن بر نوع عملکرد ویدئوکلوپها و رفع کلیه نیازهای موجود در آنها می باشد.
سیستمهای موجود در زمانهای گذشته تماما به صورت دستی بود و این مساله خود موجب بروز اختلالات بسیار زیادی گردیده بود.
در گذشته، عدم وجود استانداردها كار پشتيباني و نگهداري از سيستم را دچار مشكل مينمود .متخصصين سيستمهاي اطلاعاتي به منظور مرتفعساختن مشكلات، به اين نتيجه رسيدند كه ايجاد و توسعه نرمافزار، نيازمند يك روش مهندسي ميباشد.
هدف اين كار، تمركز بر روي ايجاد تكنيكهاي مشترك، متدولوژيهاي استاندارد و ابزارهاي خودكار با روشي مشابه روشهاي مهندسي سنتي بود.
به دلیل وجود برخی از دلایل ، معمولا شرکتها و ادارات به کندی دست از سیتمهای قدیمی خود بر می دارند و به سمت سیستمهای جدید می روند که در ذیل به برخی از آنها اشاره شده است:
1- هزينه نگهداری نسبتا بالا که البته در برابر مزایای این گونه سیستمها قابل مقایسه با سایر سیستمها دستی نمی باشد.
2- فراهمكردن يك ابزار براي يك تحليلگر سيستم مبلغي بين 5000 تا 15000 دلار در سال هزينه دارد.
3- چگونگي ارزيابي سازمانها نسبت به برگشت سرمايه آنها
4- بيشترين فوايد حاصل از بكارگيري این سیستمها ، در آخرين مراحل چرخه به دست ميآيد
5- مشكلات بهرهوري
6- عدم توانايي برخي از ابزارها در به اشتراكگذاري اطلاعات در ميان ابزارهاي مختلف
7- مشكلبودن فراهمآوردن ابزارهاي مختلف براي تمام مراحل تجزیه و تحلیل و طراحی
استفاده از این سیستم مکانیزه ویدئوکلوپ مزایای زیادی دارد. قسمتی از این مزایا عبارتند از:
دقت بالا در محاسبه هزینه ها
سرعت بالا در پیدا کردن اطلاعات مربوط به یک مشتری یا یک فیلم
جلوگیری از اتفاقات ناگهانی
حذف هزینه های اضافی مانند خرید کاغذ و اخقصاص فضای بایگانی
جلوگیری از بایگانی تعداد زیادی کاغذ و زونکن
سرعت در سرویس دهی به ارباب رجوع و . . .
بسیاری از افراد دید بسیار محدودی از نرم افزار دارند و معمولا آن را درک نمی کنند. به خاطر مجازی و نا ملموس بودن نرم افزار، باورهای غلطی بین مردم جا افتاده است. خیلی ها صنعت نرم افزار را بسیار ساده می پندارند و اصلا اهمیتی برای آن قائل نیستند. در کشور ما این موضوع کاملا مشهود است. البته نمی توان از مردم عامی و شاغلین کم سواد در این زمینه انتظار زیادی داشت. اما این موضوع در محیط های دانشگاهی ما نیز بسیار رایج است. به طوری که این رشته را بسیار کم ظرفیت و ساده می دانند.
مهندسی نرم افزار یک نظام مهندسی است که با تمام جنبه های نرم افزاری محصول، از مراحل اولیه تعیین مشخصات سیستم تا نگهداری سیستم، سر و کار دارد. مهندسین نرم افزار اجزای سیستم را وادار به کار می کنند. آنها تئوریها، روش ها و ابزارها را در جاهای مناسبی به کار می گیرند و سعی در تحلیل و تجزیه سیستم نرم افزاری دارند. در یک جمله هدف مهندسی نرم افزار توسعه سیستم های نرم افزاری با کارکرد مناسب و هزینه مناسب است.
مهندسی نرم افزار، تقریبا یک نظام جوان است. نظریه “مهندسی نرم افزار” در سال 1968 در کنفرانسی تحت عنوان “بحران نرم افزار” مطرح شد. در آن زمان بحران نرم افزار ناشی از معرفی نسل سوم سخت افزار کامپیوتر بود که قدرت فوق العاده ای داشت. قدرت آنها منجر به این شد که برنامه های کاربردی که تا آن زمان غیرممکن به نظر می رسیدند، امکان پذیر شوند. نرم افزارهای حاصل نسبت به سیستم های نرم افزاری قبلی پیچیده تر و بزرگتر بودند. تجربیات اولیه در ساخت این سیستم ها نشان داد که رهیافت غیررسمی برای توسعه نرم افزار به اندازه کافی خوب نبوده است. انجام پروژه های بزرگ، سال ها طول می کشید. هزینه آنها بیش از هزینه پیش بینی شده بود، قابل اعتماد نبودند، نگهداری آنها دشوار و کارایی آنها اندک بود. توسعه نرم افزار در بحران به سر می برد. هزینه های سخت افزار در حال کاهش و هزینه های نرم افزار به سرعت در حال افزایش بود. تکنیک ها و روش های جدیدی نیاز بود تا پیچیدگی ناشی از سیستم های نرم افزاری بزرگ را کنترل کند.
این تکنیک ها به عنوان بخشی از مهندسی نرم افزار محسوب می شدند، گرچه امروزه استفاده همگانی ندارند. به هر حال، هنوز در ساخت نرم افزارهایی که خواسته های کاربر را برآورده کند، به موقع تحویل داده شوند و با بودجه پیش بینی شده خاتمه یابند، مشکلاتی وجود دارد. بسیاری از پروژه های نرم افزاری هنوز دارای مشکلاتی هستند و این موضوع منجر به این شد که بعضی از مفسران (پرسمن 1997) گوشزد کنند که مهندسی نرم افزار در حالت وخیمی به سر می برد.
با افزایش توانایی ما در تولید نرم افزار، برپیچیدگی های نرم افزار فائق می آییم. فناوری های ناشی از همگرایی سیستم های کامپیوتری و ارتباطی، تقاضای جدیدی را در مهندسی نرم افزار مطرح کرده است. به همین دلیل و با توجه به این که اغلب موسسات تکنیک های مهندسی نرم افزار را به خوبی به کار نمی گیرند، هنوز مشکلاتی وجود دارد، اما امیدی برای بهبود این وضعیت وجود دارد.
از سال 1967 در زمینه مهندسی نرم افزار پیشرفت زیادی کردیم و از آن زمان توسعه مهندسی نرم افزار، در نرم افزارها تاثیر بسزایی داشته است. درک بهتری از فعالیت های موجود در توسعه نرم افزار پیدا کردیم. روش های موثری برای تعیین مشخصات، طراحی و پیاده سازی نرم افزار ارائه شده است. نشانه گذاری ها و ابزارهای جدید، از تلاش مورد نیاز برای تولید سیستم های نرم افزاری بزرگ و پیچیده کاسته اند.
مهندسین نرم افزار می توانند به موفقیت های خود افتخار کنند. بدون نرم افزارهای پیچیده، فضای تحقیق نخواهیم داشت، از اینترنت و ارتباطات راه دور بی بهره خواهیم بود، و تمام مسافرت ها خطرناک و گران خواهند بود. مهندسی نرم افزار در طول عمر کوتاهش اثرات زیادی روی زندگی تمام انسان ها گذاشته است.
مهندسین نرم افزار فقط با فرآیندهای تکنیکی توسعه نرم افزار سر و کار ندارند، بلکه با فعالیت هایی مثل مدیریت پروژه نرم افزاری و توسعه ابزارها، روش ها و تئوری هایی برای پشتیبانی محصول نرم افزاری سر و کار دارند. به طور کلی مهندسین نرم افزار یک روش نظام مند و سازمان یافته را در کارشان پذیرفته و این روش موثری برای تولید نرم افزار با کیفیت است. اما مهندسی به انتخاب مناسب ترین روش در مجموعه ای از پدیده ها سر و کار دارد، و در بعضی از پدیده ها نیاز به رهیافت خلاق و غیر رسمی است.
بسياري از اشخاص مهندسي نرم افزار را با علم کامپيوتر يکي مي دانند. اين ديد بسيار محدود کننده و غلط است. در واقع مهندسي نرم افزار را مي توان مستقل از علم کامپيوتر دانست. هر چند پيش نياز کاري مهندسين نرم افزار آشنايي با علوم کامپيوتري است اما اساسا، علم کامپيوتر با تئوريها و روش هايي سر و کار دارد که به کامپيوترها و سيستم هاي نرم افزاري مربوط مي شود، در حالي که مهندسي نرم افزار با مسائل عملي تعيين مشخصات، تحليل، پياده سازي و توليد نرم افزار سر و کار دارد. البته بديهي است که مهندسي نرم افزار و علم کامپيوتر رابطه تنگاتنگي با هم دارند و پيشرفت در علم کامپيوتر نياز به پيشرفت علم نرم افزار را مي طلبد. داشتن برخي از علوم کامپيوتر براي مهندسين نرم افزار ضروري است(همان طور که دانش فيزيک براي مهندسين الکترونيک ضرروي است).
در حالت ايده آل، کل مهندسي نرم افزار از تئوري هاي علم کامپيوتر ساخته مي شود، اما واقعيت چيز ديگري است. مهندسين نرم افزار اغلب بايد از رهيافت هاي ذهني براي توسعه نرم افزار استفاده کنند و احتمالا ايده اي که تا به حال شکل نگرفته را عملي کنند. تئوري هاي علم کامپيوتر را هميشه نمي توان به مسائل واقعي پيچيده اي اعمال کرد که نيازمند راه حل های نرم افزاري اند.
در واقع مهندسين نرم افزار بايد مسائل پيچيده واقعي را با تفکر نرم افزاري مبتني بر علم کامپيوتر حل کنند. اين گونه مسائل واقعي کاملا با تئوري هاي علم کامپيوتر در تناقض است و در اين ميان وظيفه مهندسين نرم افزار تحليل و رفع تناقضات مسئله با علوم کامپيوتري و ايجاد سيستم نرم افزاري مبتني بر علم کامپيوتر مي باشد.
به طور مثال ساخت يک نرم افزار اتوماسيون اداري که قرار است تمامي سيستم هاي يک سازمان بزرگ از جمله سيستم حسابداري، توليد ، فروش ، انبارداري وغيره را پياده سازي نمايد، نياز به داشتن دانش مهندسي نرم افزار دارد. چنين سيستمي را نمي توان با تئوري و منطق کامپيوتري پياده سازي نمود چون این گونه سیستم ها نياز به تحليل هاي تشريحي دارند که با علوم کامپيوتر که فقط قادر با حل مسائل منطقي است کاملا در تضاد مي باشد.
در کشور ما صنعت نرم افزار بسیار نوپا و جوان است. هنوز فرهنگ نرم افزاری در بین مردم کشور ما جایی ندارد. میانسالان ما با نرم افزار و تکنولوژی های روز از جمله اینترنت کاملا غریبه اند. هنوز بسیاری از ادارات ، شرکت ها و فروشگاه ها اطلاعات خود را به روش دستی روی کاغذ مدیریت می کنند و به اهمیت و مزایای اتوماسیون اداری پی نبرده اند. امیدوارم نوشتار زیر در درک بهتر موجودیت “نرم افزار” به شما کمک کند.
بسیاری از مردم، نرم افزار را با برنامه های کامپیوتری یکسان می دانند. در واقع این دید، بسیار محدودکننده است. نرم افزار فقط برنامه های کامپیوتری نیست، بلکه تمام مستندات و داده های پیکربندی را که برای حیات این برنامه ها ضروری اند را شامل می شود. سیستم های نرم افزاری معمولا شامل تعدادی برنامه، فایل های پیکربندی جهت حفظ تنظیمات، مستندات سیستم جهت تشریح ساختار نرم افزار، مستندات و راهنمای کاربر برای تشریح چگونگی کار با سیستم می باشد.
محصولات نرم افزاری به دو نوع کلی دسته بندی می شوند :
1- محصولات کلی : این ها سیستم های مستقلی اند که توسط یک شرکت تولیدکننده نرم افزار ساخته می شوند و به بازار عرضه می گردد و مشتریان برحسب نیاز آنها را تهیه می کنند. این گونه محصولات شامل پکیج های آماده نرم افزاری مثل واژه پردازها و نرم افزارهای حسابداری است.
2- محصولات سفارشی : این ها محصولات نرم افزاری هستند که توسط مشتری خاصی سفارش داده می شوند. این گونه محصولات توسط پیمانکاران نرم افزاری برای مشتری سفارش دهنده ایجاد می شوند.
تفاوتی که میان این گونه محصولات وجود دارد این است که شرکتی که محصولات کلی را تولید می کند مشخصات نرم افزار را کنترل می کند، اما در محصولات سفارشی تعیین مشخصات و کنترل نرم افزار توسط سازمان خریدار انجام می شود.
از نظر مجازی، اکنون تمام کشورهای وابسته به سیستم های نرم افزاری پیچیده اند. تمامی سیستم های دولتی و تجاری بر پایه سیستم های کامپیوتری بنا شده اند. نرم افزار در این سیستم ها، بخش بسیار زیادی از هزینه های کل سیستم را به خود اختصاص میدهد. بنابراین، تولید نرم افزار با هزینه مناسب، در عملکرد اقتصاد ملی و بین المللی بسیار موثر است.
نرم افزار انتزاعی و ناملموس است و بوسیله مواد اولیه که ناشی از قوانین فیزیکی یا فرآیندهای ساخت است، محدود نمی شود. چون محدودیت های فیزیکی در نرم افزار وجود ندارد، مهندسی نرم افزار ساده به نظر میرسد. از طرف دیگر عدم وجود محدودیت های طبیعی به معنای این است که نرم افزار می تواند کاملا پیچیده باشد و در نتیجه درک آن بسیار مشکل است.
مدل فرآیند نرم افزار، نمایش انتزاعی فرآیند نرم افزار است. هر مدل فرآیند، فرآیند را از دیدگاه خاصی نمایش می دهد و در نتیجه فقط بخشی از اطلاعات راجع به آن فرآیند را در اختیار قرار می دهد. در این بخش تعدادی از مدلهای کلی فرآیند را معرغی می کنم و آنها را از دیدگاه معماری نمایش می دهدم. یعنی چارچوب فرآیند را خواهیم دید نه جزئیات فعالیت های خاص را.
این مدلهای کلی، توصیف قطعی فرآیند نرم افزار نیستند، بلکه انتزاعهای مفیدی اند که برای توصیف رهیافتهای مختلف توسعه نرم افزار به کار گرفته می شوند. برای بسیاری از سیستم های بزرگ، فقط از یک فرآیند نرم افزار استفاده نمی شود، برای توسعه بخش های مختلف سیستم از فرآیندهای مختلفی استفاده می شود.
مدل های نرم افزاری که قصد بحث در مورد آن ها را دارم عبارتند از :
1- مدل آبشاری : این مدل، فعالیت های اساسی فرآیند تعیین مشخصات، توسعه، اعتبار سنجی و تکامل را در نظر می گیرد و آن ها را به صورت مراحل جدا گانه ای از فرآیند مثل تعیین مشخصات خواسته ها، راحتی نرم افزار، پیاده سازی، تست و غیره نمایش می دهد.
2- توسعه تکاملی : این رهیافت، فعالیت های تعیین مشخصات، توسعه و اعتبارسنجی را جایگذاری (Interleave) می کند. یک سیستم اولیه با استفاده از مشخصات انتزاعی ساخته می شود. سپس این سیستم با ورودیهای مشتری اصلاح می شود تا سیستمی ایجاد شود که خواسته های کاربر را برآورده کند.
3- توسعه سیستم رسمی : در این رهیافت یک مشخصات رسمی ریاضی از سیستم ایجاد می شود و سپس این مشخصات با استفاده از روش های ریاضی، به برنامه تبدیل می شوند. بازبینی مولفه های سیستم با مفاهیم ریاضی صورت می گیرد.
4- توسعه مبتنی بر استفاده مجدد : در این رهیافت فرض می شود که تعدادی از مولفه های سیستم وجود دارند که دوباره قابل استفاده اند. فرآیند توسعه سیستم این مولفه ها را جامعیت می بخشد. در این رهیافت حداکثر بهره را از امکانات و مولفه های آماده و قابل استفاده می بریم. بسیاری از نرم افزارها که بر پایه یک نرم افزار دیگر توسعه می یابند از همین روش استفاده می کنند و برای رسیدن به اهداف تعیین شده ی خود از مولفه های آماده استفاده می کنند. مولفه های نرم افزاری آماده رهیافت توسعه ی یک نرم افزار را سرعت بخشیده و باعث کاهش خطا و باگ در آن می شود.
فرآیندهای مبتنی بر مدل آبشاری و توسعه تکاملی، برای توسعه ی سیستم های عملی به کار می روند. توسعه سیستم رسمی دربسیاری از پروژه ها با موفقیت به کار گرفته شد، اما فرآیندهای مبتنی بر این رهیافت، به ندرت در سازمان ها به کار گرفته می شوند. استفاده مجدد در بسیاری از فرآیندها مرسوم است اما سازمان ها چندان به آن تمایل ندارند. بدیهی است که می توان این رهیافت ها را با هم ترکیب یا از رهیافت ابداعی خود برای توسعه ی یک نرم افزار استفاده نمود.
اولین مدل معروف فرآیند توسعه نرم افزار، رهیافت آبشاری است که از سایر فرآیندهای مهندسی ناشی شده است. مراحل اصلی این مدل، به فعالیت های اساسی توسعه نرم افزار نگاشت می شود.
1- تحلیل و تعریف خواسته ها : خدمات سیستم، محدودیت ها و اهداف از طریق مشورت با کاربر یا کاربران مشخص می شوند. این ها به طور مشروح تعریف می شوند و به صورت مشخصات سیستم مورد استفاده قرار می گیرند.
2- طراحی سیستم و نرم افزار : فرآیند طراحی سیستم ها، خواسته ها را به سیستم های نرم افزاری و سخت افزاری تقسیم می می کند. بدین ترتیب، یک معماری کلی بوجود می آید. طراحی نرم افزار شامل شناسایی و توصیف انتزاع های سیستم نرم افزار و روابط آن هاست.
3- پیاده سازی و تست واحد : در این مرحله، طراحی نرم افزار به صورت مجموعه ای از برنامه ها و یونیت های جدا از هم در می آیند. در تست واحد بازبینی می شود که هر واحد خواسته های مورد نظر را برآورده می کند.
4- جامعیت و تست سیستم : واحدهای اولیه برنامه یا برنامه ها جامعیت پیدا می کنند و به عنوان یک سیستم کامل تست می شود تا تضمین شود که خواسته های نرم افزار برآورده شده اند. پس از تست، سیستم نرم افزار به مشتری تحویل داده می شود.
5- به کارگیری و نگهداری : این مرحله، معمولاً طولانی ترین مرحله چرخه حیات نرم افزار است. سیستم نرم افزاری نصب و به کار گرفته می شود. نگهداری شامل تصحیح خطاهایی است که در مراحل اولیه چرخه حیات برطرف نشدند، شامل بهبود پیاده سازی های واحدهای سیستم و اصلاح خدمات سیستم جهت پاسخگویی به نیازهای جدید نیز است.
در واقع، نتیجه هر مرحله یک یا چند سند است که مورد موافقت قرار گرفته اند. هر مرحله فقط با پایان یافتن مرحله قبلی شروع می شود. در هنگام طراحی، مشکلات مربوط به خواسته ها شناسایی می شوند، در هنگام کدنویسی مشکلات طراحی پیدا می شوندو الا آخر. فرآیند نرم افزار یک مدل ساده ی خطی نیست، بلکه دنباله ای از فعالیت ها تکرار می شوند.
به دلیل هزینه های تولید و پذیرش اسناد، هر تکرار شامل دوباره کاری است و هزینه ی آن بالاست. بنابراین، پس از چند تکرار، باید آن مرحله را پذیرفت و به مراحل بعدی پرداخت. مشکلات احتمالی به مراحل بعدی یا برنامه نویسی واگذار می شود. بدین ترتیب، ممکن است سیستم تمام خواسته های کاربر را برآورده نکند یا ساختار خوبی برای سیستم طراحی نشود.
در هنگام آخرین مرحله چرخه ی حیات (به کار گیری و نگهداری)، نرم افزار به کار گرفته می شود. خطاها و کمبودهای مربوط به خواسته های اصلی نرم افزار مشخص می شوند. خطاهای برنامه و طراحی، ظاهر می شوند و نیاز به عملکردهای جدید شناسایی می گردند. بنابراین، سیستم باید تکامل یابد تا مورد استفاده قرار گیرد. انجام این تغییرات (نگهداری نرم افزار) ممکن است منجر به تکرار مراحل قبلی فرآیند شود.
مشکل عمده ی مدل آبشاری این است که تقسیم بندی پروژه به این مراحل مجزا، اصلاً کار آسانی نیست. معنایش این است که این تقسیم بندی خود به تجزیه و تحلیل بعضاً پیچیده ای نیازمند می باشد. به هر حال، رهیافت آبشاری نشانگر عمل مهندسی است. در نتیجه، فرآیندهای نرم افزار مبتنی بر این رهیافت، هنوز برای توسعه نرم افزار به کار می روند، به خصوص اگر به عنوان بخشی از پروژه مهندسی سیستم های بزرگ باشد.
پ.ن : این مدل، قدیمی ترین مدل توسعه ی نرم افزار است که هنوز هم توسط شرکت ها و گروه های نرم افزاری سراسر دنیا مورد استفاده قرار می گیرد.