موضوع
شرکت تولید کننده نرم افزار های رایانه
Entrepreneurial company producing computer software
نام استاد :
نام محقق :
پیشگفتار :
مهندسی نرم افزار پیشه ای است که به یاری دانش رایانه و دیگر فناوری ها و روش ها به آفریدن و نگاهداری نرم افزار رایانه ای می پردازد. مسائل اصلی مهندسی نرم افزار تولید نرم افزار بر اساس موارد زیر است:
* الزامات تعیین شده
* در زمان تعیین شده
* در محدودهٔ بودجه پیش بینی شده
کاربردهای مهندسی نرم افزار دارای ارزش های اجتماعی و اقتصادی هستند، زیرا بهره وری مردم را بالا برده، چند و چون زندگی آنان را بهتر می کنند. مردم با بهره گیری از نرم افزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونه های از این دست نرم افزارها عبارت اند از: سامانه های توکار، نرم افزار اداری، بازی های رایانه ای، و اینترنت. فناوری ها و خدمات مهندسی نرم افزار به کاربران برای بهبود بهره وری و کیفیت یاری میرساند. نمونه هایی از زمینه های بهبود: دادگان، زبان ها، کتابخانه ها، الگوها، فرآیندها و ابزار.
فصل اول
معرفی طرح
فصل اول – معرفی طرح
1-2-مشخصات محصول
1-1-2- نام و کاربرد محصول:
ایجاد و راه اندازی شرکت و موسسه های تولیدی نرم افزار های رایانه ای ، از شرکت ها به صورت گروهی در پروژه های برنامه نویسی و طراحی وب برای شرکت های صنعتی و غیره فعالیت می نمایند
2-1-2-مشخصات فنی محصول
تولید و ارائه نرم افزار های مختلف صنعتی و تجاری و حسابداری و بازرگانی و خدماتی برای شرکت های مختلف .
3-1-2-معرفی روشهای تولید
استفاده از روش تولید گروهی و با سیستم های مجتمع و شی گرای و طراحی متناوب با استفاده از نیروی کاری مناسب و در زمان تولید مشخص
4-1-2-تشریح مختصر فرایند
تولید و ارائه انواع نرم افزار های رایانه ای
فصل دوم
تعیین ظرفیت
فصل دوم – تعیین ظرفیت
2-2-تعیین ظرفیت تولید
ردیف
نام محصول
ظرفیت تولید سالانه
ظرفیت تولید ماهانه
ظرفیت تولید روزانه
1
تهیه تجهیزات مورد نیاز
–
2
نصب وراه اندازی شبکه
–
–
———
3
نصب و تجهیز سیستم امنیتی
–
–
–
4
نصب سیستم عامل ونرم افزارهای کاربردی
–
–
–
5
تولید نرم افزار
–
–
———-
6
پیاده سازی وب سایت
–
–
–
2-3-برآورد میزان مصرف مواد اولیه و قطعات خریدنی
ردیف
نام ماده اولیه/ قطعات خریدنی
مشخصات فنی
مورد مصرف در محصول
میزان مصرف
در محصول
مصرف سالیانه
منبع تامین
مقدار
واحد
داخلی
خارجی
1
سیستم و ایستگاه رایانه ای
–
–
–
6
*
2
سیستم های کنترل شبکه ای
3
*
3
سیستم های نرم افزاری تحت شبکه
3
*
4
سیستم های ایجاد امنیت شبکه
6
*
2-4-معرفی دستگاه ها و تجهیزات تولید
ردیف
نام ماشین آلات/
تجهیزات تولید
مشخصات فنی
تعداد
منبع تامین
داخلی
خارجی
1
Router
L22m3
2
*
2
Microwave Cb
Tent
1
*
3
Solution C
Micro
1
*
4
Server Station
–
3
*
5
Lise Line
–
2
*
6
External Modem
High Dlink
60
*
2-5-معرفی تجهیزات و تاسیسات عمومی
ردیف
عنوان تاسیسات
به مقدار مصرف
مقدار مصرف
محوطه
کارگاه
اداری
بنزین
گازوییل
1
برق
*
*
2
آب
*
3
گاز
*
*
4
تلفن
*
5
سوخت گرمایش
*
*
فصل سوم
معرفی نیروی انسانی
فصل سوم – معرفی نیروی انسانی
معرفی نیروی انسانی
1-3-برآورد پرسنل تولیدی
ردیف
عناوین شغلی
تعداد
میزان تحصیلات
جنسیت
1
سرپرست
1
کارشناسی ارشد رایانه – گرایش نرم افزار
مرد
2
مهندس
4
کارشناس رایانه
مرد
3
تکنسین
8
فوق دیپلم – مسلط به زبان های برنامه نویسی
مرد
5
اپراتور رایانه
2
فوق دیپلم
مرد – زن
2-3-پرسنل اداری و خدمات
ردیف
نوع مسئولیت
تعداد
شرح وظایف
1
مدیر
1
2
خدمات
15
3
حسابدار
1
فصل چهارم
هزینه ها
فصل چهارم – هزینه ها
معرفی هزینه ها
ردیف
عنوان هزینه
مبلغ سالانه به ریال
1
مواد مصرفی
5000000
2
تامین انواع انرژی سوخت(تاسیسات-گرمایش-سرمایش)
1800000
3
هزینه خدمات نیروی انسانی
75000000
4
هزینه ماشین آلات و تجهیزات خط تولید
50000000
5
هزینه زمین-ساختمان
40000000
6
هزینه لوازم اثاثیه اداری
5000000
7
هزینه های قبل از بهره برداری
3000000
8
جمع کل هزینه ها
179800000
برآورد هزینه استهلاک
شرح
ارزش دارایی
( ریال)
درصد
هزینه استهلاک
محوطه سازی
ساختمان
ماشین آلات و وسایل آزمایشگاهی
50000000
10
5000000
تاسیسات
وسایل حمل و نقل
وسایل دفتری
5000000
10
500000
پیش بینی نشده
جمع کل
55000000
10
5500000
سود ناخالص= هزینه های سالیانه- در آمدسالیانه
70200000 = 179800000 – 250000000
فصل پنجم
شرح فرایند واطلاعات فنی مورد نیاز
فصل پنجم – شرح فرایند و اطلاعات فنی مورد نیاز :
تعریف مهندسی نرم افزار
مهندسی نرم افزار طراحی،برنامه نویسی، توسعه، مستند سازی و نگهداری نرم افزار با بکارگرفتن روشهای فنی و عملی از علوم کامپیوتر ، مدیریت پروزه ، مهندسی ، محدوده کاربرد، طراحی رابط، مدیریت تجهیزات دیجیتال و سایر زمینه ها است.
اصطلاح مهندسی نرم افزار بعد از سال ۱۹۶۸ شناخته شد، طی کنفرانس مهندسی نرم افزار ناتو ۱۹۶۸ (که در گارمیش آلمان برگزار شد) توسط ریاست کنفرانس 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ها، قوهٔ درک آنها است.
تاحدی دستگاههای تولید شده می توانند شگفت انگیز باشند، اما کارشناسان هوش مصنوعی ادعا می کنند که ماشینهای هوشمند ساخته شده دارای درک واقعی و حقیقی نیستند.
تعریف و طبیعت هوش مصنوعی
هنوز تعریف دقیقی که مورد قبول همهٔ دانشمندان این علم باشد برای هوش مصنوعی ارائه نشده است، و این امر، به هیچ وجه مایهٔ تعجّب نیست. چرا که مقولهٔ مادر و اساسی تر از آن، یعنی خود هوش هم هنوز بطور همه جانبه و فراگیر تن به تعریف نداده است. در واقع، می توان نسل هایی از دانشمندان را سراغ گرفت که تمام دوران زندگی خود را صرف مطالعه و تلاش در راه یافتن جوابی به این سوال عمده نموده اند که: هوش چیست؟
اما اکثر تعریف هایی که در این زمینه ارایه شده اند بر پایه یکی از ۴ باور زیر قرار می گیرند:
1. سیستم هایی که به طور منطقی فکر می کنند
2. سیستم هایی که به طور منطقی عمل می کنند
3. سیستم هایی که مانند انسان فکر می کنند
4. سیستم هایی که مانند انسان عمل می کنند(مرجع۱)
شاید بتوان هوش مصنوعی را این گونه توصیف کرد:"هوش مصنوعی عبارت است از مطالعه این که چگونه کامپیوترها را می توان وادار به کارهایی کرد که در حال حاضر انسان ها آنها رابهتر انجام می دهند"(مرجع۲).
فلسفهٔ هوش مصنوعی
بطور کلی ماهیت وجودی هوش به مفهوم جمع آوری اطلاعات, استقرا و تحلیل تجربیات به منظور رسیدن به دانش و یا ارایه تصمیم میباشد. در واقع هوش به مفهوم به کارگیری تجربه به منظور حل مسایل دریافت شده تلقی می شود. هوش مصنوعی علم و مهندسی ایجاد ماشینهایی با هوش با به کارگیری از کامپیوتر و الگوگیری از درک هوش انسانی و یا حیوانی و نهایتا دستیابی به مکانیزم هوش مصنوعی در سطح هوش انسانی میباشد.
در مقایسه هوش مصنوعی با هوش انسانی می توان گفت که انسان قادر به مشاهده و تجزیه و تحلیل مسایل در جهت قضاوت و اخذ تصمیم میباشد در حالی که هوش مصنوعی مبتنی بر قوانین و رویه هایی از قبل تعبیه شده بر روی کامپیوتر میباشد. در نتیجه علی رغم وجود کامپیوترهای بسیار کارا و قوی در عصر حاضر ما هنوز قادر به پیاده کردن هوشی نزدیک به هوش انسان در ایجاد هوشهای مصنوعی نبوده ایم.
بطور کلّی، هوش مصنوعی را می توان از زوایای متفاوتی مورد بررسی و مطالعه قرار داد. مابین هوش مصنوعی به عنوان یک هدف، هوش مصنوعی به عنوان یک رشته تحصیلی دانشگاهی، و یا هوش مصنوعی به عنوان مجموعهٔ فنون و راه کارهایی که توسط مراکز علمی مختلف و صنایع گوناگون تنظیم و توسعه یافته است باید تفاوت قائل بود.
مدیریّت پیچیدگی
ایجاد و ابداع فنون و تکنیک های لازم برای مدیریّت پیچیدگی را باید به عنوان هستهٔ بنیادین تلاش های علمی و پژوهشی گذشته، حال، و آینده، در تمامی زمینه های علوم رایانه، و به ویژه، در هوش مصنوعی معرّفی کرد. شیوه ها و تکنیک های هوش مصنوعی، در واقع، برای حلّ آن دسته از مسائل به وجود آمده است که به طور سهل و آسان توسط برنامه نویسی تابعی (Functional programming)، یا شیوه های ریاضی قابل حلّ نبوده اند.
در بسیاری از موارد، با پوشانیدن و پنهان ساختن جزئیّات فاقد اهمّیّت است که بر پیچیدگی فائق می آییم، و می توانیم بر روی بخش هایی از مسئله متمرکز شویم که مهم تر است. تلاش اصلی، در واقع، ایجاد و دستیابی به لایه ها و ترازهای بالاتر و بالاتر تجرید را نشانه می رود، تا آنجا که، سرانجام برنامه های کامپوتری درست در همان سطحی کار خواهند کرد که خود انسان ها به کار مشغولند.
به یاری پژوهش های گسترده دانشمندان علوم مرتبط، هوش مصنوعی از آغاز پیدایش تاکنون راه بسیاری پیموده است. در این راستا، تحقیقاتی که بر روی توانایی آموختن زبانها انجام گرفت و همچنین درک عمیق از احساسات، دانشمندان را در پیشبرد این علم، یاری کرده است. یکی از اهداف متخصصین، تولید ماشینهایی است که دارای احساسات بوده و دست کم نسبت به وجود خود و احساسات خود آگاه باشند. این ماشین باید توانایی تعمیم تجربیات قدیمی خود در شرایط مشابه جدید را داشته و به این ترتیب اقدام به گسترش دامنه دانش و تجربیاتش کند.
برای نمونه به رباتی هوشمند بیاندیشید که بتواند اعضای بدن خود را به حرکت درآورد، او نسبت به این حرکت خود آگاه بوده و با سعی و خطا، دامنه حرکت خود را گسترش می دهد، و با هر حرکت موفقیت آمیز یا اشتباه، دامنه تجربیات خود را وسعت بخشیده و سر انجام راه رفته و یا حتی می دود و یا به روشی برای جابجا شدن، دست می یابد، که سازندگانش، برای او، متصور نبوده اند.
هر چند مثال ما در تولید ماشینهای هوشمند، کمی آرمانی است، ولی به هیچ عنوان دور از دسترس نیست. دانشمندان، عموماً برای تولید چنین ماشینهایی، از تنها مدلی که در طبیعت وجود دارد، یعنی توانایی یادگیری در موجودات زنده بخصوص انسان، بهره می برند.
آنها بدنبال ساخت ماشینی مقلد هستند، که بتواند با شبیه سازی رفتارهای میلیونها یاخته مغز انسان، همچون یک موجود متفکر به اندیشیدن بپردازد.
هوش مصنوعی که همواره هدف نهایی دانش رایانه بوده است، اکنون در خدمت توسعه علوم رایانه نیز است. زبانهای برنامه نویسی پیشرفته، که توسعه ابزارهای هوشمند را ممکن می سازند، پایگاههای داده ای پیشرفته، موتورهای جستجو، و بسیاری نرم افزارها و ماشینها از نتایج پژوهش های هوش مصنوعی بهره می برند.
* سیستمی که عاقلانه فکر کند. سامانه ای عاقل است که بتواند کارها را درست انجام دهد. در تولید این سیستم ها نحوه اندیشیدن انسان مد نظر نیست. این سیستم ها متکی به قوانین و منطقی هستند که پایه تفکر آنها را تشکیل داده و آنها را قادر به استنتاج و تصمیم گیری می نماید. آنها با وجودی که مانند انسان نمی اندیشند، تصمیماتی عاقلانه گرفته و اشتباه نمی کنند. این ماشینها لزوما درکی از احساسات ندارند. هم اکنون از این سیستم ها در تولید عامل ها در نرم افزارهای رایانه ای، بهره گیری می شود. عامل تنها مشاهده کرده و سپس عمل می کند..
تکنیک ها وزبانهای برنامه نویسی هوش مصنوعی
عملکرد اولیه برنامه نویسی هوش مصنوعی ایجاد ساختار کنترلی مورد لزوم برای محاسبه سمبولیک است زبانهای برنامه نویسی LISP,PROLOG علاوه بر اینکه از مهمترین زبانهای مورد استفاده در هوش مصنوعی هستند خصوصیات نحوی ومعنایی انها باعث شده که انها شیوه ها وراه حل های قوی برای حل مسئله ارایه کنند. تاثیر قابل توجه این زبانها بر روی توسعه AI از جمله توانایی های انها بعنوان"ابزارهای فکرکردن"می باشد . در حقیقت همانطور که هوش مصنوعی مراحل رشد خود را طی می کند زبانهای LISP,PROLOGبیشتر مطرح می شوند این زبانها کار خود را در محدوده توسعه سیستم های AIدر صنعت ودانشگاه ها دنبال می کنند وطبیعتا" اطلاعات در مورد این زبانها بعنوان بخشی از مهارت هر برنامه نویس AIمیباشد. PROLOGیک زبان برنامه نویسی منطقی است .یک برنامه منطقی دارای یک سری ویژگیهای قانون ومنطق است . در حقیقت خود این نام از برنامه نویسی PROدر LOGIC میآید . در این زبان یک مفسر برنامه را بر اساس یک منطق می نویسد .ایده استفاده توصیفی محاسبه ی اولیه برای بیان خصوصیات حل مسئله یکی از محوریتهای مشارکت PROLOGمی باشد که برای علم کامپیوتر بطورکلی وبطور اخص برای زبان برنامه نویسی هوشمند مورد استفاده قرار می گیرند . LISP اصولا" LISP یک زبان کامل است که دارای عملکردها ولیست های لازمه برای توصیف عملکردهای جدید, تشخیص تناسب وارزیابی معانی می باشد LISP به برنامه نویس قدرت کامل برای اتصال به ساختارهای اطلاعاتی را می دهد گر چه LISP یکی از قدیمی ترین ترین زبانهای محاسباتی است که هنوز فعال است ولی دقت کافی در برنامه نویسی وطراحی توسعه باعث شده که این یک زبان برنامه نویسی فعال باقی بماند . در حقیقت این مدل برنامه نویسی طوری موثر بوده است که تعدادی از دیگر زبانها براساس عملکرد برنامه نویسی آن بنا شده اند :مثل . FP,ML, SCHEME یکی از مهمترین برنامه های مرتبط با LISP برنامه SCHEME می باشد که یک تفکر دوباره در باره زبان در آن وجود دارد که بوسیله توسعه AI وبرای آموزش واصول علم کامپیوتر مورد استفاده قرار می گیرد.
سیستم های خبره
سیستم های خبره زمینه ای پرکاربرد در هوش مصنوعی و مهندسی دانش است که با توجّه به نیاز روز افزون جوامع بر اتخاذ راه حل ها و تصمیمات سریع در مواردی که دانش های پیچیده و چندگانهٔ انسانی مورد نیاز است، بر اهمیت نقش آنها افزوده هم می شود. سیستم های خبره به حل مسائلی می پردازند که به طور معمول نیازمند تخصّص های کاردانان و متخصّصان انسانی ست. به منظور توانایی بر حل مسائل در چنین سطحی (ترازی)، دسترسی هرچه بیشتر اینگونه سامانه ها به دانش موجود در آن زمینه خاص ضروری می گردد.
عامل های هوشمند
عامل ها (Agents) قادر به شناسایی الگوها، و تصمیم گیری بر اساس قوانین فکر کردن خود می باشند. قوانین و چگونگی فکر کردن هر عامل در راستای دستیابی به هدفش، تعریف می شود. این سیستم ها بر اساس قوانین خاص خود فکر کرده و کار خودرا به درستی انجام می دهند. پس عاقلانه رفتار می کنند، هر چند الزاما مانند انسان فکر نمی کنند.
برنامه نویسی شی گرا :
برنامه نویسی شیءگرا (به انگلیسی Object Oriented Programming مخفف OOP) شیوه ای از پیاده سازی نرم افزار است که بر تجزیهٔ مسئله به اشیاء تاکید دارد. اشیاء صورت های انتزاعی از ماهیت های مطرح در مسئله هستند که دارای وضعیت (درونی) و همچنین عملیات بر روی داده ها (وضعیت درونی) می باشند. این نوع نگرش دارای مزایای بسیاری از جمله مدیریت پیچیدگی وهزینهٔ نگهداری کمتری است.
زبان های برنامه نویسی شی گرا، زبان هایی هستند که در آن برنامه نویس می تواند اشیاء مختلفی را تعریف نماید و از اشیاء تولید شده استفاده نماید. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Methods خوانده می شوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی می نماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید.
در برنامه نویسی شیءگرا، چند مفهوم عمده مطرح است:
* وراثت (Inheritance)
* کپسوله سازی یا مخفی سازی (Encapsulation)
* چندریختی / چندشکلی (Polymorphism)
* تجرید / انتزاع (Abstraction)
وراثت
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس می تواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس های دیگر را به ارث ببرد). در یک مثال ساده می توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، می توان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل زانتیا مدل C5 یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفه جویی در نوشتن کد و تا حدودی تضمین صحت کد موجود می شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس هایی که از این کلاس پایه ویژگی ای ا به ارث برده اند این تغییر اعمال خواهد شد.
کپسوله سازی
کپسوله سازی، مخفی سازی (Encapsulation)، یا لفافه بندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده میخواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر می دارید، استارت می زنید و با فشار آوردن به پدال های گاز و ترمز و چرخش فرمان و … به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد می کرد و باعث کم شدن سرعت می شد یا شمع ها شروع به جرقه زدن در زمانی بخصوصی می کردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل می کردید و به سیستم سوخت رسانی در موقع لزوم دستور می دادید که سوخت را بداخل سیلندرها ارسال کند و… یا هیچ گاه به مقصد نمی رسیدید! یا سالم نمیرسیدید!
عمل مخفی سازی باعث می شود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
چندریختی
چند ریختی یا چند شکلی (Polymorphism) به این معنا است که اشیاء می توانند در موقعیت های مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونه ای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
انتزاع / تجرید
به این معنا است که یعنی خواص اشیاء را تا جای ممکن کاهش دهیم و صرفاً آن بخش از خواص یک شیء (در واقع) که به درد ما می خورد را نگه داریم.
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و می توان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و…. این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت می کند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر می دهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان می دهد. ولی فقط این یک ماشین نیست که این کار را انجام می دهد. تمامی ماشین ها این کارها را انجام می دهند. پس می توانیم این ماشین را 'تعریف' کنیم و بگوییم:
ماشین باربری وسیله ای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت می کند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن می رویم و از فروشندگان می خواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.
مفاهیم فوق در زبان های برنامه نویسی شیءگرا گنجانده شده اند. در این زبان ها، اشیاء زیادی از پیش وجود دارند که برنامه نویسان می توانند از آنها استفاده کنند.
ارتباط اشیاء
مجدداً به مثال ماشین باربری بر می گردیم و این بار، یک ماشین سواری را تعریف می کنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیه است. به عبارت دیگر ما به یک تعریف جدید می رسیم: خودرو. خودرو وسیله ای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی ساده تر می شود.
ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
* اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' میخواهد، چیزی دریافت نمی کند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها می تواتند ماشین باربری یا ماشین سواری بخواهد.
* کارواش را در نظر می گیریم. این کارواش خودرو را تمیز می کند و دیگر به طور جزئی عنوان نمی کند که کدام نوع خودرو را تمیز می کند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
* وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام نماس با متصدی کرایه ماشین میگوید: "اگر خودرو شمااز نوع باربری است، برای من ارسال کنید"، ولی اگر قصد جابجا شدن را دارد میگوید : "برای من یک ماشین سواری بفرستید."
در زبان های برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری می کنند. برخی از تعاریف کاملاً عام است و نمی توان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته می شود.
سامانه های چند عامله :
سامانه های چندعامله (Multi Agent Systems) یا به اختصار MAS روش های نوینی برای حل مسایل محاسباتی و پیاده سازی پروژه های نرم افزاری رایانه ای ارائه میدهند. از آنجا که در این گونه سامانه ها مجموعه ای متشکّل از چندین عامل سیستم را به وجود می آورد، دست یابی و نیل به اهدافی امکان پذیر می گردد که به وسیله سیستم های تک عامله میسّر نیست.
مزایا
1. این سیستم در اکثر شرایط کار می کند. به این معنا که چون مغز متفکر واحد ندارد و تصمیم گیری توزیع شده است، چنانچه حتی بخشی از سیستم نیز از کار بیافتد باز هم سیستم به کار خود ادامه می دهد.
2. این سیستم برای محیط هایی با مقیاس وسیع (Large Scale) و محیط های ناشناخته (Unknown) نیز گزینهٔ مناسبی نسبت به سیستم های تک عامله به شمار میآید. زیرا محیط سریع تر و بهتر پویش می شود.
3. این سیستم به راحتی موازی می شود و پردازش موازی را آسان می کند.
4. این سیستم قابلیت تزاید در خود دارد بدین معنا که ۱+۱ = ۳. به طور مثال ما میزی را که ۱۱۰ نیوتن نیرو برای بلند کردن لازم دارد با چهار نفر که هر کدام ۲۵ نیوتن نیرو می گذارند بلند می کنیم.
5. هزینه ها در این سیستم پایین می آید. نیازی نیست تا با صرف هزینهٔ کلان امکان پردازش سنگینی برای یک عامل فراهم کنیم. بلکه می شود چندین عامل با قدرت پردازشی کمتر همان کار را حتی سریع تر انجام دهند.
معایب
البته این سیستم معایبی هم دارد که استفاده از آن را محدود می کند. مهم ترین آنها کندی اندک در کار است (به طور کلی).به هر حال می توان بر حسب مورد نیاز، از این سیستم استفاده کرد.
روبوکاپ
دکتر پیتر استون یک پژوهشگر آمریکایی در دهه ۹۰ در پایان نامه دکترای خود این مساله را عنوان کرد که فوتبال زمینه تحقیقاتی بسیار مناسبی برای سامانه های چند عامله است. این مساله در طی چند سال موجب پدید آمدن مسابفات بین المللی و موفق روبوکاپ شد که در آن تیم های دانشجویی و حتی دانش آموزی بسیاری از سراسر جهان با طراحی و شبیه سازی روبوت های فوتبالیست با هم رقابت می کنند. این مسابقات از سال ۹۷ همه ساله در یکی از کشورهای جهان , توسط فدراسیون جهانی روبوکاپ برگزار می گردد . البته لازم به ذکر است که مسابقات کوچک تری نیز همه ساله در سطح کوچک تری به صورت آزاد برگزار می گردند مانند Iran open , German open , US open, German open و … . این زمینه تحقیقاتی در دانشگاههای ایران و حتی برخی دبیرستان های خاص طرفداران بسیاری دارد و معمولاً تیم های ایرانی رتبه های مناسبی در این مسابقات کسب می کنند.
مدریت برنامه های به هم وابسته
یکی از مزایای مدیریت پورتفولیو توانایی کاهش بیهوده رقابت داخل برنامه برای منابع است علاوه بر این توجه هم پوشانی های برنامه ها وتبدیل به وابستگی های مفیداست. یک سازمان یک سیستم است ،جایی که تغییرات در یک زمینه اثرات موجی بر دیگر زمینه ها دارد. مدیریت پورتفولیو نگاه می کند به تعامل بین برنامه های سرمایه گذاری. وقتی که ما برنامه ها را بدقت اداره وتنظیم میکنیم وابستگی برنامه ها به عنوان یک منبع فرصت است .در واقع آنیک راه حل برای حل مشکل کمیت و مواد اولیه محدود است
چهار نوع متفاوت تعاملات بین مسائل:
1. وابستگی متوالی
2. نتایج مشترک
3. رقابت برای منابع محدود
4. گلوگاههای تغییر
وابستگی متوالی: این در مواردی است که برنامهA وابسته به برنامه B باشد اگر قرار است که برنامه A انجام شود لازم است که برنامه B اول انجام شود.مثلا در تجارت الکترونیکی اثر بخشی یک برنامه اغلب نیاز دارد به ساپورت زیر ساختهای IT وهمچنین برای برای درجه بندی برنامه های زیر ساختی که زودتر از کارهای زیر ساختی دیگر باید انجام شود.
نتایج مشترک مواردی که برنامه های AوB خروجی مشترک دارند برای رسیدن به مجموعه ای از مزایا،رشد درآمد در سهم بازار،کاهش هزینه
رقابت بر روی منابع محدود : جایی که برنامه AوB نیاز به افرادی مشابه ویا منابع مشابه دارند به صورت فردی هر برنامه ممکن است موفق ذباشد ولی به صورت جمعی منابع حیاتی کافی را ندارند .نتیجه رقابت میتواند یکسری از پروژه ها را معوق بگذارد.مدیریت خوب پورتفولیو تعیین می کند منابع مورد نیازوزمان مورد استفاده برای هر برنامه را وانتخاب مجموعه ای از برنامه ها که حتما قابل انجام است .
گلوگاههای تغییر: جایی که برنامه های AوB یک زمینه کسب وکار دارند چه مقدار تغییر می تواند در این زمینه انجام شود؟ آن ممکن نیست عملی شود برای گرفتن مزایای تعیین شده از دو برنامه.
در تصمیم گیری پورتفولیو مهم است که مطمئن شویم که خواسته های واحد های مختلف سازمان به هماهنگ بودن با دیگر واحدهای سازمان به عنوان یک کل توجه کرده اند .ارزش هر واحد با توجه به فعالیت های اصلی شرکت باید تحلیل شود . محیط مدیریت پورتفولیو پویا ودر حال تغییر است.
5 تنظیم ترکیب پورتفولیو
مدیریت پورتفولیو با فرآیند انتخاب شروع میشود .ولی آن فقط نقطه شروع است .نقش مهمی که ترکیبات پورتفولیو در همه زمانها منعکس کننده شرایط متغییر محیط کسب وکار است.ترکیبات پورتفولیو وتخصیص منابع به اجزاء برنامه نیاز دارد ، پاسخ به سوالات زیر ضروری است :
1-ما با اضافه ویاکاهش هزینه هایی که در طبقه ها بوجود می آید چکارمی خواهیم بکنیم ؟
2-درمورد برنامه هایی که مرور زمان آن برنامه ها را ملغی می کند با این برنامه ها چه کار میکنید؟
3 -با فرصتهای جدید چه برخوردی میکنید؟
مدیریت پروژه و راهبری پروژه
یکی از فرآیندهای عمده اداره کل نرم افزار مدیریت پروژه ها می باشد. این فرآیند برطبق استانداردها و روشهای بین المللی انجام می پذیرد که همیشه براساس نـــوآوری هـــای فـــن آ وری روز بــه روز می گردد. فعالیت های عمده ای که در این فـر آیـنـد صـورت می پذیرند شامل مــوارد زیـــــر می باشند.
1. بر آورد و تخمین منابع مورد نیاز جهت انجام پروژه تعریف شده
2. تعیین سازمان ، منابع انسانی، مسئولیت ها ، طرح ها، استانداردها، متدولوژی و روش های حاکم در پروژه
3. تعیین تفصیلی سازمان های فرعی پروژه (مدیریت تغییرات/ مدیریت پیکر بندی/ کنترل کیفیــــت/ اعتبار سنجی و صحت سنجی/ مدیریت ریسک و …(
4. تعیین ریسک های بلقوه در پروژه و نحوه کنترل آنها
5. مدیریت منابع پروژه (شامل زمان، نیروی انسانی ، تجهیزات ، فرآ ورده ها و …(
6. ارزیابی پیشرفت پروژه و منابع مصرف شده و تهیه گزارشات کنترلی لازم جهت اعلام به سایر عوامل درگیر در پروژه (کارفرما/ ناظر/ مدیریت ارشد سازمان و …)
حوزه های تحت مدیریت پروژه های اداره کل نرم افزار طیف وسیعــــی دارنــــد. برخـــی از ایــن حوزه ها مستقیماً براساس نیاز مشتریان تعیین می گردند و برخی نیز با توجه به نیاز مشتریان بطور غیر مستقیم تعیین می شوند.برخی از این حوزه ها عبارتند از:
1. تهیه طرح های جامع استراتژیک(Master Planning)
2. مدل سازی سازمان و بهبود نظام های اجرایی(BPR)
3. تحلیل ، تعیین و مدل سازی نیازمندیها
4. معماری سیستم های اطلاعاتی
5. طراحـــی هــای کــلان و تفصیــلـــی نیـازمنـدیهــا در فــن آوری هـــای مختلـــف نظیـــر CORBA / Java / Microsoft.Net / Microsoft COM+ و…
6. تولید و ساخت اجزاء نرم افزاری در کلیه فن آ وریهای فوق الذکر
7. تست، اعتبار سنجی و صحت سنجی فر آورده ها
8. تبدیل وانتقال داده ها (Data Migration)
9. متناسب سازی بسته های نرم افزاری
10. استقرار و راه اندازی سیستم های کاربردی
11. تعمیم وگسترش سیستم های کاربردی
12. پشتیبانی و نگهداری سیستم های کاربردی
براساس درخواست کارفرما و پیشنهاد این اداره کل برای مدیریت پروژه متدولوژی انتخاب می گردد که تعیین کننده چهارچوب کلی و گامهای پروژه و جزئیات فرآیندها ، فرآورده های رسمی قابل تحویل و همچنین برخی از استانداردها، طرح ها و قالب های پروژه می باشد. حوزه خدمات مورد درخواســــت، فن آوری متناسب با شرح خدمات درخواست شده و تسلط عوامل اصلی درگیر در پروژه از عوامل اصلی در تعیین نوع متدلوژی پروژه می باشند. اداره کل نرم افزار تاکنون مدیریت پروژه های خود را با انواع مختلفی از متدلوژی ها به انجام رسانده است که از این حیث تجربه های گرانبهایی در عملیاتی کردن و متناسب سازی آ نها مطابق شرایط محیـط هــای حاکــم در صنعــت فن آوری اطلاعات کشورمان اندوخته است. برخی از این متدلوژی ها عبارتند از:
1. Oracle Case Method
2. SSADM
3. Yordon
4. BSP
5. RUP
6. RAD
استفاده از ابزارهای مناسب جهت مدیریت متاثرتر پروژه ها و همچنین بررسی دقیق وضعیت پیشرفت پروژه، وضعیت مصرف منابع و … از سیاست های اصلی اداره کل نرم افزار می باشد. با استفاده از ابزارهای مورد استفاده در سطح این اداره کل و تجربه اجرایی استفاده از آنها، کلیه عوامل درگیر در پروژه مانند کارفرما و ناظر همواره قابلیت حصول تصویر دقیقی از وضعیت پروژه و میزان پیشرفت ها و یا انحراف های احتمالی را خواهند داشت. برخی از این ابزارها عبارتند از:
1. Microsoft Projact
2. IBM Princ2
فصل پنجم
چکیده مطالعات فنی ، مالی و اقتصادی
فصل پنجم : چکیده مطالعات فنی ، مالی و اقتصادی
جدول (1-1) جمع بندی مشخصات اصلی طرح تولید
1-1
مشخصه طرح
ظرفیت تولید سالیانه
نام محصول ظرفیت واحد:
1-6
دستگاهها و تجهیزات خط تولید
بخش داخلی:100درصد
بخش خارجی:
خدمات کامپیوتری
1-7
زمین و ساختمانها
مساحت زمین: 50 مترمربع
سطح زیر بنا: 50 متر مربع
سالن تولید: 30 مترمربع
انبار: 6 متر مربع
تاسیسات و تعمیرگاه: مترمربع
اداری و رفاهی: 14 متر مربع
فضای باز:
1-2
شاخصهای عملیاتی
تعداد روز کاری:6روز
تعداد نوبت کاری:2نوبت
زمان هر نوبت کاری:8الی14و16الی22
1-3
درصد تامین مواد اولیه
داخلی: 100درصد
خارجی:
1-8
سرمایه گذاری:
دارائیهای ثابت: 65 میلیون ریال
سرمایه در گردش: 35 میلیون ریال
کل سرمایه گذاری: 100 میلیون ریال
سرمایه گذاری مجری طرح: 50 میلیون ریال
وام کوتاه مدت: 50 میلیون ریال
تسهیلات درخواستی : 50 میلیون ریال
1-4
تعداد کارکنان
مدیریت:3 الی 4 نفر
مهندس:—–
تکنسین:5 الی 7
کارگر ماهر:10 نفر
کارگر ساده:1 نفر
کل پرسنل:22 نفر
1-5
1-9
هزینه های تولید
هزینه های ثابت: میلیون ریال
هزینه های متغیر: میلیون ریال
کل هزینه های سالیانه000 179800 میلیون ریال
نتیجه گیری :
روند رو به رشد رایانه ها در دنیای جدید و نرم افزاری شدن بسیاری از کارهای سخت و زمان گیر گذشته و همچنین نیاز جامعه به نرم افزارهایی که بتوانند کارها را آسان کنند هدف اصلی از انجام این پروژه کارآفرینی میباشد ، همانگونه که مطلع هستید تعداد شرکتهایی که این کار را به صورت تخصصی انجام دهند ، در کشور ما به نسبت سایر کشور ها بسیار کم می باشد ، با توجه به بازار کار گسترده ای که برای این شرکت در متصور هستیم و با استفاده از ارقام و اعداد و محاسبات مالی انجام شده بر این باور هستیم که این شرکت می تواند شرکت موفقی باشد و به سود دهی لازم دست پیدا کند . انشا الله …
فهرست مطالب
پیشگفتار : 2
فصل اول 3
معرفی طرح 3
فصل اول – معرفی طرح 3
1-2-مشخصات محصول 4
1-1-2- نام و کاربرد محصول: 4
2-1-2-مشخصات فنی محصول 4
3-1-2-معرفی روشهای تولید 5
4-1-2-تشریح مختصر فرایند 5
فصل دوم 6
تعیین ظرفیت 6
فصل دوم – تعیین ظرفیت 7
2-2-تعیین ظرفیت تولید 7
2-3-برآورد میزان مصرف مواد اولیه و قطعات خریدنی 7
2-4-معرفی دستگاه ها و تجهیزات تولید 8
– 8
2-5-معرفی تجهیزات و تاسیسات عمومی 8
فصل سوم 9
معرفی نیروی انسانی 9
فصل سوم – معرفی نیروی انسانی 9
1-3-برآورد پرسنل تولیدی 10
8 10
2-3-پرسنل اداری و خدمات 10
فصل چهارم 11
هزینه ها 11
معرفی هزینه ها 11
مبلغ سالانه به ریال 11
برآورد هزینه استهلاک 12
فصل پنجم 13
شرح فرایند واطلاعات فنی مورد نیاز 13
فصل پنجم – شرح فرایند و اطلاعات فنی مورد نیاز : 14
تعریف مهندسی نرم افزار 14
اصطلاح مهندسی نرم افزار عموماً به معانی مختلفی به کار می رود : 14
محدوده مهندسی نرم افزار و تمرکز آن 15
نیاز به مهندسی نرم افزار 15
تکنولوژی ها و روشهای عملی 16
ماهیت مهندسی نرم افزار 16
مدیریت ریسک در مهندسی نرم افزار : 17
مراحل اصلی در پیاده سازی مدیریت ریسک 18
مهندسی معکوس در رایانه : 21
برنامه نویسی رایانه : 21
زبان برنامه نویسی 22
زبان های برنامه نویسی 22
نمونه یک برنامه 23
پارادایم ها 24
برنامه نویسی موازی : 25
تعریف 25
هوش مصنوعی : 25
تعریف و طبیعت هوش مصنوعی 28
فلسفهٔ هوش مصنوعی 28
مدیریّت پیچیدگی 29
تکنیک ها وزبانهای برنامه نویسی هوش مصنوعی 31
سیستم های خبره 32
عامل های هوشمند 32
برنامه نویسی شی گرا : 32
وراثت 33
کپسوله سازی 34
چندریختی 34
انتزاع / تجرید 35
یک مثال کاربردی 35
ارتباط اشیاء 35
سامانه های چند عامله : 36
مزایا 37
معایب 37
روبوکاپ 37
مدریت برنامه های به هم وابسته 38
چهار نوع متفاوت تعاملات بین مسائل: 38
5 تنظیم ترکیب پورتفولیو 40
مدیریت پروژه و راهبری پروژه 40
فصل پنجم 43
چکیده مطالعات فنی ، مالی و اقتصادی 43
جدول (1-1) جمع بندی مشخصات اصلی طرح تولید 44
نتیجه گیری : 46
2