بحث کاربر:حسین آقامیری

از ویکی‌پدیا، دانشنامهٔ آزاد.

تعریف مهندسی نرم افزار

براساس تعریف دایرة المعارف WIKIPIDIA مهندسی نرم افزار روشی کاربردی برای اجرا و توسعه و نگهداری نرم افزار می‌باشد که این روش ( دستورالعمل) به صورت نظم یافته و اصولی و دارای کمیت مشخص می‌باشد. لغت مهندسی نرم افزار به صورت عام در کنگره مهندسی ناتو در سال 1968 مورد استفاده قرار گرفت. نظام مهندسی نرم افزار بر پایه دانش، روشها استفاده شده برای نوشتن آن نرم افزار است . مهندسی نرم افزارهمچنین از دانش شاخه‌های دیگر مهندسی همچنین مهندسی کامپیوتر، علوم کامپیوتر، مدیریت، ریاضی، مدیریت پروژه و مدیریت کیفیت بهره گرفته است. براساس آخرین آمارهای ارائه گردیده توسط سازمان کار آمریکا درسال 2004 تعداد 760840 مهندس نرم افزار در آمریکا مشغول به کار بودند. در مقایسه با این آمار متوجه می‌شویم که در همین سال در سایر مهندسی‌های مرتبط تعداد یک میلیون و چهارصد هزار نفر در آمریکا مشغول به کار بودند و این خود نشانگر اهمیت مهندسی نرم افزار در آمریکا و دنیا می‌باشد. در حال حاضر لغت مهندسی نرم افزار به صورت عام و فراوان در دنیای تجارت استفاده می شود در حالیکه در مقایسه با این حجم استفاده از لغت تنها تعداد کمی از تحصیل کردگان دارای مدرک تحصیلی مهندسی نرم افزار هستند. اختلاف عقیده بر سر استفاده‌ی صحیح از واژه‌ی مهندسی برای تعریف این رشته وجود دارد. عده‌ای معتقدند به جای واژه مهندسی واژه‌ی توسعه و تکامل مناسب‌تر برای تعریف این رشته است براساس یافته‌های آقای پیت مک برین نویسنده کتاب SOFTWARE CRAFTMANSHIP این نکته روشن می‌گردد که لغت هنرمند یا استاد کار ماهر، دقت و توجه بیشتری به ماهیت این شغل می‌نماید. در مقابل افراد دیگری وجود دارند که همچنان بر عقیده‌ی خود مبنی بر استفاده‌ی مهندسی برای تعریف این شغل اصرار می‌ورزند چرا که آنها معتقدند این رشته بعد از طی دهه‌های گذشته به اندازه‌ی کافی تکامل یافته است که لغت مهندسی برازنده‌ی آن باشد. به طور کلی باید بگوییم که فارغ‌التحصیلان رشته‌های مختلف مهندسی کمک زیادی به گسترش مهندسی‌ نرم‌افزار نمودند در 50 درصد شاغلین رشته‌ی مهندسی ‌نرم‌افزار دارای مدرک علوم کامپیوتر می‌باشد در صورتیکه درصد بسیار‌کم ولی در حال رشدی دارای مدرک مهندسی نرم‌افزار هستند. مهندسین نرم‌افزار غالبا به صورت کارمندان تمام وقت یا پیمان ‌کاران کار می‌کنند. تعداد محدودی از این مهندسین شغل آزاد را برای خود برگزیده‌اند که این افراد در توسعه و تکامل نرم‌افزارهای گوناگون برای ارائه خدمات مختلف از سوی شرکت‌ها به صورت پیمان‌کاری استخدام می‌گردد. یکی از دلایلی که دانشجویان را از شرکت در رشته‌ی مهندسی نرم‌افزار در آمریکا بر حذر می‌دارد و اشتیاق برای تحصیل در این رشته از خود نشان نمی‌دهد وجود بسته‌های نرم‌افزاری که در خارج از آمریکا توسط مهندسین آن کشورها با قیمت‌های کمتر تهیه و عرضه می‌گردند. از طرفی وجود مهندسین خارجی شاغل در آمریکا نیز حاضر به ارائه خدمات نرم افزاری با قیمت کمتر از مهندسین آمریکایی می‌باشد. این موضوع باعث عدم رغبت برای شرکت در دوره‌های مهندسی‌های نرم‌افزار می‌باشد هر چند که آمارهای ارائه گردیده در این خصوص هنوز مدعی صحت این گفتار نمی‌باشند ولی آنچه مسلم است این بازار ارزان اگر تاثیر مستقیم بروی مهندسی نرم‌افزار نداشته باشد حتما اثر کامل خود را بروی بازار نوشتن نرم‌افزار گذاشته است. مهندسی نرم افزار از آغاز تاکنون رشد جهش گونه ای را تجربه کرده است. این رشد هم در ابزارهای بکار رفته و همچنین در ابداع روشهای جدید بوده است. بطور خلاصه اهم تغییرات این رشته مهندسی بشرح ذیل میباشد. - دهه 1940 میلادی : اولین کد های ماشین ابداع و نوشته گردید. این کدها با دست توسط گروه کوچکی از مهندسین نوشته و به ماشین های اولیه داده شد . ماشین ها توسط این کدها دستور العملهای ابتدایی را اجراء می نمودند. - دهه 1950 میلادی : ابزارهای اولیه همانند ترکیب کننده های بزرگ و مترجم های کد ماشین اختراع گردیدند. - دهه 1960 میلادی : ابزارهای ثانویه که نسخه کامل گردیده مترجم های اولیه بودند » تهیه و اجراء گردید. این مترجم ها قابلیت کنترل و عیب یابی روشها در هنگام اجراء بودند. زبان سطوح بالا همانند زبان C و PASCAL تولید گردیدند. اولین کامپیوترهای غول پیکر جهت ورود به بازار تجاری تولید گردیدند. اولین برنامه های اشتراکی در قالب یک پروژه که توسط 1000 برنامه نویس تهیه گردیده بود » اجراء گردید. اولین ایده مهندسی نرم افزار شکل گرفت. - دهه 1970 میلادی : برنامه های اشتراکی تکامل یافته در قالب سیستم عامل ها همانند UNIX ظهور پیدا نمودند. کامپیوترهای کوچکتر تولید گردیدند. نرم افزارهای مخصوص کسب و کار کوچک تجارتی به بازار راه یافتند. - دهه 1980 میلادی : کامپیوترهای شخصی و ترمینال های مربوط رایج گردیدند. - دهه 1990 میلادی : برنامه نویسی شی گرا ابداع و روانه بازار گردید. ذخیره سازی اطلاعات و حجم حافظه ها بسرعت افزایش پیدا نمد. قیمتها بسرعت کاهش پیدا کردند. - دهه اول 2000 میلادی : نرم افزارهای کدهای مدیریت شده » بستر نرم افزارهای مفسر همانند JAVA , RUBY , NET , PYTHON و PHP ابداع و روانه بازار گردید. با ورود این نرم افزارها به بازار » سرعت تهیه و نوشتن این روشها افزایش پیدا نمود. قدرت مانور کاربران در استفاده از کامپیوترهای خود افزایش چشمگیری پیدا کرد و این افزایش کارایی موجب پائین آمدن هزینه های اجرایی کارها و هزینه های تمام شده پروژه ها گردید. بنظر میرسد با توجه به جوان بودن رشته مهندسی نرم افزارها هنوز فضا برای تکامل و پیشرفت در این رشته بسیار باشد با این وجود جهت گیری این رشد و توسعه را میتوان در محیط های ذیل مشاهده و بررسی نمود.

    -   روش نوین اندیس گذاری ( نشانه گذاری ) اطلاعات جهت ذخیره سازی این اطلاعات در سیستم بازیابی یا به عبارتی دیگر روش برنامه نویسی ظاهرسازی گراء Aspects- oriented programming ( AOP) و یا Aspects – oriented software development ( AOSD )   : در تقابل با روش شی گرا Object – oriented programming ( OOP )   که هر شی Object  یک  کد جهت بازیابی در پروژه را داشت در این روش هر یک از ابعاد یک شی و موضوع کد گذاری میگردند در نتیجه سرعت بازیابی و نهایتاٌ سرعت نرم افزار افزایش چشمگیری پیدا مینماید. معمولاٌ برنامه نویسان به این نوع برنامه نویسی به اختصار به روش ilities   اشاره مینمایند. برای بهتر روشن شدن مطلب تصور نماید مجموعه ای از کدهای اصلی   Source codes   را در اختیار داریم  که برنامه نویس با مراجعه به هریک از این کدها   بدون تغییر دادن ماهیت اصلی کد و به    اقتضای    نیاز در برنامه جدید جهت    تعریف یک    از     ابعاد   Aspects    اشیاء  Objects  برنامه خود استفاده مینماید. بنابراین میتوان تصور نمود که برنامه نویس نیازی به اتلاف وقت جهت تعریف مکرر ابعاد در برنامه نخواهد داشت و از سوی دیگر نشانه گذاری این ابعاد در بازیابی اطلاعات سرعت نرم افزار را بالا خواهد برد. 
    -  روش برنامه نویسی سریع انتقال Agile Software programming  : بازارهای تجاری هر روز با نیاز جدیدی به برنامه نویسان مراجعه مینمایند. با روش های قبلی برنامه نویسان مجبور به تغییر زیاد برنامه خود  جهت رفع نیاز جدید مشتریان خود بودند و این به معنایی صرف وقت و هزینه زیاد برای آنان بود. چه بسا با آماده شدن نسخه جدید برنامه نیاز جدیدی متولد میگردید و نیاز قبلی به اصلاح از دوره مصرف زمانی خود خارج گردیده بود. لذا مهندسین نرم افزار جهت کار آراتر نمودن نرم افزارها برای مقابله با این معضل به ابداع روش فوق نمودند بدین ترتیب که متوجه شدند در صورتی که هرچه برنامه را در زیر برنامه های کوچکتر بنویسند و برای آن دوره زمانی خاصی Time boxed  در نظر بگیرند » در صورت انقضاء زمان آن زیربرنامه بدون صدمه به پیکره اصلی برنامه » آن زیر برنامه از دوره مصرف خارج و یا جایگزین زیر برنامه جدیدی برای انجام عملیات جدید خواهد گردید. 
   - روشهای دیگری همانند Experimental software engineering ,   » Model – driven software engineering    و Software product  lines   میباشند که عمدتاٌ  مشابه روشهای قبلی بوده است و بر تاکید بر سری نویسی برنامه ها و روشها مشابه دارند. 
 در مبحث بعدی به بررسی  مهندسی نرم افزار در سال جدید میلادی و گسترش آن در دهه بعدی خواهیم پرداخت. 

آينده مهندسی نرم افزار در دهه بعدی

    با گسترش اینترنت » به اشتراک گذاشتن دانستنیهای جدید مفهوم و فرم جدیدی را پیدا کرد. هر ایده به دنبال ایده قبلی قابلیت تولد پیدا نمود. این عمل زمانی شگفت انگیز میشود که با سرعت بسیار بالا در سرتاسر دنیا بدون محدودیت هرلحظه تکرار میشود. واژه " انفجار اطلاعات " برای بیان این پدیده بسبار مناسب انتخاب گردیده است. بنظرمیرسد با سپری شدن زمان » نه تنها اطلاعات و دستیابی به آن » اسرار مهمی تلقی نمیشود و طبقه بندی محرمانه برای اطلاعات حذف گردیده است » بلکه عدم استفاده و اشتراک اطلاعات ضعف آشکار بشمار می آید. تصور کنید در همین لحظه که خواننده این مقاله مشغول مطالعه میباشد. در گوشه های دیگر دنیا » نویسندگان بیشماری مشغول تهیه و بروزرسانی موضوع مقاله فوق میباشند. شگفت انگیز است !! حتی این بروزرسانی توسط خواننده مقاله نیز امکان پذیر است » پس هر لحظه اطلاعات مشاهده گردیده نسل قدیم بشمار خواهد آمد چرا که عمل بروزرسانی در حال انجام است. انفجار اطلاعات به این معنا میباشد چرا که مرز و محدودیتی برای این اشتراکی نمودن اطلاعات و تکمیل ایده یکدیگر وجود ندارد. 
واژه    Mashups    برای نسل جدید برنامه نویسی پیشنهاد گردیده است. ایده انتخاب این واژه به سال 2001 میلادی برمیگردد. در آن زمان در دنیای موسیقی و بخصوص موسیقی پاپ روش جدیدی برای خلق آثار جدید توسط هنرمندان ابداع گردید » بدین صورت که برای خلق اثر از تکه های مختلف موسیقی های موجود استفاده گردید. برای استفاده جدید » حتی نوع موسیقی نیز محدودیتی برای کاربر ایجاد نمی کرد. خلق یک اثر پاپ می توانست از در آمیختن یک  تکه اثر کلاسیک با تکه دیگر از موسیقی محلی همراه با تکه جدیدی از خالق اثر باشد. تصور خلق آثار جدید با در نظر گرفتن این ایده بسیارشگفت انگیز  میباشد» چرا که محدودیتی وجود ندارد پس هر لحظه اثر جدیدی با الهام از اثر قبلی امکان خلق شدن را دارد. 

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

برای مفهوم روشنتر مبحث فوق به نمودار ذیل توجه گردد.