خلاصه طرح
در این پروژه به بررسی شرکت تولید کننده نرم افزارهای رایانه ای از دیدگاه کارآفرینی پرداخته شده است ، هدف از این پروژه بررسی توجیه اقتصادی طرح مذکور میباشد ، برای رسیدن به هدف مورد نظر با بهره گیری از روش های آماری و اقتصادی و برآورد مالی طرح مورد بررسی قرار گرفته است ، این پروژه مشتمل بر پنج فصل میباشد ، فصل اول معرفی طرح است ، نام طرح ، ظرفیت تولید ، محصولات تولیدی و ... فصل دوم به بررسی نیروی انسانی مورد نیاز پرداخته است ، فصل سوم شامل هزینه های مورد نیاز طرح میباشد ، فصل چهارم شرح فرآیند تولید محصول میباشد ، در این فصل به بررسی اطلاعات فنی مورد نیاز پرداخته شده است ، فصل پنجم چکیده مطالعات فنی و اقتصادی طرح میباشد .
پیشگفتار :
مهندسی نرمافزار پیشهای است که به یاری دانش رایانه و دیگر فناوریها و روشها به آفریدن و نگاهداری نرمافزار رایانهای میپردازد. مسائل اصلی مهندسی نرمافزار تولید نرمافزار بر اساس موارد زیر است:
الزامات تعیین شده
در زمان تعیین شده
در محدودهٔ بودجه پیشبینی شده
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههای از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرم افزار اداری، بازیهای رایانهای، و اینترنت. فناوریها و خدمات مهندسی نرم افزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: دادگان، زبانها، کتابخانهها، الگوها، فرآیندها و ابزار.
فصل اول
فصل اول – معرفی طرح
-2-مشخصات محصول
1-1-2- نام و کاربرد محصول:
ایجاد و راه اندازی شرکت و موسسه های تولیدی نرم افزار های رایانه ای ، از شرکت ها به صورت گروهی در پروژه های برنامه نویسی و طراحی وب برای شرکت های صنعتی و غیره فعالیت می نمایند
2-1-2-مشخصات فنی محصول
تولید و ارائه نرم افزار های مختلف صنعتی و تجاری و حسابداری و بازرگانی و خدماتی برای شرکت های مختلف .
-1-2-معرفی روشهای تولید
استفاده از روش تولید گروهی و با سیستم های مجتمع و شی گرای و طراحی متناوب با استفاده از نیروی کاری مناسب و در زمان تولید مشخص
-1-2-تشریح مختصر فرایند
تولید و ارائه انواع نرم افزار های رایانه ای
فصل دوم
تعیین ظرفیت
فصل دوم – تعیین ظرفیت
تعیین ظرفیت تولید
ردیف |
نام محصول |
ظرفیت تولید سالانه |
ظرفیت تولید ماهانه |
ظرفیت تولید روزانه |
1 |
تهیه تجهیزات مورد نیاز |
|
|
- |
2 |
نصب وراه اندازی شبکه |
- |
- |
--------- |
3 |
نصب و تجهیز سیستم امنیتی |
- |
- |
- |
4 |
نصب سیستم عامل ونرم افزارهای کاربردی |
- |
- |
- |
5 |
تولید نرم افزار |
- |
- |
---------- |
6 |
پیاده سازی وب سایت |
- |
- |
- |
برآورد میزان مصرف مواد اولیه و قطعات خریدنی
ردیف |
نام ماده اولیه/ قطعات خریدنی |
مشخصات فنی |
مورد مصرف در محصول |
میزان مصرف |
مصرف سالیانه |
منبع تامین |
در محصول |
مقدار |
واحد |
داخلی |
خارجی |
1 |
سیستم و ایستگاه رایانه ای |
- |
- |
- |
6 |
|
* |
|
2 |
سیستم های کنترل شبکه ای |
|
|
|
3 |
|
* |
|
3 |
سیستم های نرم افزاری تحت شبکه |
|
|
|
3 |
|
* |
|
4 |
سیستم های ایجاد امنیت شبکه |
|
|
|
6 |
|
* |
|
شرح فرایند واطلاعات فنی مورد نیاز
تعریف مهندسی نرم افزار
مهندسی نرم افزار طراحی،برنامه نویسی، توسعه، مستند سازی و نگهداری نرم افزار با بکارگرفتن روشهای فنی و عملی از علوم کامپیوتر ، مدیریت پروزه ، مهندسی ، محدوده کاربرد، طراحی رابط، مدیریت تجهیزات دیجیتال و سایر زمینهها است.
اصطلاح مهندسی نرم افزار بعد از سال ۱۹۶۸ شناخته شد، طی کنفرانس مهندسی نرم افزار ناتو ۱۹۶۸ (که در گارمیش آلمان برگزار شد) توسط ریاست کنفرانس F.L. Bauer معرفی شد، و از آن پس بطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسی نرمافزار عموماً به معانی مختلفی به کار میرود :
بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که قبلا برنامهنویسی و تحلیل سیستمها نامیده میشد.
بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی کامپیوتر، در مقابل تئوری برنامه نویسی کامپیوتر، که علوم کامپیوتر نامیده میشود.
بهعنوان اصطلاح مجسم کننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی کامپیوتر ، که اصرار میکند که مهندسی نرمافزار، بجای انکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمع کردن و تدوین روشهای عملی توصیه شده به شکل متدولوژیهای مهندسی نرم افزارطرفداری میکند.
مهندسی نرم افزار عبارتست از : الف) کاربرد یک رویکرد سیستماتیک، انتظام یافته، قابل سنجش نسبت به توسعه، عملکرد، و نگهداری نرم افزار، که کاربرد مهندسی در نرم افزار است و ب) مطالعه روشهای موجود در استاندارد IEEE
محدوده مهندسی نرم افزار و تمرکز آن
مهندسی نرم افزار به مفهوم، توسعه و بازبینی یک سیستم نرم افزاری مربوط است. این رشته علمی با شناسایی، تعریف، فهمیدن، و بازبینی خصوصیات مورد نیاز نرم افزار حاصل سر و کار دارد. این خصوصیات نرم افزاری ممکن است شامل : پاسخگویی به نیازها، قابلیت اطمینان، قابلیت نگهداری، در دسترس بودن، قابلیت تست، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد مهندسی نرم افزار اشاره میکند به این خصوصیات با آماده کردن مشخصات معین طراحی و فنی که ، اگر بدرستی پیاده سازی شود، نرم افزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تامین میکند یا خیر.
مهندسی نرم افزار همچنین با خصوصیات پروسه توسعه نرم افزاری در ارتباط است. در این خصوص، با خصوصیاتی مانند هزینه توسعه نرم افزار، طول مدت توسعه نرم افزار، و ریسکهای توسعه نرم افزار درگیر است.
نیاز به مهندسی نرم افزار
نرم افزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژِی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیده ترین ماشینهای مدرن قابل مقایسهاند. بهعنوان مثال یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی خدود ده میلیون بخش دارد)، در حالی که نرم افزار هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
تکنولوژیها و روشهای عملی
مهندسین نرم افزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگارند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسین نرم افزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند : کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند : برنامه نویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرم افزار بایستی رسیدن به ایدههای جدید خارج از مدلهای طراحی شده قبلی باشد، که باید شفاف بوده و بخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرم افزار ایجاد شده ، هنوز هم بحث و جدلهای ماندگار درباره کیفیت نرم افزار ادامه دارند.
ماهیت مهندسی نرم افزار
David Parnas گفتهاست که مهندسی نرم افزار یک شکل از مهندسی است. Steve McConnell گفتهاست که هنوز اینطور نیست، ولی مهندسی نرم افزار باید یک شکل از مهندسی بشود. Donald Knuth گفتهاست که برنامه نویسی یک هنر است.
دیوان فعالیتهای آماری آمریکا دسته بندی کردهاست مهندسان نرم افزار را به عنوان زیرگروهی از «متخصصین کامپیوتر»، با فرصتهای شغلی ای مانند دانشمند کامپیوتر، برنامه نویس، و مدیر شبکه. BLS دسته بندی میکند تمام مهندسین دیگر این شاخه علمی ، که شامل مهندسین سخت افزار کامپیوتر نیز هست، را بهعنوان «مهندسین»
مدیریت ریسک در مهندسی نرم افزار :
مدیریت ریسک کاربرد سیستماتیک سیاستهای مدیریتی، رویهها و فرایندهای مربوط به فعالیتهای تحلیل، ارزیابی و کنترل ریسک میباشد. مدیریت ریسک عبارت از فرایند مستندسازی تصمیمات نهایی اتخاذ شده و شناسایی و بهکارگیری معیارهایی است که میتوان از آنها جهت رساندن ریسک تا سطحی قابل قبول استفاده کرد.
از طرف موسسه مدیریت پروژه، مدیریت ریسک به عنوان یکی از نه سطح اصلی «کلیات دانش مدیریت پروژه» معرفی شدهاست. در تعریف این موسسه، مدیریت ریسک پروژه به فازهای شناسایی ریسک، اندازه گیری ریسک، ارائه پاسخ (عکس العمل در مقابل ریسک) و کنترل ریسک تقسیم شدهاست. در این تعریف، مدیریت ریسک پروژه عبارت است از «کلیه فرایندهای مرتبط با شناسایی، تحلیل و پاسخگویی به هرگونه عدم اطمینان که شامل حداکثرسازی نتایج رخدادهای مطلوب و به حداقل رساندن نتایج وقایع نامطلوب میباشد».
در منابع مختلف، تعاریف دیگری نیز ارائه شدهاست. بنا بر نظر بوهم، مدیریت ریسک فرایندی شامل دو فاز اصلی است؛ فاز تخمین ریسک (شامل شناسایی، تحلیل و اولویت بندی) و فاز کنترل ریسک (شامل مراحل برنامه ریزی مدیریت ریسک، برنامه ریزی نظارت ریسک و اقدامات اصلاحی) میباشد. بنا به اعتقاد فیرلی مدیریت ریسک دارای هفت فاز است: ۱) شناسایی فاکتورهای ریسک؛ ۲) تخمین احتمال رخداد ریسک و میزان تاثیر آن؛ ۳) ارائه راهکارهایی جهت تعدیل ریسکهای شناسایی شده؛ ۴) نظارت بر فاکتورهای ریسک؛ ۵) ارائه یک طرح احتمالی؛ ۶) مدیریت بحران؛ ۷) احیا سازمان بعد از بحران.
موسسه مهندسی نرم افزار، به عنوان یکی از سازمانهای پیشرو در ارائه روشهای جدید در مدیریت پروژههای نرم افزاری، به مدیریت ریسک پروژه به عنوان فرایندی با ۵ فاز مجزا نگاه میکند (شناسایی، تحلیل، طراحی پاسخ، ردیابی و کنترل) که با یک سری عملیات انتقال ریسک مرتبط است.
موسسه مدیریت پروژه، در راهنمای خود در مورد کلیات دانش مدیریت پروژه (نسخه سال ۲۰۰۰)، برای فرایند مدیریت ریسک پروژه شش فاز را معرفی کردهاست: ۱) برنامه ریزی مدیریت ریسک، ۲) شناسایی، ۳) تحلیل کیفی ریسک، ۴) تحلیل کمّی ریسک، ۵) برنامه ریزی پاسخ ریسک و ۶) نظارت و کنترل ریسک. کلیم و لودین، برای مدیریت ریسک یک فرایند چهار مرحلهای را معرفی کردهاند (شناسایی، تحلیل، کنترل و گزارش) که در موازات چهار قدم معروف دمینگ در مدیریت پروژه (برنامه ریزی، اجرا، بررسی و عمل) قرار میگیرند.
چاپمن و وارد، یک فرایند مدیریت ریسک پروژه کلی را ارائه کردهاند که از نه فاز تشکیل شدهاست: ۱) شناسایی جنبههای کلیدی پروژه؛ ۲) تمرکز بر یک رویکرد استراتژیک در مدیریت ریسک؛ ۳) شناسایی زمان بروز ریسک ها؛ ۴) تخمین ریسکها و بررسی روابط میان آنها؛ ۵) تخصیص مالکیت ریسکها و ارائه پاسخ مناسب؛ ۶) تخمین میزان عدم اطمینان؛ ۷) تخمین اهمیت رابطه میان ریسک¬های مختلف؛ ۸) طراحی پاسخها و نظارت بر وضعیت ریسک و ۹) کنترل مراحل اجرا.
کرزنر، مدیریت ریسک را به صورت فرایند مقابله با ریسک تعریف کرده و آن را شامل مراحل چهارگانه زیر میداند: ۱) برنامه ریزی ریسک، ۲) ارزیابی (شناسایی و تحلیل) ریسک، ۳) توسعه روشهای مقابله با ریسک و ۴) نظارت بر وضعیت ریسکها.
کرزنر، مدیریت ریسک را به صورت فرایند مقابله با ریسک تعریف کرده و آن را شامل مراحل چهارگانه زیر میداند: ۱) برنامه ریزی ریسک، ۲) ارزیابی (شناسایی و تحلیل) ریسک، ۳) توسعه روشهای مقابله با ریسک و ۴) نظارت بر وضعیت ریسکها.
مراحل اصلی در پیادهسازی مدیریت ریسک
بسیاری از پروژهها که فرض میشود تحت کنترل هستند، با ریسک به عنوان رخدادی شناختهنشده روبرو گردیده و کوشش میکنند آن را کنترل کنند. اکثر پروژهها چنین رخدادهایی را به خوبی از سر رد میکنند ولی با یک تلاش جامع مدیریت ریسک ، رویدادهای ریسک قبل از وقوع، شناسایی و کنترل میگردند و یا برنامهای تهیه میشود که در زمان وقوع این رویدادها با آنها مقابله کند.
با درنظر گرفتن این مفاهیم پایهای، امکان مقابله با ریسک به وجود میآید . لذا ابتدا باید نسبت به شناسایی ریسکهای محتمل پروژه اقدام کرد. این کار با دستهبندی ساختار کارها و با پرسش چند سوال از خود و یا اعضای گروه پروژه ، امکانپذیر است. مثلا : درموقع نیاز به منبعی یا منابعی که در دسترس نیستند چه اتفاقی خواهد افتاد ؟ اگر کنترلی در مورد مولفهای که بر پروژه اثرگذار است نداشته باشیم چه اتفاقی میافتد ؟ بدترین سناریو چیست ؟ چه چیزی باعث آن میگردد ؟ چه قدر وقوع این اتفاق محتمل است ؟ عواقب آن چیست ؟
ممکن است سوالهای دیگری نیز به ذهن شما خطور کند که البته این سوالها سرآغاز خوبی است که شما را در مسیر درست هدایت کند . هرچیزی که به مغز شما خطور میکند فهرست کنید ، سپس در مرحله بعد تعیین کنید که آیا نیاز به مقابله و پیشگیری ریسک است و یا بایستی تا زمان وقوع آن صبر کرد . اگر ریسکها را مشخص کنید و تصمیم بگیرید که هیچ عملی نباید انجام گیرد باز بهتر از آن است که آنها را شناسایی نکرده باشید . پس از این مرحله تمام ریسکهای شناسایی شده را کمی کنید ؛ ابتدا ریسکها را دستهبندی و سپس احتمال وقوع هر ریسک را تعیین کنید . برای تخصیص مقادیر احتمالی به ریسکها از مقادیر پیشنهادی زیر میتوانید استفاده کنید :
قریب الوقوع = ۸۵٪
بالا = ۸۵٪
محتـــــمل = ۶۰٪
متوسط = ۵۰٪
ممــــــکن = ۴۰٪
پایین = ۱۵٪
غیرمحتـمل = ۱۵٪
اکنون احتمال وقوع هر ریسک قابل محاسبهاست . راه دیگر ، نسبت دادن درصد وزنی به هریک از ریسکهاست . مشکل اصلی این روش آن است که همواره دادههای تجربی به اندازه کافی در دسترس نیستند تا این کار به دقت انجام گیرد . در این روش معمولا افراد باتجربهای مبادرت به این کار میکنند که تجارب جامعی از انواع رویدادها در پروژههای مختلف کسب کردهاند ؛ مجموع درصدهای تخصیصی به رویدادها بایستی صد باشد .
در مرحله بعد به هر ریسک ، یک مقدار نسبت دهید . این مقدار میتواند در صورت نیاز برحسب هزینه و یا زمان باشد ؛ به عنوان مثال اگر هدف تعیین زمان اتمام پروژهاست ، هر ایدهای در مورد مدت زمان فعالیتها میتواند یک سناریوی ریسک محسوب شود . در این مرحله میتوان مقدار حقیقی ریسک را با محاسبه حاصلضرب مقادیر تخصیص داده شده به ریسک و احتمال وقوع آن به دست آورد و با توجه به نتایج حاصل میتوان نسبت به انجام عملی یا به تعویق انداختن آن تصمیمگیری نمود . بعد از انجام مراحل مدیریت ریسک ، میتوانید فرایندهای نگهداری مجموعه ریسک را آغاز کنید . برای این کار بازنگری دورهای ریسک را آغاز کنید که مبتنی بر پیچیدگی و مدت پروژه و وقوع تغییرات پروژهاست .
آغاز اجرای این کار ممکن است بیهوده و هزینهزا به نظر آید اما چنانچه یکبار این کار را انجام دهید و ریسکها را شناسایی و به صورت کمی آنها را کنترل کنید در آن صورت به ارزش مدیریت ریسک پی خواهید برد . بنابراین در مرحله نخست اقدام به شناسایی ریسکهای پروژه در بالاترین سطح WBS کنید و از اینکه راه به سطوح پایینتر مییابید نگران نباشید . بعد از چند بار انجام این کار ، مساله خیلی واضحتر خواهد شد .
ما در دنیای مخاطرات ریسک زندگی میکنیم . باید ریسکها را تحلیل کنیم ؛ اگر با آنها برخورد داریم باید آنها را شناسایی و در مجموع تمام ریسکها و عواید آنها را باید ارزیابی کنیم . منافع حاصل از مدیریت ریسک ممکن است تا غلبه پروژه بر آن ملموس نباشد اما به خاطر داشته باشید که کسی که از برنامهریزی اجتناب کند به طور حتم برنامه شکست پروژه خود را طرحریزی نمودهاست !
مهندسی معکوس در رایانه :
یکی از مهمترین علومی که در برنامهنویسی و مهندسی نرمافزار از آن استفاده می شود و برای برنامهنویسان حرفهای کاربرد فراوان دارد علم مهندسی معکوس[1] هست. در واقع برنامه نویسان توسط این علم می توانند اشکالهای (باگهای) موجود در برنامه خود را پیدا کنند و به رفع آنها بپردازند.
علم رخنهگری رایانهای (کرکینگ) شاخه ای از علم مهندسی معکوس هست. از این رو برای درک معنا و مفهوم علم رخنهگری باید با مهندسی معکوس آشنا شویم. اما برای درک مهندسی معکوس هم باید یک پله عقب تر برویم : تا زمانی که با علم مهندسی نرمافزار یا همان برنامه نویسی آشنا نشویم ، متوجه مهندسی معکوس هم نخواهیم شد. به همین خاطر تمام کسانی که مایل به یادگیری علم کرک هستند باید تا حدودی با برنامه نویسی و مهندسی نرم افزار آشنایی داشته باشند.
برای اینکه بتوانیم یک رخنهگر حرفه ای باشیم باید معنا و مفاهیم خیلی از علوم پایه ای رایانه را بدانیم. در واقع علم کرکینگ چندان علم آسانی نیست و مشکلات زیادی در راه یادگیری این علم خواهیم داشت. به عنوان مثال لازم هست بدانیم زبان ماشین چیست ، واحد پردازش مرکزی چگونه کار میکند، تا حدودی با برنامه نویسی آشنا باشیم، زبان اسمبلی را بلد باشیم، ساختار فایلهای اجرایی (PE)را بشناسیم و... . در واقع پیشنیازهای یادگیری علم رخنهگری زیاد هستند.
برنامه نویسی رایانه :
برنامهنویسی رایانه در فرهنگ واژه غیر متخصصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرآیند توسعه نرمافزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شده مهندسی نرمافزار متغیر است. برنامهنویسی در دیدی ساده آخرین مرحله بزرگ ساخت یک برنامه رایانهای پس از مراحل تحلیل و طراحی برنامه است. در بسیاری از موارد، برنامهنویسی بخشی از تلاش ما برای پیادهسازی نسخهای از دنیای پیرامون ما، با بازسازی قوانین ریاضی و طبیعی در محیط خنثی رایانه است. به این سبب برنامهنویسی بارقههایی بزرگ از ریاضیات و مهندسی با خود دارد. برای مطالعه بیشتر به توسعه نرمافزار نگاه کنید.
زبان برنامهنویسی
اجرا و عملی ساختن الگوریتمهای انتزاعی وابسته به هم بهوسیله تولید یک برنامه رایانهای مشخص با ابزار زبان برنامهنویسی ممکن است. گرچه نزدیکترین راه برای بازسازی این قوانین در رایانه کار روی مدارهای الکترونیکی سختافزار آن است. اما این کاری طاقتفرسا و زمانبر و درنتیجه کمابیش ناممکن است. واسطهایی ساخته شدند تا میان سختافزار و انسان قرار گیرد. طبیعی است یک واسط به ساده کردن و انتزاعی کردن رویدادهای ممکن درون سخت افزار میپردازد. این انتزاعی کردن، سازنده سطوح گوناگون یا لایهبندی در معماری زیرساخت برنامهها است. به همین ترتیب زبانهای برنامهنویسی گوناگون هم هرکدام برای ساخت برنامههای یک یا شماری اندک از این لایهها قابل استفاده هستند.
با متفاوت بودن آنچه برنامهنویس برای آسانی استفاده خود آفریده با ورودی واقعیسخت افزار برای اجرای فرامین (که به زبان ماشین معروف است) برنامه واسط باید شیوهٔ خط برنامه نویس را به زبان ماشین برگرداند .
زبانهای برنامه نویسی
تعدادی از زبانهای برنامهنویسی به شمار زیر هستند :
اسمبلی (Assembly)
لیسپ (LISP)
بی سی پی ال (BCPL)
سی (C)
سیپلاسپلاس (++C)
سی پلاس پلاس/سی ال آی(C++/CLI)
پاسکال (Pascal)
جاوا (Java)
سیشارپ (#C)
جی شارپ (#j)
بیسیک (Basic)
پایتون (Python)
پرل (Perl)
پیاچپی (PHP)
ای اس پی (ASP)
ای اس پی دات نت (ASP.Net)
Matlab
وی بی دات نت (VB .Net)
دلفی (Delphi)
ویژوال بیسیک (visual basic)
لینگو (Lingo)
توسعه دهنده های وب
دقت كنيد كه زبان هايی مانند اچتیامال (HTML) زبان برنامهنويسی نيستند بلكه زبانهای قالب بندی هستند.
نمونه یک برنامه
یک برنامهٔ ساده در زبان برنامهنویسیBasic که از سادهترین زبانهای برنامهنویسی است میتواند به شکل زیر باشد:
REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE
PRINT "HELLO NEW WORLD!"
END
سطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط درنظر گرفته نمیشود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامهنویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان میدهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع میدهد.
پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورات را تبدیل به فرامینی میکند که لایه زیرین، که ممکن است همان سخت افزار باشد، میتواند آنها را اجرا کند.
پارادایمها
زبانهای برنامهنویسی گوناگون براساس قابلیتهای درنظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبانهای مختلف متفاوت است. علاوه بر اینها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شدهاند که پارادایم یا الگو نام دارند. مثلاً پارادایم برنامهنویسی رویهای با برنامهها به صورت مجموعهای از پیمانهها برخورد میکند و در برنامهنویسی منطقی برنامهها گروههایی از قضایا و قوانین منطقی هستند که ما را به نتایج راهنمایی میکنند. زبانهای برنامهنویسی گوناگون بر اساس این پارادایمها ساخته میشوند. مثلاً زبان برنامهنویسی Pascal و ++C بر مبنای برنامهنویسی شیگرا و Prolog برای برنامهنویسی منطقی طراحی شدهاند. پارادایمها در مواردی به هم مشابهاند و ممکن است تنها در شمار اندک اما تأثیرگذاری از ویژگی ها، متفاوت باشند. همچنین زبانهای گوناگون ممکن است از ویژگیهای چند پارادایم همزمان استفاده کنند. مثلاً ++C ویژگیهایی از برنامهنویسی شیگرا، برنامهنویسی رویهای و برنامهنویسی نوعی دارد.
برنامه نویسی موازی :
برنامهسازی موازی یا محاسبات موازی به اجرای همزمان یک برنامه (که به بخشهای کوچکتری تقسیم شده است) بر روی چند پردازنده به منظور دستیابی به سرعت بیشتر اطلاق می شود. ایده اصلی این است که فرآیند حل یک مساله را معمولاً میتوان به زیروظایف خردتری تقسیم کرد که با اجرای همزمان این زیروظایف و هماهنگ کردن آنها مساله اصلی در زمان کوتاهتری حل می شود.
تعریف
یک سیستم محاسبات موازی رایانه ایست با بیش از یک پردازنده که برای پردازش موازی استفاده می شود. در گذشته، در یک سیستم چند پردازنده هر پردازنده در یک بسته بندی جداگانه قرار داشت، اما امروزه با معرفی تراشه های چند هسته ای، چندین پردازنده در کنار یکدیگر در یک بسته بندی قرار می گیرند. در حال حاضر انواع بسیار گوناگونی از رایانه های موازی وجود دارند که بر اساس نوع اتصالات بین پردازنده ها و حافظه از یکدیگر متمایز می شوند. رده بندی Flynn که یکی از پذیرفته شده ترین رده بندی ها برای رایانه های موازی است، رایانه های موازی را بر این اساس طبقه بندی می کند که آیا شامل پردازنده هایی هستند که همگی همزمان یک دستور یکسان را روی داده های متفاوتی اجرا می کنند (یک دستور چند داده SIMD: Single Instruction Multiple Data) و یا هر پردازنده دستور متفاوتی را روی داده هایی متفاوت اجرا می کند (چند دستور چند داده MIMD: Multiple Instruction Multiple Data).
هوش مصنوعی :
هوش مصنوعی (به انگلیسی: Artificial Intelligence) را باید عرصهٔ پهناور تلاقی و ملاقات بسیاری از دانشها، علوم، و فنون قدیم و جدید دانست. ریشهها و ایدههای اصلی آن را باید در فلسفه، زبانشناسی، ریاضیات، روانشناسی، نورولوژی، و فیزیولوژی نشان گرفت و شاخهها، فروع، و کاربردهای گوناگون و فراوان آن را در علوم رایانه، علوم مهندسی، علوم زیستشناسی و پزشکی، علوم ارتباطات و زمینههای بسیار دیگر.
هدف هوش مصنوعی بطور کلی ساخت ماشینی است که بتواند «فکر» کند. اما برای دسته بندی و تعریف ماشینهای متفکر، میبایست به تعریف «هوش» پرداخت. همچنین به تعاریفی برای «آگاهی» و «درک» نیز نیازمندیم و در نهایت به معیاری برای سنجش هوش یک ماشین نیازمندیم.
با وجودی که برآورده سازی نیازهای صنایع نظامی، مهمترین عامل توسعه و رشد هوش مصنوعی بودهاست، هم اکنون از فراوردههای این شاخه از علوم در صنایع پزشکی، رباتیک، پیش بینی وضع هوا، نقشهبرداری و شناسایی عوارض، تشخیص صدا، تشخیص گفتار و دست خط و بازیها و نرم افزارهای رایانهای استفاده میشود.
مباحث هوش مصنوعی پیش از بوجود آمدن علوم الکترونیک، توسط فلاسفه و ریاضی دانانی نظیر بول (Boole) که اقدام به ارائه قوانین و نظریههایی در باب منطق نمودند، مطرح شده بود. در سال ۱۹۴۳، با اختراع رایانههای الکترونیکی، هوش مصنوعی، دانشمندان را به چالشی بزرگ فراخواند. بنظر میرسید، فناوری در نهایت قادر به شبیهسازی رفتارهای هوشمندانه خواهد بود.
با وجود مخالفت گروهی از متفکرین با هوش مصنوعی که با دیده تردید به کارآمدی آن مینگریستند تنها پس از چهار دهه، شاهد تولد ماشینهای شطرنج باز و دیگر سامانههای هوشمند در صنایع گوناگون هستیم.
نام هوش مصنوعی در سال ۱۹۶۵ میلادی به عنوان یک دانش جدید ابداع گردید. البته فعالیت درزمینه این علم از سال ۱۹۶۰ میلادی شروع شدهبود.(مرجع۱)
بیشتر کارهای پژوهشی اولیه در هوش مصنوعی بر روی انجام ماشینی بازیها و نیز اثبات قضیههای ریاضی با کمک رایانهها بود. در آغاز چنین به نظر میآمد که رایانهها قادر خواهند بود چنین اموری را تنها با بهره گرفتن از تعداد بسیار زیادی کشف و جستجو برای مسیرهای حل مسئله و سپس انتخاب بهترین آنها به انجام رسانند.
اين اصطلاح(هوش مصنوعی) برای اولين بار توسط جان مكارتی (John Mccorthy) كه از آن بهعنوان پدر «علم و دانش توليد ماشينهای هوشمند» یاد میشود استفاده شد. با اين عنوان میتوان به هويت هوشمند يک ابزار مصنوعی اشاره كرد. (ساختهٔ دست بشر، غير طبيعی، مصنوعی)
حال آنكه AI به عنوان يك اصطلاح عمومی پذيرفته شده كه شامل محاسبات هوشمندانه و تركيبی (مركب از مواد مصنوعی) میباشد.
از اصطلاح strong and weak AI میتوان تا حدودی برای معرفی ردهبندی سيستمها استفاده كرد. AI ها در رشتههای مشتركی چون علم كامپيوتر، روانشناسی و فلسفه مورد مطالعه قرار میگيرند، كه مطابق آن باعث ايجاد يک رفتار هوشمندانه، يادگيری و سازش میشود و معمولاً نوع پيشرفتهٔ آن در ماشينها و كامپيوترها استفاده میشود.
محققين هوش مصنوعی علاقهمند به تولید ماشينی هستند كه دستورات مورد نياز را به صورت هوشمندانه انجام دهد. به عنوان مثال قابلیت كنترل، برنامهريزی و زمانبندی، توانايی تشخيص جواب به سوال مصرف كننده،دست نويسها، زبان شناسی، سخنرانی و شناسايی چهره را داشته باشد. مطالعه بر روی يک AI دارد به يک رشتهٔ مهندسی تبديل میشود كه كانون مشروط است بر حل مشكلات زندگی واقعی، علم معدن كاری، نرم افزارهای كاربردی، استراتژی بازيها مثل بازی شطرنج و بازيهای ويدئويی يكی از بزرگترين مشكلات (سختیها) با AIها، قوهٔ درک آنها است.
تاحدی دستگاههای توليدشده میتوانند شگفتانگيز باشند، اما كارشناسان هوش مصنوعی ادعا میكنند كه ماشينهای هوشمند ساختهشده دارای درک واقعی و حقيقی نيستند.
تعریف و طبیعت هوش مصنوعی
هنوز تعریف دقیقی که مورد قبول همهٔ دانشمندان این علم باشد برای هوش مصنوعی ارائه نشدهاست، و این امر، به هیچ وجه مایهٔ تعجّب نیست. چرا که مقولهٔ مادر و اساسیتر از آن، یعنی خود هوش هم هنوز بطور همهجانبه و فراگیر تن به تعریف ندادهاست. در واقع، میتوان نسلهایی از دانشمندان را سراغ گرفت که تمام دوران زندگی خود را صرف مطالعه و تلاش در راه یافتن جوابی به این سؤال عمده نمودهاند که: هوش چیست؟
اما اکثر تعریفهایی که در این زمینه ارایه شدهاند بر پایه یکی از ۴ باور زیر قرار میگیرند:
سیستمهایی که به طور منطقی فکر میکنند
سیستمهایی که به طور منطقی عمل میکنند
سیستمهایی که مانند انسان فکر میکنند
سیستمهایی که مانند انسان عمل میکنند(مرجع۱)
شاید بتوان هوش مصنوعی را این گونه توصیف کرد:«هوش مصنوعی عبارت است از مطالعه این که چگونه کامپیوترها را میتوان وادار به کارهایی کرد که در حال حاضر انسانها آنها رابهتر انجام میدهند»(مرجع۲).
فلسفهٔ هوش مصنوعی
بطور کلی ماهیت وجودی هوش به مفهوم جمع آوری اطلاعات, استقرا و تحلیل تجربیات به منظور رسیدن به دانش و یا ارایه تصمیم میباشد. در واقع هوش به مفهوم به کارگیری تجربه به منظور حل مسایل دریافت شده تلقی میشود. هوش مصنوعی علم و مهندسی ایجاد ماشینهایی با هوش با به کارگیری از کامپیوتر و الگوگیری از درک هوش انسانی و یا حیوانی و نهایتا دستیابی به مکانیزم هوش مصنوعی در سطح هوش انسانی میباشد.
در مقایسه هوش مصنوعی با هوش انسانی میتوان گفت که انسان قادر به مشاهده و تجزیه و تحلیل مسایل در جهت قضاوت و اخذ تصمیم میباشد در حالی که هوش مصنوعی مبتنی بر قوانین و رویههایی از قبل تعبیه شده بر روی کامپیوتر میباشد. در نتیجه علی رغم وجود کامپیوترهای بسیار کارا و قوی در عصر حاضر ما هنوز قادر به پیاده کردن هوشی نزدیک به هوش انسان در ایجاد هوشهای مصنوعی نبودهایم.
بطور کلّی، هوش مصنوعی را میتوان از زوایای متفاوتی مورد بررسی و مطالعه قرار داد. مابین هوش مصنوعی به عنوان یک هدف، هوش مصنوعی به عنوان یک رشته تحصیلی دانشگاهی، و یا هوش مصنوعی به عنوان مجموعهٔ فنون و راه کارهایی که توسط مراکز علمی مختلف و صنایع گوناگون تنظیم و توسعه یافتهاست باید تفاوت قائل بود.
مدیریّت پیچیدگی
ایجاد و ابداع فنون و تکنیکهای لازم برای مدیریّت پیچیدگی را باید به عنوان هستهٔ بنیادین تلاشهای علمی و پژوهشی گذشته، حال، و آینده، در تمامی زمینههای علوم رایانه، و به ویژه، در هوش مصنوعی معرّفی کرد. شیوهها و تکنیکهای هوش مصنوعی، در واقع، برای حلّ آن دسته از مسائل به وجود آمدهاست که به طور سهل و آسان توسط برنامهنویسی تابعی (Functional programming)، یا شیوههای ریاضی قابل حلّ نبودهاند.
در بسیاری از موارد، با پوشانیدن و پنهان ساختن جزئیّات فاقد اهمّیّت است که بر پیچیدگی فائق میآییم، و میتوانیم بر روی بخشهایی از مسئله متمرکز شویم که مهمتر است. تلاش اصلی، در واقع، ایجاد و دستیابی به لایهها و ترازهای بالاتر و بالاتر تجرید را نشانه میرود، تا آنجا که، سرانجام برنامههای کامپوتری درست در همان سطحی کار خواهند کرد که خود انسانها به کار مشغولند.
به یاری پژوهشهای گسترده دانشمندان علوم مرتبط، هوش مصنوعی از آغاز پیدایش تاکنون راه بسیاری پیمودهاست. در این راستا، تحقیقاتی که بر روی توانایی آموختن زبانها انجام گرفت و همچنین درک عمیق از احساسات، دانشمندان را در پیشبرد این علم، یاری کردهاست. یکی از اهداف متخصصین، تولید ماشینهایی است که دارای احساسات بوده و دست کم نسبت به وجود خود و احساسات خود آگاه باشند. این ماشین باید توانایی تعمیم تجربیات قدیمی خود در شرایط مشابه جدید را داشته و به این ترتیب اقدام به گسترش دامنه دانش و تجربیاتش کند.
برای نمونه به رباتی هوشمند بیاندیشید که بتواند اعضای بدن خود را به حرکت درآورد، او نسبت به این حرکت خود آگاه بوده و با سعی و خطا، دامنه حرکت خود را گسترش میدهد، و با هر حرکت موفقیت آمیز یا اشتباه، دامنه تجربیات خود را وسعت بخشیده و سر انجام راه رفته و یا حتی میدود و یا به روشی برای جابجا شدن، دست مییابد، که سازندگانش، برای او، متصور نبودهاند.
هر چند مثال ما در تولید ماشینهای هوشمند، کمی آرمانی است، ولی به هیچ عنوان دور از دسترس نیست. دانشمندان، عموماً برای تولید چنین ماشینهایی، از تنها مدلی که در طبیعت وجود دارد، یعنی توانایی یادگیری در موجودات زنده بخصوص انسان، بهره میبرند.
آنها بدنبال ساخت ماشینی مقلد هستند، که بتواند با شبیهسازی رفتارهای میلیونها یاخته مغز انسان، همچون یک موجود متفکر به اندیشیدن بپردازد.
هوش مصنوعی که همواره هدف نهایی دانش رایانه بودهاست، اکنون در خدمت توسعه علوم رایانه نیز است. زبانهای برنامه نویسی پیشرفته، که توسعه ابزارهای هوشمند را ممکن میسازند، پایگاههای دادهای پیشرفته، موتورهای جستجو، و بسیاری نرمافزارها و ماشینها از نتایج پژوهشهای هوش مصنوعی بهره میبرند.
سیستمی که عاقلانه فکر کند. سامانهای عاقل است که بتواند کارها را درست انجام دهد. در تولید این سیستمها نحوه اندیشیدن انسان مد نظر نیست. این سیستمها متکی به قوانین و منطقی هستند که پایه تفکر آنها را تشکیل داده و آنها را قادر به استنتاج و تصمیم گیری مینماید. آنها با وجودی که مانند انسان نمیاندیشند، تصمیماتی عاقلانه گرفته و اشتباه نمیکنند. این ماشینها لزوما درکی از احساسات ندارند. هم اکنون از این سیستمها در تولید عاملها در نرم افزارهای رایانهای، بهره گیری میشود. عامل تنها مشاهده کرده و سپس عمل میکند..
تکنیک ها وزبانهای برنامه نویسی هوش مصنوعی
عملکرد اولیه برنامه نویسی هوش مصنوعی ایجاد ساختار کنترلی مورد لزوم برای محاسبه سمبولیک است زبانهای برنامه نویسی LISP,PROLOG علاوه بر اینکه از مهمترین زبانهای مورد استفاده در هوش مصنوعی هستند خصوصیات نحوی ومعنایی انها باعث شده که انها شیوه ها وراه حل های قوی برای حل مسئله ارایه کنند. تاثیر قابل توجه این زبانها بر روی توسعه AI از جمله توانایی های انها بعنوان"ابزارهای فکرکردن"می باشد . در حقیقت همانطور که هوش مصنوعی مراحل رشد خود را طی می کند زبانهای LISP,PROLOGبیشتر مطرح می شوند این زبانها کار خود را در محدوده توسعه سیستم های AIدر صنعت ودانشگاه ها دنبال می کنند وطبیعتا" اطلاعات در مورد این زبانها بعنوان بخشی از مهارت هر برنامه نویس AIمیباشد. PROLOGیک زبان برنامه نویسی منطقی است .یک برنامه منطقی دارای یک سری ویژگیهای قانون ومنطق است . در حقیقت خود این نام از برنامه نویسی PROدر LOGIC میآید . در این زبان یک مفسر برنامه را بر اساس یک منطق می نویسد .ایده استفاده توصیفی محاسبه ی اولیه برای بیان خصوصیات حل مسئله یکی از محوریتهای مشارکت PROLOGمی باشد که برای علم کامپیوتر بطورکلی وبطور اخص برای زبان برنامه نویسی هوشمند مورد استفاده قرار می گیرند . LISP اصولا" LISP یک زبان کامل است که دارای عملکردها ولیست های لازمه برای توصیف عملکردهای جدید, تشخیص تناسب وارزیابی معانی می باشد LISP به برنامه نویس قدرت کامل برای اتصال به ساختارهای اطلاعاتی را می دهد گر چه LISP یکی از قدیمی ترین ترین زبانهای محاسباتی است که هنوز فعال است ولی دقت کافی در برنامه نویسی وطراحی توسعه باعث شده که این یک زبان برنامه نویسی فعال باقی بماند . در حقیقت این مدل برنامه نویسی طوری موثر بوده است که تعدادی از دیگر زبانها براساس عملکرد برنامه نویسی آن بنا شده اند :مثل . FP,ML, SCHEME یکی از مهمترین برنامه های مرتبط با LISP برنامه SCHEME می باشد که یک تفکر دوباره در باره زبان در آن وجود دارد که بوسیله توسعه AI وبرای آموزش واصول علم کامپیوتر مورد استفاده قرار می گیرد.