مهندسی کامپیوتر(نرم افزار)
تحلیل اطلاعات برای تشخیص و توصیه آنها و همچنین طراحی لی اوت کامپیوترها و بررسی تغییرات تجهیزات جانبی وظیفه ی اصلی مهندسین کامپیوتر است.تحلیل نیازهای کاربرها و توصیه ی نرم افزار مناسب برای آنها،ساخت،تست و اصلاح نمونه ی موجود،کار با مدل ها با شبیه سازی توسط کامپیوتر،مشورت با سایر کارکنان و ارزیابی رابطه ی بین سخت افزار و نرم افزار،تحلیل نیازهای کلی سیستم،طراحی و توسعه سخت افزارهای کامپیوتری و پشتیبانی وسایل جانبی شامل سی پی یو ها،ریزپردازنده ها،مدارهای یکپارچه،چاپگرها و دیسک های سخت،ارزیابی فاکتورها مانند هزینه ها و ارزیابی امنیت سیستم ها و …،نظارت بر عملکرد تجهیزات و اعمال تغییرات برای اطمینان از درست کار کردن سیستم،طراحی میزان قدرت مورد نیاز سیستم،ذخیره،بازیابی و دستکاری داده ها،تست کردن سخت افزارا و پشتیبانی از لوازم جانبی موجود،توانایی اعمال مهندسی مجدد در صورت لزوم،گسترش آموزش برای کاربران در صورت لزوم.به روز کردن دانش کامپیوتر برای عقب نماندن از دنیای سریع پیشرفت کامپیوترها.
تاثیر شدید رایانه ها و فن آوری اطلاعات بر زندگی روزمره ، نیاز به طراحی و توسعه سیستمهای نرم افزاری رایانه ای جدید و به کاربردن فن آوریهای جدید،را در طیف وسیع و در حال رشدی از کاربردها الزامی ساخته است. وظایفی که به وسیله افرادی که با عنوان مهندس نرم افزار شناخته می شوند انجام میشود به سرعت در حال رشد ونمو هستند که منعکس کننده بخشهای تخصصی جدید و تغیرات فنآوری ونیز اولویتها و عملکرد کارفرمایان میباشند مهندسان نرم افزار با بکارگیری اصول و روشهای علم رایانه ، مهندسی و تجزیه و تحلیلهای ریاضی به طراحی ، توسعه ، آزمایش و ارزیابی نرم افزارها و سیستمهای رایانه یی می پردازند که به کمک آنها رایانه ها قادر به انجام بسیاری از عملکردهایشان می شوند..
مهندسین نرم افزار شاغل در فرایند تولید سیستمها و برنامه های کاربردی نیازها ی کاربرها را تجزیه وتحلیل کرده و سیستمها و نرم افزارهای کاربردی را برای رایانه ها طراحی و تولید کرده ویا تغییر میدهند. آنها در طراحی و توسعه انواع نرم افزارها مشارکت دارند از جمله سیستمهای عامل ، توزیع شبکه و کامپایلرها که برنامه ها را برای پردازش سریعتر تغییر می دهند . مهندسان نرم افزار با برنامه نویسی یا کد گذاری به رایانه برای انجام کاری خاص خط به خط دستورالعمل میدهند.
مهندسان نرم افزار باید در زمینه برنامه نویسی از مهارتهای بالایی برخوردار باشند اما اکثرا به جای نوشتن کد با طراحی الگوریتم ها،تجزیه و تحلیل و حل مشکلات برنامه نویسی سر و کار دارند.همچنین آنها مشکلات فنی ایجاد شده را برطرف می نمایند.
مهندسان نرم افزارهای کاربردی به تجزیه و تحلیل نیازهای کاربرها پرداخته و نرم افزارهای کار بردی عمومی ویا برنامه های ابزاری تخصصی را طراحی و بوجود می آورند ویا تغییر میدهند . با توجه به هدف برنامه،از زبانها ی برنامه نویسی متفاوتی استفاده می شود.
زبانهای بر نامه نویسی اصلی مورد استفاده شامل سی ، سی پلاس پلاس و جاوا و برنامه هایی که کمتر کاربرد دارند شامل فرترن و کوبول می باشند .بعضی مهندسین نرم افزار هم به توسعه بسته های نرم افزاری سیستم و هم برنامه های کاربردی سفارشی میپردازند.
مهندسین نرم افزارهای سیستم وظیفه هماهنگ کردن نصب ونگهداری سیستمهای رایانه ای یک شرکت را برعهده داشته و رشد و گسترش این سیستمها را در آینده برنامه ریزی می کنند. مهندسین شاغل در یک شرکت به هماهنگ کردن نیازها ی رایانه ای هربخش ازجمله دادن سفارشات ، صورت برداری کالاها ، صورت حساب ها و ثبت صورت پرداخت ها می پردازند و از لحاظ فنی پیشنهاداتی ارائه می دهند . آنها در ضمن باید اینترانتهای شرکت ، بعنی شبکه هایی که رایانه ها را درون یک شرکت به هم متصل کرده و ارتباطات درون شرکتی را راحت میکنند راه اندازی کنند.
مهندسین نرم افزارهای سیستم برای شرکتهایی که سیستمهای کامل رایانه ای را طراحی ، اجرا و نصب میکنند نیز کار میکنند .احتمال دارد که انان در بخش بازاریابی و فروش کار کنند که در این بخشها به عنوان مرجع فنی اولیه برای فروشندگان و مشتریان به فعالیت می پردازنند . در ضمن فعالیت هایی چون فروش تولیدات و حمایت های فنی پس از فروش برای مشتریان نیز در حیطه کار آنان می باشد .
مهندسان نرم افزاراغلب به عنوان بخشی از یک تیم که طراحی سخت افزار و نرم افزار و سیستمها را بر عهده دارد به فعالیت می پردازند . یک تیم هسته ای کارهای مهندسی ، فروش ، ساخت و فرماندهی کارکنان را تا ارائه محصول نهایی به عهده میگیرد.
مهندسی نرمافزار پیشهای است که به یاری دانش رایانه و دیگر فناوریها و روشها به آفریدن و نگاهداری نرمافزار رایانهای میپردازد.
مسائل اصلی مهندسی نرمافزار تولید نرمافزار بر اساس موارد زیر است:
• الزامات تعیین شده
• در زمان تعیین شده
• در محدودهٔ بودجه پیشبینی شده
مهندسی نرمافزار طراحی، برنامه نویسی، توسعه، مستندسازی و نگهداری نرمافزار با بکارگرفتن روشهای فنی و عملی از علوم کامپیوتر، مدیریت پروژه، مهندسی، محدوده کاربرد، طراحی رابط، مدیریت تجهیزات دیجیتال و سایر زمینهها است.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههای از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای، و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرآیندها و ابزار.
پیشینه مهندسی نرمافزار
اصطلاح مهندسی نرمافزار بعد از سال ۱۹۶۸ شناخته شد. این اصطلاح طی کنفرانس «مهندسی نرمافزار ناتو ۱۹۶۸» (که در گارمیش آلمان برگزار شد) توسط ریاست کنفرانس F.L. Bauer معرفی شد و از آن پس بطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسینرمافزار عموماً به معانی مختلفی به کار میرود:
• بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که قبلا برنامهنویسی و تحلیل سیستمها نامیده میشد.
• بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی کامپیوتر، در مقابل تئوری برنامه نویسی کامپیوتر، که علوم کامپیوتر نامیده میشود.
• بهعنوان اصطلاح مجسم کننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی کامپیوتر که اصرار میکند، مهندسی نرمافزار، بجای انکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمع کردن و تدوین روشهای عملی توصیه شده به شکل متدولوژیهای مهندسی نرمافزار طرفداری میکند.
• مهندسی نرمافزار عبارتست از : الف) کاربرد یک رویکرد سیستماتیک، انتظام یافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرمافزار، که کاربرد مهندسی در نرمافزار است و ب) مطالعه روشهای موجود در استاندارد IEEE
انواع نرم افزارها:
نرم افزارهای سیستمی
real-time software (نرم افزارهای بلادرنگ)
business software (نرم افزارهای تجاری)
engineering/scientific software (نرم افزارهای علمی و مهندسی)
embedded software (نرم افزارهای نهفته یا تعبیه شده)
PC software (نرم افزارهای کامپیوترهای شخصی)
AI software (نرم افزارهای هوش مصنوعی)
Web applications (نرم افزارهای کاربردی تحت وب)
محیط کار
مهندسان نرم افزار دردفاتر کار راحت و با نور مناسب و یا در آزمایشگاههای رایانه ای که مجهز به تجهیزات رایانه ایست به کار می پردازند .اکثر آنها ساعت های معینی رادر هفته کار میکنند اما به علت ماهیت پروژه ای کار، ممکن است مجبور به شبکاری ویا کار در تعطیلات برای تحویل به موقع سفارش و یا حل مسائل نا خواسته فنی بشوند . آنها همانند سایر کارکنانی که ساعتها پشت رایانه می نشینند و بر روی صفحه کلید تایپ میکنند ممکن است دچار عوارضی چون خستگی چشم ، کمر درد و ناراحتی های دست و مچ مانند سندرم تونل کارپال شوند
بسیاری از مهندسان نرم افزار در تلاش برای بهبود برنامه های نرم افزاری برای کاربران ، باید با مشتریان و همکاران ، تبادل کاری نزدیک داشته باشند.
مثلا مهندسانی که توسط فروشندگان نرم افزار وشرکتهای مشاوره ای استخدام می شوند ، اکثر اوقات خود را دور از محل کار خود میگذرانند وبرای ملاقات با مشتریان سفرهای شبانه میکنند . آنها با مشتریهایی از کارهای تولیدی گرفته تا مؤسسات مالی سرو کار دارند.
با گسترش شبکه های اینترنتی ، مهندسان نرم افزار قادر خواهند بود با استفاده از مودمها ، رایانه های قابل حمل ، پست الکترونیکی و اینترنت از دفتر کار خود و با اتصال به رایانه مشتریان حمایتهای فنی را ارائه داده و مشکلات جزئی را شناسایی و رفع کنند.
محدوده مهندسی نرمافزار و تمرکز آن
مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سیستم نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل: پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.
مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنیای را آماده میکند که اگر بدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تامین میکند یا خیر.
مهندسی نرمافزار همچنین با خصوصیات پروسه توسعه نرمافزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرمافزار، طول مدت توسعه نرمافزار و ریسکهای توسعه نرمافزار درگیر است.
نیاز به مهندسی نرمافزار
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژِی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای مدرن قابل مقایسهاند. بهعنوان مثال یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی خدود ده میلیون بخش دارد)، در حالی که نرمافزار هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
تکنولوژیها و روشهای عملی
مهندسین نرمافزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگارند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسین نرمافزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند : کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند : برنامه نویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرمافزار بایستی رسیدن به ایدههای جدید خارج از مدلهای طراحی شده قبلی باشد، که باید شفاف بوده و بخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرمافزار ایجاد شده، هنوز هم بحث و جدلهای ماندگار درباره کیفیت نرمافزار ادامه دارند.
ماهیت مهندسی نرمافزار
دیوید پارناس گفتهاست که مهندسی نرمافزار یک شکل از مهندسی است. استیو مککانل گفتهاست که هنوز اینطور نیست، ولی مهندسی نرمافزار باید یک شکل از مهندسی بشود. دونالد کنوت گفتهاست که برنامه نویسی یک هنر است.
دیوان فعالیتهای آماری آمریکا مهندسان نرمافزار را به عنوان زیرگروهی از «متخصصین کامپیوتر»، با فرصتهای شغلیای مانند «دانشمند کامپیوتر»، «برنامه نویس» و «مدیر شبکه» دسته بندی کردهاست. BLS تمام مهندسین دیگر این شاخه علمی، که شامل مهندسین سختافزار کامپیوتر نیز هست، را بهعنوان «مهندسین» دسته بندی میکند.