یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار – قسمت دوم

یک دانشجوی نرم افزار پس از نا امید شدن از شرکت های نرم افزاری، برای کسب تحربه و درآمد در زمینه نرم افزار چه باید بکند؟

قسمت دوم : راه های جایگزین (کار نیمه وقت در شرکت های نرم افزاری) برای کسب تجربه و در آمد در زمینه نرم افزار

درادامه ی نوشته قبلی در این مطلب قصد داریم تا راه های دیگر کسب تجربه و احیاناً درآمد را در زمینه کارهای نرم افزاری برای دانشجویان نرم افزار (یا علاقه مندان این رشته) را مورد بررسی قرار دهیم. حتماً مطلب قبلی را به علاوه کامنت هایش مطالعه کنید، به نظرم یکی از مفیدترین مطالبی بود که در وبلاگ نوشتم. کامنت های دوستان واقعاً با ارزش هستند. بیشتر دوستان تجربیات خود را در این مورد بیان کرده اند.
همان طور که در این مطلب مشاهده نمودید و بر اساس نظریات دوستانی که لطف کردند و تجربه خودشان را با ما به اشتراک گذاشتند، اکثر شرکت های نرم افزاری شرایطی برای همکاری دارند که یک دانشجوی معمولی شرایط آن ها را ندارد. شرایطی مثل : کارت پایان خدمت، ضمانت های چکی و سفته ای با ارقام بالا، حضور تمام وقت در شرکت و … اصولاً شرایط یک دانشجو نیست، مخصوصاً اگر فرد، دانشجوی شهر دیگری باشد. متاسفانه در برخی موارد درخواست هایی از دانشجو می شود که فرد دانشجو به علت کم تجربگی و غرور بیجا قادر به انجام آن ها نیست!
البته من قصد ندارم در این سری مقالات به صورت یکطرفه از دانشجوها (مثل خودم) طرفداری کنم و تمام شرکت های نرم افزاری را مقصر بدانم و زیر سئوال ببرم. یکی دو تا از دوستان در کامنت های با ارزششان این نکته را ذکرکردند که بایستی در این مورد به پیشینه شرکت مربوطه و ضررهایی که از طرف افراد سودجو کرده اند نیز توجه نمود. افرادی که به عنوان برنامه نویس در شرکتی کار می کنند و ایده های آن ها را می دزدند یا کدهای محصولات را در جای دیگری استفاده می کنند. به همین دلیل شرکت ها محبورند و یا تمایل دارند هنگام استخدام یک فرد مخصوصاً به عنوان برنامه نویس، از او ضمانت های سنگین بخواهند. هر چند من با این قضیه خیلی مشکل دارم و اصلاً به آن اعتقادی ندارم.
در مطلب قبلی، با طرح یک داستان واقعی، زوایای مختلف یافتن کار نیمه وقت در شرکت های نرم افزاری را بررسی کردیم به جز موردی که به خیر و خوشی دانشجو در یک شرکت استخدام شود. که البته به نظرم این سناریو نیازی به مطرح شدن نداشت. قصدم از بیان این ماجرا پرداختن به مشکلات آن بود و احیاناً سوء استفاده هایی که ممکن است یک شرکت نرم افزاری از یک دانشجو بکند.
هر چند کار کردن در یک شرکت نرم افزاری در ایران می تواند در آینده شغلی شما تاثیر داشته باشد و تجربه هایی کسب کنید که در هیچ جای دیگری نمی توانید آن ها را بدست آورید، اما متاسفانه امکان اینکه در یک شرکت خوب با موقعیت مناسب مشغول به کار شوید که با شرایط دانشجویی شما هم سازگار باشد، تقریباً بسیار پائین می باشد! پس در این وضعیت چه کار باید کرد؟ آیا باید بیخیال کار و کسب تجربه در دوران دانشجویی شوید و فقط فکر درس خواندن باشید یا راه جایگزینی برای کار کردن و کسب تجربه در زمینه نرم افزار پیدا کنید!؟
در این مورد می توان به کارهای دیگری دست زد که البته نمی توان نام آنها را تجربه در زمینه نرم افزار گذاشت. مثل باز کردن یک خدمات کامپیوتری، انجام تعمیرات سخت افزاری و نرم افزاری،… که هیچ کدام موضوع بحث ما نخواهد بود. اگر به این کارها راضی می شوید لازم نیست ادامه متن را بخوانید!
راه های جایگزینی که می توان از طریق آن ها برای کسب تجربه در زمینه نرم افزار و احیاناً کسب درآمد اقدام نمود :

  • انجام پروژه های نرم افزاری : شما به صورت یک پیمانکار نرم افزاری مستقل برای اشخاص، سازمان ها و شرکت های مختلف پروژه های نرم افزاری انجام می دهید. در اینجا شما نرم افزاری کاملاً سفارشی بر اساس سلایق کارفرما می سازید. که البته به همین راحتی ها هم نیست. صرف نظر از بحث تکنیکی قضیه، مسائلی وجود دارد که ما دانشجوها از آن بی خبریم! (در مطلب بعدی به این موضوع خواهیم پرداخت)
  • تولید نرم افزار : شما به صورت مستقل بسته نرم افزاری تولید می کنید و آن را به فروش می رسانید. در این روش شما هم سفارش دهنده هستید و هم تولید کننده. باید به مسائل زیادی توجه کنید اما ریسک و فشار کمتری نسبت به روش «انجام پروژه» به شما وارد خواهد شد. فقط بحث بازاریابی در این روش بسیار مهم و حیاتی است.
  • همکاری در پروژه های نرم افزاری اوپن سورس : شما یکی از نرم افزارهای اوپن سورس را انتخاب کرده و با تیم سازنده آن همکاری می کنید. این همکاری می تواند به صورت بومی سازی و یا سفارشی سازی نرم افزار مربوطه برای کاربردهای خاص باشد. حتی می توانید فراتر از این ها عضو اصلی تیم توسعه یک پروژه نرم افزاری اوپن سورس شوید. در این روش تجربه های خوبی بدست خواهید آورد، البته که می توانید از این راه کسب درآمد هم بکنید.

فعلاً من همین سه روش به ذهنم می رسد که در مطالب آتی به صورت مفصل در مورد هریک از روش های بالا توضیح خواهم داد. اگرشما هم ایده ای به نظرتان می رسد حتماً با من و خوانندگان وبلاگ به اشتراک بگذارید. امیدوارم مانند مطلب قبل ما را از نظرات ارزشمندتان بی بهره نگذارید.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

کمی (درد دل) در مورد رشته نرم افزار

قبلاً اگر یادتان باشد، عنوان این وبلاگ «نوشته های یک دانشجوی نرم افزار» بود. با اینکه خیلی وقت است عنوان وبلاگم را تغییر دادم اما خیلی از دوستانی که قبلاً به این وبلاگ لینک دادند، همان عنوان قبلی را در عنوان لینک من دارند. حال اگر کسی از وبلاگ این دوستان روی لینک من کلیک کند با وبلاگی روبرو خواهد شد که مطالب به در بخوری در مورد «رشته تحصیلی نرم افزار» ندارد. هرچند که خیلی وقت پیش مطالبی در مورد رشته نرم افزار و مهندسی نرم افزار نوشتم اما احساس می کنم کسی که دنبال اطلاعاتی در مورد «رشته نرم افزار» است خیلی بیشتر از این ها از نوشته های یک دانشجوی نرم افزار انتظار دارد. کمبود مطالب مناسب در مورد این رشته در سطح وبلاگستان فارسی نیز بر علت های بالا اضافه شد تا من وظیفه ی خود بدانم که در این مورد بیشتر بنویسم و رشته تحصیلی که در ایران بسیار مورد بی اعتنایی قرار گرفته (البته نه از نظر تعداد داوطلبان، بلکه از نظر کیفی) است را هرچه مناسب تر معرفی کنم و در مورد مشکلات و خوبی های آن صحبت کنم.

با مقدمه ای که در بالا ذکر کردم می خواهم در این مطلب کمی در مورد رشته تحصیلی محبوبم «مهندسی نرم افزار» صحبت کنم. این روزها اگر کسی از شما بپرسد «در چه رشته ای درس می خوانی؟!» و شما در جواب آن ها بگویید «کامپیوتر» ، مطمئن باشید طرف با پوزخندی خواهد گفت : «آخه کامپیوتر هم شده رشته، پسر 10 ساله من هم بلده با کامپیوتر خیلی کارا بکنه، مخ کامپیوتره!»… باور کنید این گقتگو کاملاً واقعیست و من آن را تجربه کرده ام. البته هر کس از من این سئوال را می کند من در جوابش می گویم «نرم افزار» نه «کامپیوتر»، حداقل اینطوری جمله های بعدی پیش نخواهد آمد چون طرف فرق نرم افزار را با کامپیوتر نمی داند. البته این طرز فکرها تا حدودی هم بی ربط نیست، وقتی یک لیسانس نرم افزار یا سخت افزار نمی تواند حتی یک ویندوز نصب کند یا چند قطعه را سوار کیس کند، نمی توان بیشتر از این انتظاری داشت. این مشکل هم بر می گردد به نظام آموزشی ما و البته به دانشجویان این رشته که بعضی وقت ها واقعاً کم سواد اند. سواد، پاس کردن واحدهای درسی نیست، سواد نمره بالا گرفتن در درس های ریاضی مهندسی و اندیشه اسلامی نیست، سواد در این رشته تخصص، آگاهی و به روز بودن است.

از طرز فکر افراد در مورد این رشته بگذریم چون این امر در ماهیت رشته نرم افزار خدشه ای ایجاد نمی کند و تقریباً در مقابل مشکلات دیگر مسئله ی مهمی نیست. یکی از مشکلات دیگری که در این رشته تحصیلی وجود دارد که البته در بسیاری از رشته های دانشگاهی دیگر هم وجود دارد اما در این رشته کمی بیشتر خود را نشان می دهد، داوطلبان بسیار زیادی است که بدون توجه به زوایای مختلف رشته نرم افزار، آینده شغلی و توانایی های آن، این رشته را برای تحصیل در دانشگاه انتخاب می کنند. البته به نظرم این مسئله در سال های اخیر کمتر شده و رشته های جدیدتر جایگزین آن شده اند و دیگر رشته نرم افزار از مد افتاد. باور کنید خیلی ها به خاطر مد جامعه سراغ یک رشته خاص می روند. این گونه افراد پس از گذراندن دو-سه ترم واقعاً پشیمان و سرخورده می شوند و هر جا که صحبتی از انتخاب رشته می شود از این رشته بد می گویند تا عدم موفقیت خود را توجیه کنند. به هر حال چه بخواهیم چه نخواهیم این دسته از افراد طیف وسیعی از دانشجویان رشته نرم افزار را تشکیل می دهند. سعی می کنم در نوشته های بعدی در مورد انواع افرادی که رشته نرم افزار را به عنوان رشته تحصیلی خود انتخاب می کنند بیشتر صحبت کنم تا به یک نتیجه ی مناسب برسیم.

بزرگترین مشکلی که رشته نرم افزار در محیط های آکادمیک کشور ما با آن روبرو است، سیستم آموزشی بسیار نا مناسب و نا کارآمد ماست. همان طور که می دانید رشته نرم افزار نسبت به رشته های علمی دیگر پیشرفت های سریع تر و بیش تری دارد. هر روز یک فناوری جدید معرفی می شود و نیاز به آموزش به روز در این رشته بسیار حیاتی است. این در حالی است که در کشور ما واحدهای درسی را بر اساس 10 سال قبل تنظیم کرده اند و دروس تخصصی ما با الگوهای 20 سال قبل تدریس می شوند. دانش اساتید این رشته همانی است که مثلاً در 7-8 سال قبل مدرک خود را گرفته اند و در این مدت هیچ چیز جدیدی به آن اضافه نکرده اند. البته حق هم دارند، به قول یکی از همین اساتید، بعد از گرفتن مدرک دو سال سربازی و پس از آن هم که گرفتار مشکلات ازدواج و مسئولیت زندگی شدند که اصلاً وقت به روز کردن دانش خود را نداشته و نخواهند داشت! این وضعیت وقتی وخیم تر می شود که بدانید مدیران رده بالا، سازمان های آموزش عالی و آموزش و پرورش نیز در همان 10-20 سال گذشته سیر می کنند و اقدامات نامناسبی انجام می دهند تا هر روز وضع این رشته تحصیلی مهم از دیروز بدتر شود. یکی از کارهای مهمی که در این زمینه انجام دادند، حذف پاسکال در دوره هنرستان و جایگزین نمودن آن با ویژوال بیسیک بوده است!!

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

پ.ن : معذرت میخوام که این مطلب موضوعات پراکنده ای دارد، این را در حد یک درد دل کوچک قبول کنید.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

مهندسی خواسته ها

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

خواسته های نرم افزار
درک ماهیت مسائل ، به خصوص اگر سیستم جدید باشد بسیار دشوار است. در نتیجه دقیقا نمی توان تعیین کرد که سیستم چه کاری باید انجام دهد. توصیف خدمات و محدودیت ها ، خواسته های مربوط به سیستم و فرآیند یافتن ، تحلیل ، مستند سازی و کنترل این خدمات و محدودیت ها در این فاز انجام می گیرد. کلیه خواسته های این پروژه به دو دسته خواسته های عملکردی و خواسته های غیر عملکردی تقسیم می شوند.

خواسته های عملکردی
خواسته های عملکردی مربوط به نرم افزار ، عملکرد یا خدماتی را توصیف می کند که سیستم باید انجام دهد. در حقیقت نرم افزار برای برآورده کردن این خواسته ها بوجود آمده است. این خواسته ها به نوع نرم افزار و کاربران آن بستگی دارد. این خواسته ها امکانات خاصی را تعریف می کنند که باید توسط سیستم نرم افزاری ارائه شوند. این ها از اسناد خواسته های کاربر استخراج می شوند. خواسته های عملکردی، عملکرد تفضیلی سیستم، ورودی ها و خروجی ها و احیاناً استثناها را شامل می شود. این خواسته ها امکانات خاصی را تعریف می کنند که باید توسط سیستم ارائه شوند.

خواسته های غیر عملکردی
خواسته هایی هستند که مستقیماً به عملکردهای مشخص شده سیستم نرم افزاری مربوط نمی شوند. وجود یا عدم وجود هر کدام از خواسته های غیرعملکردی در ماهیت اصلی پروژه و هدف کلی آن تاثیر گذار نخواهد بود اما این جمله معنیش این نیست که این خواسته ها اهمیت ندارند. به طور مثال ممکن است رابط کاربری برای یک نرم افزار به عنوان خواسته های غیر عملکردی مطرح شود اما اگر رابط کاربری نداشته باشد استفاده از آن بسیار مشکل خواهد بود (مانند سیستم عامل یونیکس/لینوکس). در برخی مواقع ممکن است برآورده نکردن یک خواسته غیر عملکردی به فلج شدن کل سیستم منجر شود.

در کل تمایز میان انواع مختلف خواسته ها کار آسانی نیست و برای این کار باید با راه حل های کارشناسی و مهندسی نرم افزار خواسته های یک سیستم نرم افزاری را مشخص و سپس دسته بندی نمود.

پ.ن : یکی از دوستان باگ کوچکی در برنامه Darkpad پیدا کرده بود که خوشبختانه رفع شد. (با تشکر از امیرحسین عزیز) بنده به اشتباه کتابخانه Qt را در برنامه include کرده بودم که Darkpad هیچ نیازی به آن نداشت. به همین خاطر در هنگام اجرا با خطایی مبنی بر یافت نشدن فایل qtintf70.dll دریافت می کردید. نسخه جدید (0.5 آزمایشی) چنین مشکلی ندارد و در همه سیستم عامل های ویندوز بدون نیاز به نصب اجرا خواهد شد. Darkpad 0.5 را از اینجا دریافت کنید.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

نوشته های دیگر من درباره مهندسی نرم افزار

زمان بندی پروژه های نرم افزاری

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

farasun.wordpress.com

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

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

فرآیند زمان بندی پروژه های نرم افزاری

فرآیند زمان بندی پروژه های نرم افزاری

مدیران علاوه بر زمان باید منابع مورد نیاز برای تکمیل هر وظیفه را نیز برآورده کنند. منبع اصلی، منابع انسانی اند. سایر منابع عبارت اند از امکانات نرم افزاری، سخت افزاری و هزینه سفر کارکنان پروژه و …
زمان بندی پروژه معمولاً به صورت مجموعه ای از نمودارها نمایش داده می شود که نقص کار، وابستگی های فعالیت ها و انتصاب کارکنان را نشان می دهند. ابزارهای مدیریت زمان بندی پروژه، مثل Microsoft Project برای تولید خودکار نمودارها به کار می روند.
زمان بندی درست می تواند یک پروژه شکست خورده را به یک پروژه موفق تبدیل کند و بالعکس، یک زمان بندی نادرست می تواند یک پروژه موفق را به مرز نابودی برساند. همان طور که در ایران نیز شاهد بوده ایم، پروژه های بسیاری با صرف هزینه های زیاد و حتی پشتیبانی دولتی به علت عدم زمان بندی مناسب و پیش بینی های مناسب یا کاملاً نابود شده اند و یا نیمه تمام رها شده اند. مبحث زمان بندی کمتر در شرکت های کوچک و متوسط نرم افزاری مطرح می شود و این مطلب اثر نامطلوب خود را به صورت مستقیم در محصول و مشتریان آن شرکت خواهد گذاشت. این مسئله در بسیاری از شرکت های نرم افزاری ایران یا نادیده گرفته می شود و یا با روش های نادرست و ناقص اجرا می شود. شرکت های کوچک با مشتریان محدود که اصلاً با این مورد کاملاً غریبه اند و اجرای این روش ها را کاری بیهوده می پندارند. البته در مفید بودن آن شکی ندارند اما از مشکلات و هزینه های آن هراس دارند.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

مسئولیت های تخصصی و اخلاقی یک مهندس نرم افزار

یک مهندس نرم افزار، همانند سایر مهندسین باید بپذیرد که مسئولیت های شغلی اش فراتر از مهارت های تکنیکی و تخصصی و کاری اوست. کارش در یک چارچوب معتبر و اجتماعی انجام می شود. مهندسی نرم افزار از قوانین محلی، ملی و بین المللی پیروی می کند. یک مهندس نرم افزار باید مسئولانه و با توجه به اخلاق اجتماعی رفتار کند. بدیهی است که مهندسین باید استانداردهای عادی صداقت و جامعیت را رعایت کنند. آن ها نباید از مهارت ها و توانایی های خود سوء استفاده کنند یا طوری عمل کنند که منجر به عدم اعتماد و بی آبرو یی مهندسین رشته نرم افزار شوند. ولی مواردی وجود دارند که استانداردهای قابل قبول توسط قانون محدود نمی شوند، بلکه تحت کنترل مسئولیت حرفه و شغل است. بعضی از این ها عبارتند از :

  • محرمانگی : یک مهندس نرم افزار، بدون توجه به این که آیا توافق هایی بر سر میزان محرمانگی حاصل شده است یا نه، باید به کارکنان و مشتریان خود احترام بگذارد.
  • صلاحیت : یک مهندسن نباید سطح صلاحیت خود را متفاوت از آن چه که واقعیت دارد، نشان دهد. نباید کارهایی را بپذیرد که در حد صلاحیت او نیست و قادر به انجام آن ها نخواهد بود.
  • حقوق معنوی : یک مهندس نرم افزار باید از قوانین دولتی در استفاده از حقوق معنوی مثل کپی رایت، حق انحصاری اختراع و غیره با خبر باشد (البته در ایران فعلاً صادق نیست). باید توجه داشته باشد که حقوق معنوی مشتریان و کارکنان محفوظ است.
  • عدم سوء استفاده از کامپیوتر : یک مهندس نرم افزار نباید با استفاده از تخصص و تکنیک ها و مهارت های خود از کامپیوتر های دیگران سوء استفاده کند. مثل استفاده از منابع سیستم دیگران و یا ویروسی کردن آن ها.

بدین ترتیب، موسسات و سازمان های تخصصی نقش مهمی دارند. سازمان هایی مثل ACM ، IEEE و BCS دستورالعمل های اخلاقی و رفتاری را منتشر کرده اند و اعضای این سازمان ها هنگام عضویت، تعهد می دهند که این اصول را رعایت کنند. ACM و IEEE سعی کردند دستورالعمل های اخلاقی و تخصصی را بوجود آورند. هدف این دستورالعمل را در زیر شرح می دهیم.

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

اصول اخلاقی مهندسی نرم افزار (ACM/IEEE-1999) مشاهده نسخه اصلی

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

  1. Public : مهندسین نرم افزار به نفع عموم کار می کنند.
  2. Client and Employer : مهندسین نرم افزار طوری عمل می کنند که به نفع کارکنان و مشتریان باشد و با نفع عمومی سازگاری داشته باشد.
  3. Product : مهندسین نرم افزار تضمین می کنند که محصولات و اصلاحات آن ها از بالاترین استاندارد تخصصی پیروی می کنند.
  4. Judgement : مهندسین نرم افزار جامعیت و استقلال را در قضاوت تخصصی خود حفظ می کنند.
  5. Management : مدیران و رهبران مهندسین نرم افزار، توسعه و نگهداری نرم افزار را بر اساس اصول اخلاقی انجام می دهند.
  6. Profession : مهندسین نرم افزار جامعیت و شهرت را مطابق با منافع عموم گسترش می دهند.
  7. Colleagues : مهندسین نرم افزار حامی همکاران خود هستند و با آن ها با عدالت برخورد می کنند.
  8. Self : مهندسین نرم افزار سعی در آموزش بیشتر در حرفه خود دارند و اخلاقیات را نیز رعایت می کنند.

حالا به من بگید چند تا مهندس نرم افزار با مشخصات بالا سراغ دارید؟

رهیافت آبشاری

اولین مدل معروف فرآیند توسعه نرم افزار، رهیافت آبشاری است که از سایر فرآیندهای مهندسی ناشی شده است. مراحل اصلی این مدل، به فعالیت های اساسی توسعه نرم افزار نگاشت می شود.

1- تحلیل و تعریف خواسته ها : خدمات سیستم، محدودیت ها و اهداف از طریق مشورت با کاربر یا کاربران مشخص می شوند. این ها به طور مشروح تعریف می شوند و به صورت مشخصات سیستم مورد استفاده قرار می گیرند.

2- طراحی سیستم و نرم افزار : فرآیند طراحی سیستم ها، خواسته ها را به سیستم های نرم افزاری و سcrystal_clear_app_3d.pngخت افزاری تقسیم می می کند. بدین ترتیب، یک معماری کلی بوجود می آید. طراحی نرم افزار شامل شناسایی و توصیف انتزاع های سیستم نرم افزار و روابط آن هاست.

3- پیاده سازی و تست واحد : در این مرحله، طراحی نرم افزار به صورت مجموعه ای از برنامه ها و یونیت های جدا از هم در می آیند. در تست واحد بازبینی می شود که هر واحد خواسته های مورد نظر را برآورده می کند.

4- جامعیت و تست سیستم : واحدهای اولیه برنامه یا برنامه ها جامعیت پیدا می کنند و به عنوان یک سیستم کامل تست می شود تا تضمین شود که خواسته های نرم افزار برآورده شده اند. پس از تست، سیستم نرم افزار به مشتری تحویل داده می شود.

5- به کارگیری و نگهداری : این مرحله، معمولاً طولانی ترین مرحله چرخه حیات نرم افزار است. سیستم نرم افزاری نصبabshari.jpg و به کار گرفته می شود. نگهداری شامل تصحیح خطاهایی است که در مراحل اولیه چرخه حیات برطرف نشدند، شامل بهبود پیاده سازی های واحدهای سیستم و اصلاح خدمات سیستم جهت پاسخگویی به نیازهای جدید نیز است.

در واقع، نتیجه هر مرحله یک یا چند سند است که مورد موافقت قرار گرفته اند. هر مرحله فقط با پایان یافتن مرحله قبلی شروع می شود. در هنگام طراحی، مشکلات مربوط به خواسته ها شناسایی می شوند، در هنگام کدنویسی مشکلات طراحی پیدا می شوندو الا آخر. فرآیند نرم افزار یک مدل ساده ی خطی نیست، بلکه دنباله ای از فعالیت ها تکرار می شوند.

به دلیل هزینه های تولید و پذیرش اسناد، هر تکرار شامل دوباره کاری است و هزینه ی آن بالاست. بنابراین، پس از چند تکرار، باید آن مرحله را پذیرفت و به مراحل بعدی پرداخت. مشکلات احتمالی به مراحل بعدی یا برنامه نویسی واگذار می شود. بدین ترتیب، ممکن است سیستم تمام خواسته های کاربر را برآورده نکند یا ساختار خوبی برای سیستم طراحی نشود.

در هنگام آخرین مرحله چرخه ی حیات (به کار گیری و نگهداری)، نرم افزار به کار گرفته می شود. خطاها و کمبودهای مربوط به خواسته های اصلی نرم افزار مشخص می شوند. خطاهای برنامه و طراحی، ظاهر می شوند و نیاز به عملکردهای جدید شناسایی می گردند. بنابراین، سیستم باید تکامل یابد تا مورد استفاده قرار گیرد. انجام این تغییرات (نگهداری نرم افزار) ممکن است منجر به تکرار مراحل قبلی فرآیند شود.

مشکل عمده ی مدل آبشاری این است که تقسیم بندی پروژه به این مراحل مجزا، اصلاً کار آسانی نیست. معنایش این است که این تقسیم بندی خود به تجزیه و تحلیل بعضاً پیچیده ای نیازمند می باشد. به هر حال، رهیافت آبشاری نشانگر عمل مهندسی است. در نتیجه، فرآیندهای نرم افزار مبتنی بر این رهیافت، هنوز برای توسعه نرم افزار به کار می روند، به خصوص اگر به عنوان بخشی از پروژه مهندسی سیستم های بزرگ باشد.

پ.ن : این مدل، قدیمی ترین مدل توسعه ی نرم افزار است که هنوز هم توسط شرکت ها و گروه های نرم افزاری سراسر دنیا مورد استفاده قرار می گیرد.

دریافت این نوشته در قالب PDF