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

  • شروع کننده موضوع
  • #1

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
سلام. عنوان تاپیک گویاست ولی کیه که گوش کنه : d

بزارین از یه مقدمه کوچیک شروع کنیم :
خیلی ها تو رانشگاه درس برنامه نویسی داشتن و یه چیزهایی راجع بهش میدونن اما معادل دونستن اون با مهندسی نرم افزار و یا علوم کامپیوتر خیلی مسخرس. اینم از خیلی چیزا نشات میگیره . متاسفانه وقتی تعداد دانشگاها ظرفیت اونا داره بصورت لگاریتمی رشد میکنه هم سطح علمی پایین میاد و هم شان استاد و دانشجو و دانشگاه .درک درست مفاهیم و رشته ها میتونه خیلی تو انتخاب رشته درست و اینده افراد تاثیر بذاره میخوام تو این تاپیک دقیقا تفاوت یه برنامه نویس و مهندس نرم افزار با کسی که علوم کامپیوتر میخونه روشن شه . تفاوت هاشون رو میگم ولی دوستان اگه سوالی دارین پ خ کنیین تا جواب بدم در حدی که بتونم ...
 
  • شروع کننده موضوع
  • #2

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
تعریف 1 :
مهندسی نرم افزار چیست ؟
اگه تو ویکیپدیا ببینین دقیقا مهندسی نرم افزارو اینجوری تعریف کرده
"مهندسی نرم‌افزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرم‌افزاری با کیفیت است"
توضیح : خوب شاید هممون کدنویسی کرده باشیم و برنامه هایی هرچند کوچیک نوشته باشیم اما این برنامه چقدر مهندسی شده؟مهندسی به چه کار نرم افزار میاد؟این روشی که همون اول شروع کنیم به نوشتن کد و دستامون بره رو کیبورد میتونه برای یه نرم افزار که قراره تحویل مشتری بدیم تا مدت طولانی از اون استفاده کنه موثر باشه؟یه نرم افزاری که مهندسی شده چه راهکارهایی ارایه میده برای اطمینان از کارکرد نرم افزار تو طولانی مدت ، قابلیت توسعه اون و قابلیت تست و نگهداری برنامه و خیلی از فاکتورهای یه نرم افزار باکیفیت و اصولی؟؟؟؟؟
 
  • شروع کننده موضوع
  • #3

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
تعریف مهندسی : مهندسی به بیان ساده یعن ارایه راهکار دقیق و اصولی و اگرهم راهکار دقیق وجود نداره ارایه یه راهکار بهینه برای حل موثر یک مسئله

پس برای یک مسئله راه حل های زیادی وجود داره اما کدومشو باید بکار ببریم و مطمئن ترین راه کار چیه ؟

بزارین تا مهندسی نرم افزار رو با مثلا مهندسی های دیگه مقایسه کنیم که البته به علت انعطاف پذیری نرم افزار نسبت به بقیه مهندسی ها تفاوت هست ولی خوب شما در نظر بگیر مثلا برای ساختن یه ساختمان یا یه سازه میتونیم بدون داشتن طرح و نقشه و انجام محاسبات مطمئن شروع بکار کنیم؟ قطعا اگه از یه مهندس عمران این سوال رو بپرسی بهت میخنده . شاید یه کارگر ساختمان که بر حسب تجربه مثلا یه اتاق سه در چهار ساخته (معادلش تو نرم افزار میشه یه قطعه کد که صرفا برای تفریح و یا استفاده کوتاه مدت و یا برای بیان یک مثال کدنویسی نوشته شده) به خودش افتخار کنه که چیز خوبی ساخته ولی قطعا یه ساختمون مدرن و بزرگ رو نمیشه با محاسبات الکی و اجرگذاشتن روهم ساخت . اره یه ساختمون مطمئن نیاز به مهندسی و اصول ریاضی داره تا ساخته شه که معادلش تو نرم افزار میشه یه برنامه بزرگ با چندصدهزارخط کد
 
  • شروع کننده موضوع
  • #4

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
پس یه نرم افزار اول از همه نیاز به یک طرح و نقشه و به بیان بهتر نیاز به طراحی داره . مهندسی نرم افزار دقیقا اون چیزیه که باهث میشه یه نرم افزار بطور موثر طراحی و تولید بشه
یکی از تفاوت های مهندسی نرم افزار با بقیه مهندسی ها اینه که نرم افزار چون یک محصول فیزیکی نیست و یک محصول منطقیه به همین خاطر این تصور وجود داره که تغیرات تو یه نرم افزار میتونه به طرز فجیهی اتفاق بیفته و تغییرات جزو ذات محصول نرم افزاریه و باید بنا به نیازهای مشتری و نیازهای روز بتونیم تو هر مرحله تولید نرم افزار جرئت تغییر بخش هایی از اون رو داشته باشیم پس مهندسی نرم افزار اصولی رو ارائه میده تا تغییرات بتونن تو کمترین زمان ممکن و کمترین تاثیرپذیری از بخش های مختلف اون انجام بگیره . تغییزات تو نرم افزار میتونه حتی بعد از این که نرم افزار تحویل مشتری شد هم اتفاق بیفته اما اگر شما به یه مهندس سازه که مثلا یه پل ساخته بگین تغییرش بده قطعا میتونه در خیلی مواقع غیرممکن باشه و جناب مهندس با یک لایک درست حسابی جوابتونو بده. پس یکی از مشکلات بزرگ سیستم های نرم افزاری این تغییرات هستن . قطعا اگه ویندوز یا مثلا ورد مایکروسافت از همون موقع که تولید شدن خودشون رو با تغییرات مچ نکنن الان به تاریخ پیوسته بودن
 
  • شروع کننده موضوع
  • #5

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
مراحل تولید نرم افزار :
1 تحلیل نیازمندی ها : چه چیزهایی نیاز داریم
2 طراحی سطح بالا و معماری نرم افزار : تعیین اجزای کلی نرم افزار و نحوه ارتباط ان اجزا با هم . بحث معماری نرم افزار خیلی وسیعه یه کتاب چندهزار صفحه ای میطلبه
3 طراحی جزیی یا سطح پایین : به جزییات طراحی بخش های مختلف میپردازه مثلا طراحی کلاس ها و ...
4 بخش تولید نرم افزار : اینجا برنامه نویس ها دست به کار میشن و کد میزنن . البته کدنویسی هم قواعد خاصی داره که باید رعایت شه اونم وسیعه به اندازه یه کتاب چندهزار صفحه ای خخخخخخ
5 تست نرم افزار : اینکه بخش های مختلف نرم افزار درست کار میکنه یا نه
6 استقرار نرم افزار : مرحله اماده سازی و تحویل نرم افزاره
7 نگهداری نرم افزار : شاید باورتون نشه اما طبق تجربه بزرگان چیزی حدود بیش از 80 درصد وقت تیم نرم افزاریو میگیره و وقتی نرم افزار تحویل داده شد تازه این مرحله شروع میشه

هرکدوم از بخش های بالا اونقدر جزییات دارن که حتی بشه هرکددمو به عنوان یه رشته دانشگاهی در نظر گرفت که مستلزم پاس کردن مباحث زیادی تو هر یخش است پس مهندس نرم افزار شدن کار ساده ای نیست و نمیشه به راحتی مهندس طرح های بزرگ شد
 
آخرین ویرایش:
  • شروع کننده موضوع
  • #6

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
  • شروع کننده موضوع
  • #10

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
اما بخش های 4 و 5
کتاب تو این زمینه زیاده مثلا واسه نوشتن یه کد تمیز و یا خوانا مبحث clean code رو دنبال کنین . چون تو خیلی از مواقع شما کدهاتونو برای خودتون نمینویسین بلکه برای دیگران مینویسین و یا اگر حتی برای خودتون هم مینویسین اگر چند هفته دیگه به کدهاتون که میتونه هزار خط کد باشه نیگاه کنین هیچی ازش متوجه نمیشین پس اصول کدنویسی تمیز رو همیشه رعایت کنین مثله انتخاب اسامی بامعنی برای متغییرها و کلاس ها و یا ساده سازی حلقه ها و ... و بحث بعدی بحث بهبود کد یا ریفکتورینگ هست که کتاب زیاده تو این زمینه

تست هم میتونه به دو صورت انجام بشه البته بحث تست نرم افزار خیلی جزییات داره و معمولا تو یه تیم نرم افزاری افراد خاصی تحت عنوان تستر واگذار میکنن و شامل انواع مختلف تست هست که دو نمونش خیلی کاربردیه :
تست واحد : هر یخش از برنامه مثله یه متد یا کلاس که به بخش های کوچیکتر قابل تقسیم نیست یه واحد یا یونیت نامیده میشه باید تک تک یونیت ها ی برنامه مورد تست و بازبینی قرار بگیرن
یه نوع تست دیگه هست که بیشتر رو ارتباط بین یونست ها تاکید داره وارتباطات اون ها رو تست میکنه و انواع مختلف دیگه تست هم داریم
 
  • شروع کننده موضوع
  • #11

Asdfghjk

...
ارسال‌ها
263
امتیاز
696
نام مرکز سمپاد
...
شهر
...
سال فارغ التحصیلی
1391
رشته دانشگاه
مهندسی نرم افزار
و اما علوم کامپیوتر :
مباحث نظری و تئوری علم کامپیوتره و یک علمه تا یک مهارت . اصول ریاضی ژیادی داره و اصلا کسی که علوم کامپیوتر میخونه همش تو دانشکده ریاضیه
این رشته یه رشته پایه هست و ارتباط اون با مهندسی نرم افزار مثه ارتباط فیزیک مکانیک با مهندسی مکانیک و یا فیزیک الکتریسیته با مهندسی برق هست
هدف یه علوم کامپیتری ارایه نظریه و جمع اوری تحلیل و دسته بندی اطلاعاتیه که میتونه تو مهندسی نرم افزار هم کاربرد داشته باشه اصطلاحا دانشمند تحویل میده تا مهندس و کارش بیشتر تحقیقاتیه تا عملی
 
بالا