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

هدف این فرایند آن است که از یک سو برآورده ساختن نیازهای کاربران و از سوی دیگر کیفیت مناسب عملکرد سیستم تضمین گردد و بنابراین بایستی حاوی مکانیسمهایی برای اعتبارسنجی یعنی خروجی مطابق با خواستهها (Validation) و وارسیپذیری یعنی صحت عملکرد خروجی (Verification) باشد. فرایند توسعه ضمن دادن آزادی به تحلیلگر باید تضمین کند که زمانبندی اجرای پروژه رعایت میشود.
توسعه نرمافزار ارتباط تنگاتنگی با مهندسی نرمافزار دارد و از دید بسیاری این دو مفاهیمی تقریباً یکسان هستند.
در سالهای اخیر با رشد نیاز به تولید نرمافزارهای تجاری توسعه نرمافزار به بحثی مهم تبدیل شده است و روشهای گوناگونی در قالبهای مختلف برای تولید نرمافزارها بر مبنای نیازهای کاربران، مشخصات کلی سیستم، شرایط مدیریتی و اقتصادی، زمان بندی و سطح کیفی به وجود آمده اند.
اغلب توسعه نرمافزار Software Development با برنامه نویسی Programming یکسان فرض شده اند در حالیکه توسعه نرمافزار بر خلاف برنامه نویسی با تولید تجاری نرمافزار، استفاده بهینه از بخشهای در دسترس تولید شده و همچنین روشهای مدیریت، افزایش سرعت و افزایش کیفیت پروژههای نرمافزاری سر و کار دارد.
کیت توسعه نرمافزار
کیت توسعهٔ نرمافزار یا SDK مجموعه توابع و کتابخانههای کامپایل شدهای که تولیدکنندگان نرمافزار برای آسان کردن برنامهنویسی برای محیط یا سکوی خاصی فراهم میکنند و در اختیار برنامهنویسان کاربردی قرار میدهند.
رابط برنامهنویسی نرمافزار
رابط برنامهنویسی نرمافزار (به انگلیسی: Application Programming Interface یا API) یا به صورت خلاصه رابط برنامه نویسی، رابط بین یک کتابخانه یا سیستمعامل و برنامههایی است که از آن تقاضای سرویس میکنند.
رابط کارکردهایی را تعریف میکند که کتابخانه یا سیستمعامل میتواند ارائه دهد و مفهومی مجرد است. این کارکردها سپس در قالب یک نرمافزار یا کتابخانه پیادهسازی میشوند. به عبارت سادهتر، رابط برنامهنویسی مجموعه توابعی است که یک برنامه میتواند از یک برنامه دیگر فرا بخواند.
برای مثال مایکروسافت برای APIهای ویندوز مرجعهایی استاندارد دارد که با استفاده از آنها برنامهنویسان میتوانند از قابلیتها و سرویسهای سیستمعامل در توسعه و نوشتن برنامههای کاربردی خود استفاده کنند.
گسترش نرمافزار
گسترش نرمافزار به تمامی فعالیتهایی که یک نرمافزار را برای استفاده آماده میکند اطلاق میشود.
پارادایم برنامهنویسی
پارادایم برنامهنویسی یا شیوههای برنامهنویسی، به شیوههای اساسی برنامهنویسی رایانه گویند.
مرور کلی
یک زبان برنامهنویسی میتواند یک یا چند شیوه برنامهنویسی را پشتیبانی نماید. برای مثال، برنامههای نوشته شده با سی++ میتوانند کاملاً بصورت رویهای باشند یا کاملاً منطبق بر شیوه برنامهنویسی شئگرا که در تضاد کامل با شیوه رویهای است بوده یا حتی حاوی عناصری از هر دو شیوه باشند. تصمیمگیری برای چگونگی استفاده از عناصر شیوههای برنامهنویسی برعهده طراح برنامه یا برنامهنویس میباشد.
برنامهنویسی دستوری
برنامهنویسی دستوری (به انگلیسی: Imperative programming) در علوم رایانه یکی از شیوههای برنامهنویسی است که در آن مراحل اجرای یک برنامه کامپیوتری قدم به قدم توسط برنامه نویس بیان میشود. این بر خلاف زبانهای اعلانی است که در آنها تنها نتیجه انجام دستورات بیان میشود. به بیان دیگر در زبانهای دستوری چگونگی اجرای برنامه بیان میشود اما در زبانهای اعلانی چیستی نتیجه بیان میشود.
به عنوان مثال اگر قصد باز کردن دری را داشته باشیم و با زبان اعلانی این را بخواهیم بیان کنیم خواهیم گفت در را باز کن اما اگر با زبان دستوری بیان کنیم خواهیم گفت بلند شو، به طرف در نردیک شو، دستگیره را بگیر و در را به طرف بیرون هل بده.
برنامهنویسی تابعی
برنامهنویسی تابعی (به انگلیسی: Functional programming) نوعی پارادایم برنامهنویسی است که در آن «محاسبات» به صورت ارزشیابی توابع ریاضی در نظر گرفته میشوند.
برنامهنویسی رویهای
برنامهنویسی پروسهای یک پارادایم برنامهنویسی بر پایه مفهوم فراخوانی پروسهها است. پروسه که همچنین به نامهای روال، زیرروال (سابروتین)، تابع، روش شناخته میشود، دربردارنده یک سری گامهای محاسباتی است که باید توسط رایانه اجرا شوند.
هر پروسه میتواند در هر نقطهای در طول اجرای برنامه فراخوانده شود شامل فراخوانی پروسه توسط خودش (برنامهنویسی بازگشتی) یا پروسههای دیگر.
برنامهنویسی شیءگرا
برنامهنویسی شیءگرا (به انگلیسی Object-Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن، شیها میباشند. در واقع در این شیوه برنامه نویسی، برنامه به شیء گرایش پیدا میکند. به این معنا که دادهها و توابعی که قرار است بر روی این دادهها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمعبندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله میشوند و از این طریق، توابع بیگانهٔ خارج از آن شی، دیگر امکان ایجاد تغییر در دادههای درون آن شی را ندارند. به طور مثال حساب بانکی شما که شامل مشخصات فردی شما و میزان سپردهٔ شما در بانک است، تشکیل یک شی را میدهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد. از دیگر ویژگیهای برنامه نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادیامهای برنامه نویسی است.
فلسفه یی که منجر به شکل گیری ی زبانهای شی گرا شد، عبارت بود از این واقعیت که نحوهٔ عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه یی شی گراست، از همین روی میبایستی زبانی تعریف میشد که همین شیوه را مبنای کار خود قرار داده و بازتولید میکرد. و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در زبانهای برنامه نویسی نیز میبایستی این اصول کلی برقرار میشد. تا به این شکل، برنامه نویس بتواند با بهرهگیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شیهای مختلفی را تعریف نموده، این شیها را در ارتباط با یکدیگر قرار داده و از شیهای پویای تولید شده برای حل مساله ی پیش روی استفاده نماید. امروزه اکثر زبانهای دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی میکنند. زبانهایی مانند جاوا، سی++، سی شارپ، دلفی از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامهها در آنها بلوکهایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی میکنند. زبانهای سی++ و پیاچپی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده میشوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی مینماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید. مفهوم مدیریت دیداری
مفاهیم عمده
کلاس
کلاس نوع خاصی از آرایه است که امکان ذخیره و جمعبندی تعداد زیادی المان را (که شامل دادهها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره میکند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ دادههایی هم جنس است، کلاس میتواند دادههایی از جنسهای مختلف را ذخیره نماید. به طور مثال در نظر بگیرید که میخواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم.
حال در نظر بگیرید که نه فقط یک تاریخ، بلکه n تاریخ متفاوت مورد نیاز است. این بدان معنی ست که میبایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر مینماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست، چرا که هر بار میبایستی نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمیتوانند هم نام باشند). در اینجاست که کلاسها به خوبی وارد عمل میشوند. با استفاده از کلاسها میتوان متغیرهای متعدد (در مثال بالا: int day ;String month, ;int year) را زیر عنوان یک جنسیت مشترک جدید (به طور مثال هر سه را در یک کلاس با نام Date)، تعریف و جمعبندی نمود. و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال، از کلاس Date به میزان مورد نیاز استفاده کرد
وراثت
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس میتواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاسهای دیگر را به ارث ببرد). در یک مثال ساده میتوان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، میتوان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل زانتیا مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفهجویی در نوشتن کد و تا حدودی تضمین صحت کد موجود میشود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاسهایی که از این کلاس پایه ویژگیای ا به ارث بردهاند این تغییر اعمال خواهد شد.
مخفیسازی
کپسوله سازی، مخفیسازی (Encapsulation)، یا لفافهبندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده میخواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر میدارید، استارت میزنید و با فشار آوردن به پدالهای گاز و ترمز و چرخش فرمان و ... به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد میکرد و باعث کم شدن سرعت میشد یا شمعها شروع به جرقه زدن در زمانی بخصوصی میکردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل میکردید و به سیستم سوخت رسانی در موقع لزوم دستور میدادید که سوخت را بداخل سیلندرها ارسال کند و... یا هیچگاه به مقصد نمیرسیدید! یا سالم نمیرسیدید!
عمل مخفی سازی باعث میشود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
چندشکلی
چند ریختی(Polymorphism) چند ریختی، کمیتی است که به یک رابط امکان میدهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین میکند. مثال سادهای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیلها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به طور مکانیکی کار میکند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام میدهد. بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید، میتوانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه نویسی نیز اعمال میشود. به طور کلی، مفهوم چند ریختی، اغلب با عبارت ((یک رابط، چندین روش))بیان میشود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء میتوانند در موقعیتهای مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونهای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
انتزاع / تجرید
به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّتهای مشابه میگردد.
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و میتوان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و.... این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت میکند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر میدهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان میدهد. ولی فقط این یک ماشین نیست که این کار را انجام میدهد. تمامی ماشینها این کارها را انجام میدهند. پس میتوانیم این ماشین را 'تعریف' کنیم و بگوییم:
ماشین باربری وسیلهای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت میکند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن میرویم و از فروشندگان میخواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.
مفاهیم فوق در زبانهای برنامه نویسی شیءگرا گنجانده شدهاند. در این زبانها، اشیاء زیادی از پیش وجود دارند که برنامهنویسان میتوانند از آنها استفاده کنند.
ارتباط اشیاء
مجدداً به مثال ماشین باربری بر میگردیم و این بار، یک ماشین سواری را تعریف میکنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیهاست. به عبارت دیگر ما به یک تعریف جدید میرسیم: خودرو. خودرو وسیلهای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی سادهتر میشود.
ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' میخواهد، چیزی دریافت نمیکند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها میتواتند ماشین باربری یا ماشین سواری بخواهد.
کارواش را در نظر میگیریم. این کارواش خودرو را تمیز میکند و دیگر به طور جزئی عنوان نمیکند که کدام نوع خودرو را تمیز میکند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین میگوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد میگوید: «برای من یک ماشین سواری بفرستید.»
در زبانهای برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری میکنند. برخی از تعاریف کاملاً عام است و نمیتوان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته میشود.
مدیریت پیچیدگی
اعمال شیوههای مدیریتی با محوریت اشیاء در مطالعه، طراحی، ایجاد، و اجراء پروژههای مهندسی نرمافزار و مهندسی دانش.
برنامهنویسی منطقی
برنامهنویسی منطقی در کلیترین مفهوم آن، کاربرد منطق ریاضی در برنامهنویسی رایانه است.
معماری نرمافزار
معماری نرمافزار یعنی ساختار و سازمان یک سیستم نرمافزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز میباشد. در واقع اجزاء را در حوزههای مرتبط به هم گروه بندی میکند. دیگر حوزههای مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز میشوند.
معماری نرمافزار از کلیدیترین بخشهای تولید نرمافزار مخصوصا نوع تجاری آن است که البته در سالهای اخیر با ایجاد مدلهای کلاسیک تولید نرمافزار به نرمافزارهای عظیم تر محدود شده است.
معماری نرمافزار در واقع انتخاب یک ساختار کلی برای پیاده سازی یک پروژه نرمافزاری بر مبنای مجموعه ای از نیازهای کاربری و تجاری یک سیستم نرمافزاری است تا هم بتوان کاربردهای مورد نظر را پیاده سازی کرد و هم بتوان کیفیت نرمافزار، تولید آن و نگهداری آن را نیز بهینه کرد و سرعت بخشید. به عبارتی دیگر: معماری نرم افزار یک برنامه یا سیستم محاسباتی، ساختار یا ساختارهای آن سیستم محاسباتی است که خصوصیات قابل رویت از بیرون، عناصر و ارتباطات بین آنها را نشان می دهد.
فرایند توسعه نرمافزار
فرایند تولید نرمافزار که با عنوان «چرخهٔ حیات تولید نرمافزار» نیز شناخته میشود، ساختاری است که روی توسعه و تولید محصولات نرمافزاری اعمال میشود. عبارتهای مشابهی چون «چرخهٔ حیات نرمافزار» و «فرایند نرمافزار» در این رابطه استفاده میشود.الگوهای گوناگونی نظیر فرایندهای (خاص) وجود دارند که هر کدام خط مشی مختص (آن فرایندها) برای انجام کارها و فعالیتهای متنوع در طول فرایندها را مشخص میکنند. برخی عنوان میکنند که «طرح چرخهٔ حیات» یک عبارت بسیار عمومی بوده و «فرایند تولید نرمافزار» عبارت تخصصیتر است. برای مثال خیلی از فرایندهای تولید نرمافزار ویژهای هستند که خود زیر مجموعه چرخهٔ حیات حلزونی به شمار میروند.از مهمترین کارها در تولید نرمافزار استخراج نیازمندیها یا تحلیل نیازمندیهای آن سامانه است. مشتریان عمومی معمولاً تصور مفهومی، انتزاعی و مبهمی از نتیجه نهایی خواستههایشان دارند و نمیدانند به درستی نرمافزار مورد نظرشان چه کاری باید انجام دهد. در این مرحله نیازمندیهای ناتمام، پیچیده و مبهم، و حتی متضاد توسط مهندسان نرمافزار ماهر شناسایی میشوند. در این برهه تکه نرمافزارهای آماده، تجربهشده و فعال ممکن است برای پایین آوردن ریسک (و مشکلات) نیازمندیها کمک کنند.نخست نیازمندیهای عمومی از کاربران جمعآوری شده و دامنه توسعه و تولید نرمافزار که باید تولید شود شناسایی و تحلیل میشود، سپس مستندات بصورت شفاف نوشته میشوند. معمولاً به این مستند، مستند دامنه یا محدوده سامانه اطلاق میشود.برخی قابلیتها ممکن است در ابتدای پروژه به خاطر مسائل مالی یا نیازمندیهای غیر شفاف و نامشخص خارج از محدوده پروژه باشند. اگر تولید و توسعه نرمافزار برونسپاری شود (یعنی به شرکتهای خارجی محول شود) این مستندات به عنوان مستندات قانونی و حقوقی در نظر گرفته میشود؛ بنابراین در صورت اتفاق هرگونه دعوای حقوقی یا ابهام در مورد تعهدات دادهشده به کاربر، این مسائل قابل شفافسازی خواهد بود.=== پیادهسازی، آزمون و مستندسازی ===پیادهسازی آن قسمت از فرایند تولید نرمافزار به شمار میرود که مهندسان نرمافزار در دنیای واقعی تمام کدهای پروژه را مینویسند و به قول معروف برنامهنویسی میکنند.آزمون نرمافزار بخش لاینفک و مهم از فرایند تولید نرمافزار است. این قسمت از فرایندها کمک میکند تا مشکلات سامانه بصورت سریع شناسایی شوند.مستندسازی در تمام مراحل پروژه چون طراحی داخلی نرمافزار برای تعیین اهداف سیستم، نگهداری آینده و ارتقاء و بهبود سامانه هرچند پروژه پایان یافته باشد انجام میشود. همچنین ممکن است این مستندسازی شامل نوشتن ساختار تکههای برنامه ظاهر برنامه کاربردی داخلی و خارجی هم باشند. این مطلب خیلی مهم است که همه چیز پروژه مستندسازی شود.=== استقرار و نگهداری سامانه ===استقرار و تحویل سامانه پس از اینکه آزمون مناسب را گذراند و برای انتشار، فروش یا هر نوع توزیع برای محیط کار نهایی تأیید شد انجام خواهد شد.آموزش نرمافزار و پشتیبانی خیلی مهم است و خیلی از تولیدکنندگان و توسعهدهندگان نرمافزارها اهمیت آن را درک نمیکنند. مهم نیست که چقدر زمان و برنامهریزی توسط تیم تولید و توسعه نرمافزار برای ایجاد نرمافزار مصرف کردهاند اگر در آخر کار کاربری در سازمان نباشد تا از نرمافزار استفاده کند. مردم معمولاً در برابر تغییرات مقاومت نشان میدهند و از ماجراجویی در محیط ناآشنا اجتناب میکنند، برای همین در فاز استقرار این خیلی مهم است کلاسهای آموزشی برای کاربران جدیدِ نرمافزار گذاشته شود.نگهداری و ارتقای نرمافزاری برای پوشش، مسائل پوشش دادهنشده یا نیازمندیهای تازهای که ممکن است بوجود آیند مدت خیلی زیادی حتی بیشتر از زمان اولیه تولید نرمافزار زمان بگیرد. این مرحله ممکن است نیاز باشد تا کدهای برنامهنویسی تازهای که در طراحی اصلی برنامه نیز دیده نشده اضافه شود تا مسائل و مشکلات دیدهنشده حل شوند یا ممکن است کاربر درخواست عملیات اصلی دیگری کند و برنامهنویسیهای تازهای برای برآورده کردن نیازهای جدید انجام گیرد. اگر هزینه کار فاز نگهداری از ۲۵ درصد هزینه فاز قبلی (پیادهسازی) بیشتر باشد، این احتمال وجود دارد که کیفیت کلی فاز قبلی خیلی ضعیف بوده باشد. در این صورت مدیران پروژه باید گزینهٔ ایجاد مجدد سامانه (یا بخشی از سامانه) را قبل از اینکه هزینههای نگهداری غیر قابل کنترل شود را مطرح کنند.الگوهای تولید نرمافزارالگو آبشاریالگو آبشاری فرایندها را به گونهای نشان میدهد که کجا تولید کنندگان نرمافزار (برنامهنویسان) فازهای زیر را به ترتیب انجام دهند:# مشخصات مورد نیاز (تحلیل نیازمندیها)# طراحی نرمافزار# پیادهسازی و یکپارچهسازی# تست نرمافزار (یا اعتبارسنجی)# گسترش نرمافزار (یا نصب)# نگهداری نرمافزاردر سختگیرانهترین حالت آبشاری، بعد از اینکه هر فاز کاملاً پایان پذیرفت، به مرحله بعدی میرویم. بازبینی که اجازه ایجاد تغییرات در سامانه را بدهد (که ممکن است شامل تغییرات فرایندهای کنترل رسمی باشد) فقط قبل از رفتن به مرحله بعد امکانپذیر است. همچنین بازبینی ممکن است جهت اطمینان از پایان قطعی این فاز (مرحله) بکار گرفته شود. فازی که معیارهای تکمیل آن کامل شده، معمولاً با عنوان دروازه اطلاق میشود که نشان میدهد پروژه از فاز فعلی به فاز بعدی منتقل شده است. الگو آبشاری از بازبینی و تجدید نظر فازهای قبلی که کامل شدهاند، جلوگیری میکند. این عدم انعطافپذیری مفصل در الگو آبشاری محض، دست مایه انتقاد، پشتیبانی کنندگان الگوهای انعطاف پذیر است.الگو حلزونیخصوصیت کلیدی الگو حلزونی مدیریت ریسک در تمام مراحل چرخهٔ تولید نرمافزار است. در سال ۱۹۸۸ میلادی بری بوهم به صورت رسمی الگو حلزونی فرایند تولید نرمافزار را منتشر کرد، که ترکیبی از بعضی کلیدهای تایید شده متدولوژی الگو آبشاری و نمونهسازی سریع است، اما احساس میشود الگو ارائه شده تاکید در ناحیه های کلیدی (الگو آبشاری) را با متدهای دیگری همچون بررسی دقیق و تحلیل دائمی ریسکها، سیستمهای خاص مناسب برای سامانه پیچیده و بزرگ، کوتاه تر کرده است.الگو حلزونی این روش را با چهار نمودار که نشان دهند فعالیت های زیر است، به تصویر می کشد که فرایندها در چند مرحله تکرار انجام میشود:# تدوین و فرموله کردن برنامه ریزی خوب است برای شناسایی اهداف سیستم، قسمت های انتخاب شده جهت پیاده سازی برنامه، محدودیتهای واضح و مشخص پروژه.# تحلیل ریسک و مشکلات سامانه: ارزیابی تحلیلی برنامه های انتخاب شده، جهت مشخص کردن چگونگی شناسایی و از بین بردن ریسکها.# پیاده سازی پروژه: پیاده سازی تولید نرمافزار و تایید کارایی سامانه. الگو حلزونی مبتنی بر ریسک، بر اختیارانتخاب گزینه ها و محدودیتها در سفارشها برای پشتیبانی استفاده مجدد نرمافزار و اینکه کیفیت نرمافزار میتواند در ادغام اهداف ویژه در تولید نرمافزار کمک میکند، تاکید میکند.به هر حال الگو حلزونی شرایط محدود کننده زیر را دارا می باشد: # الگو حلزونی تحلیل ریسکها را تاکید میکند و بنابراین کاربران باید این تحلیل را قبول کنند و فکری برایش کنند (این مطالب را در نظر داشته باشند). این مسئله نیازمند اعتماد متقابل و همچنین تمایل به هزینه کردن برای رفع ایرادات، در هنگام تولید نرمافزار است و این دلیل استفاده شدن این الگو تولید نرمافزار پروژه های بزرگ است.# درصورتیکه در هنگام پیادهسازی تحلیل ریسکها تاثیر منفی روی سود پروژه زیاد باشد نبایستی از الگو حلزونی استفاده گردد.# تولید و توسعه دهندگان نرمافزار بصورت فعال حواسشان به ریسکهای قابل حل خواهد بود و به دقت آنها را در الگو حلزونی تحلیل میکنند.مرحله اول تدوین و فرموله کردن یک برنامه برای رسیدن به اهداف با این محدودیتها، و پس از آن تلاش برای پیدا کردن و حذف تمام خطرات بالقوه (ریسکهای بالقوه) از طریق تجزیه و تحلیل دقیق و در صورت لزوم، با ساخت نمونه اولیه است. اگر برخی ریسکها قابل حل نبودند در این صورت مشتریان باید تصمیم بگیرند که آیا میخواهند انجام پروژه را خاتمه دهند یا از ریسکهای مورد نظر چشم پوشی کنند و به هر ترتیب ادامه دهند. در نهایت، نتایج ارزیابی شده و طراحی مرحله بعدی آغاز میشود.در حالت کلی یک الگو تکاملی است که به صورت مجموعهای از نسخههای افزایشی توسعه میابد و همچنین در طی تکرارهای اولیه ممکن است یک الگو کاغذی یا یک نمونه اولیه باشد ولی در طول تکرارهای بعدی هر بار نسخه کاملتری از سامانه تولید میشود و این الگو به ۳ تا ۶ نواحی کاری تقسیم میشود.روش تکرارشونده و افزایشیروشی تکراری تولید نرمافزار اجازه ی ایجاد که پروژه در ابتدا از بخشهای کوچک شروع شود و به مرور زمان سامانه رشد کند تا کمک کند در این درگیری مشکلات مهم پیدا شوند قبل از اینکه فرضیات اشتباه باعث خراب شدن سامانه شوند. الگو تکرار فرایند ها بوسیله تولید کنندگان نرمافزارهای تجاری انتخاب و استفاده میشود چون این الگو اجازه می دهد تا نیازهای کاربرانی که در زمان طراحی دقیقاً نمیدانند چگونه نیازمندیهایشان از سامانه را معرفی کنند بصورت بالقوه برآورده شود. روش توسعه سریع نرمافزارروش توسعه سریع نرمافزار (به انگلیسی: Rapid application development)(مخفف انگلیسی: RAD) روش تکراری را بعنوان پایه کار استفاده میکند اما طرفداری نظریه سبکتر و محبوبیت بیشتر از روش سنتی است. روش سریع از بازخوردها به جای برنامهریزی بعنوان سازوکار اصلی کنترل پروژه استفاده میکند. بازخوردها بوسیله آزمونهای مرتب و انتشار پیاپی در بازههای زمانی کوتاه نرمافزارهای در حال تکامل تولید میشوند.روشهای گوناگونی از فرایند سریع برای تولید نرمافزار استفاه میشود:روش برنامهسازی مفرطتولید نرمافزار به روش برنامهسازی مفرط (به انگلیسی: Extreme programming)(مخفف انگلیسی: XP) در فازهای خیلی کوچک (یا مداوم) انجام و با فرایندهای دستهای قدیمیتر تطبیق داده میشوند. فاز اول (که عمداً کامل نشده) در طول مراحل ممکن است به جای اینکه ماهها و سالها در روش آبشاری طول بکشد تا کامل شود، یک روز یا یک هفته وقت بگیرد. ابتدا یک آزمون خودکار برای ایجاد اهداف اساسی تولید نرمافزار نوشته میشود. سپس (توسط دو برنامهنویس) برنامهنویسی انجام میگیرد که وقتی تمام آزمونها را پشت سر گذاشته و دیگر هیچ آزمون مورد نیازی به ذهن برنامهنویسان نرسد کامل میشود. کار طراحی و معماری سیستم بعد از اینکه نه آزمونی وجود دارد و نه برنامهنویسیشده انجام میشود.طراحی توسط برنامهنویسان انجام میشود. (فقط مشخصات نهایی و ترکیب طراحی و کد در تمام فرایندها در روش سریع مشترک هستند) عملیات اصلی ناقص سامانه (توسط دست کم یکی از افراد گروه تولیدکننده و برنامهنویس) برای کاربران (یا برخی از کاربران) نصب یا نمایش داده میشوند. در اینجا تمام عوامل پروژه دوباره شروع به نوشتن آزمون برای قسمتهای مهم سامانه خواهند کرد.الگو اسکرام اسکرام یک روش چابکِ تکرارشونده و افزایشی برای مدیریت پروژه است که معمولاً در الگوی تولید نرمافزار چابک به عنوان نوعی متدولوژی توسعه نرمافزار دیده میشود. با اینکه روش اسکرام در واقع برای مدیریت محصولات تولید و توسعه پروژهها پیشنهاد شده بود، اما استفاده آن در مدیریت پروژههای تولید نرمافزار متمرکز شد؛ همچنین امکان دارد جهت مدیریت تیم نگهداری نرمافزار، مدیریت پروژهها یا برنامههای عمومی مدیریت خط مشیها استفاده شود.الگوهای بهبودسازی الگوی تکامل قابلیت یکپارچه سازی (CMMI) الگوی تکامل قابلیت یکپارچهسازی (CMMI) یکی از الگوهای پیشنهادی و تکنیکهای پیشتاز است. ارزیابی سازمانهای مستقل و رتبهبندی در مورد کیفیت چگونگی تعریف فرایندهای آن سازمانها را دنبال میکند، نه بر کیفیت خود فرایندها یا نرمافزار تهیه شده است. الگوی CMMI جایگزین الگوی CMM شده است.ایزو ۹۰۰۰ ایزو ۹۰۰۰ یک استاندارد رسمی سازماندهی فراینده ساخت محصولات و روشی برای مدیریت و نظارت پیشرفت کارهاست. در اصل این استاندارد برای بخش تولید وساخت(صنعتی) ایجاد شد.ایزو ۹۰۰۰ همچنین برای فرایند تولید نرمافزار نیز به خوبی استفاده شده.مانند الگو CMMI مدرک ایزو ۹۰۰۰ هیچ تضمینی راجع به کیفیت نتایج نهایی ندارد و فقط فرایندهای کاری را فرموله و قالب استاندارد رسمی می دهد.ایزو ۱۵۵۰۴ ایزو ۱۵۵۰۴ که با عنوان فرایند تشخیص و تعیین بهبود قابلیت نرمافزار (به انگلیسی: Software Process Improvement and Capability Determination)(مخفف انگلیسی: SPICE) نیز شناخته میشود، چارچوبی برای ارزیابی فرایندهای نرمافزار است. این استاندارد تنظیمات قالب روشنی برای مقایسه فرایندها به شمار میرود. SPICE خیلی شبیه CMMI استفاده میشود. فرایندهای این الگو برای مدیریت، کنترل، راهنمایی و نظارت تولید نرمافزار است. این الگو جهت سنجش سازماندهی تولید و توسعه یا تیم پروژه بصورت واقعی در طول مدت تولید نرمافزار استفاده میشود. تجزیه و تحلیل این اطلاعات برای شناسایی نقاط ضعف و حرکت به سمت بهبود پروژه استفاه میشود. همچنین برای تشخیص نقاط قوت پروژه که می تواند برای سازمان یا تیم پروژه ادامه پیدا کند یا برای امور مشترک یکپارچه شود.
کیفیت نرمافزار
در مبحث مهندسی نرم افزار، کیفیت نرم افزار به دو رده مرتبط اما مجزای زیر اشاره دارد:
کیفیت عملیاتی نرم افزار (Software Functional Quality): شاخصی جهت نشان دادن میزان تطابق نرم افزار با نیامندی های عملیاتی تعریف شده برای نرم افزار.
کیفیت ساختاری نرم افزار (Software Structural Quality): که منعکس کننده میزان دست یابی به نیازمندی های غیر عملیاتی مانند استحکام (Robustness) و قابلیت نگهداری (Maintainability) نرم افزار است.
مایکروسافت
مایکروسافت، (به انگلیسی: Microsoft Corporation) شرکت کامپیوتری آمریکایی و چندملیتی است، که دفتر مرکزی آن در شهر ردموند، ایالت واشینگتن، ایالات متحده آمریکا قرار دارد. این شرکت، بزرگترین شرکت ارائه نرمافزار رایانه در دنیاست، که به انتشار کتاب و تولید محصولات چندرسانهای و ارائه خدمات پست الکترونیکی نیز میپردازد.
مایکروسافت در سال مالی منتهی به ژوئن ۲۰۱۰ میلادی، بیش از ۶۲ میلیارد دلار درآمد فروش، بیش از ۱۸ میلیارد دلار سود خالص و ۸۹٬۰۰۰ کارمند در کشورهای مختلف دنیا داشته است. فعالیت اصلی آن در زمینهٔ طراحی، توسعه، ساخت، صدور مجوز، پشتیبانی و ارائهٔ خدمات نرمافزاری برای ابزارهای رایانهای میباشد.
پرفروشترین محصولات مایکروسافت، سیستمعامل «ویندوز» و نرمافزار «آفیس» است و شعار اصلی شرکت «یک کامپیوتر روی هر میز و در هر خانه، که نرمافزارهای مایکروسافت را اجرا کند.» میباشد. این دو محصول با سهمی حدود ۹۰٪ در سال ۲۰۰۳ برای مایکروسافت آفیس و در سال ۲۰۰۶ برای ویندوز جایگاه مهمی در بازار فروش محصولات کامپیوترهای شخصی و کامپیوترهای رومیزی پیدا کردند.
مایکروسافت که در ابتدا کار خود را توسط دو دوست دوران کودکی به نامهای بیل گیتس و پُل جی. آلن با ساخت و فروش مفسر زبان برنامهنویسی بیسیک (Basic interpreters) برای «آلتایر» (Altair) شروع کرد، در اواسط دههٔ ۸۰ میلادی با طراحی سیستمعامل داس بر بازار سیستمهای عامل رایانههای خانگی مسلط شد.
شرکت، سهام خود را وارد بورس کرد، که با افزایش ارزش سهام، چهار نفر، میلیاردر و حدود ۱۲٬۰۰۰ نفر از کارکنان مایکروسافت، میلیونر شدند.
شرکت مایکروسافت همواره هدف نقدهای مختلفی از جمله انحصارطلبی بوده، که موجب تشکیل دادگاههای قضایی بسیاری علیه آن، به علت تجاوز از قوانین انحصار، در وزارت دادگستری ایالات متحده آمریکا و کمیسیون اروپا شده است.
مایکروسافت علاوه بر بازار سیستمعامل و نرمافزار اداری، در زمینههای دیگر هم فعالیت میکند مانند: شبکه تلویزیونی اماسانبیسی "MSNBC"، سایت اینترنتی «اماسان» و دانشنامه چندرسانهای انکارتا (که دیگر انتشار نمییابد). همچنین در زمینه تولید سختافزار رایانه، با ساخت محصولاتی مانند موشواره و نیز سرگرمیهای خانگی، از جمله ایکسباکس، ایکسباکس ۳۶۰ و زون(zune) نیز میپردازد. مایکروسافت از گذشته تاکنون با استفاده از روشهای مختلف مانند گروه خبری «یوزنت» "Usenet" و وب، پشتیبانی از نرمافزارهای خود را همواره ادامه دادهاست و جایزهٔ «امویپی» Microsoft MVP را به داوطلبانی که در کمک به مشتریان شرکت مفید بوده باشند، اهدا میکند.
در آوریل ۲۰۱۴ مایکروسافت شرکت فنلاندی تولید تلفن همراه نوکیا را به قیمت هفت و نیم میلیارد دلار خرید. بدین ترتیب تولید گوشیهای تلفن همراه توسط شرکت نوکیا برای همیشه به پایان رسید. با وجود این نوکیا اعلام کرد از این پس بر خدمات نرمافزاری، نقشهکشی، شبکهسازی و پیشبرد فناوری متمرکز خواهد شد. تلفنهای همراه نوکیا پس از ورود گوشیهای هوشمند به ویژه سامسونگ و آیفون، به سرعت از رده خارج شدند.
تاریخچه
تاریخچه اولیه
پائول آلن و بیل گیتس، دوستان دوران کودکی بودند که با شور و شوق فراوانی برای کامپیوتر برنامه نویسی میکردند و به دنبال ایجاد یک کسب و کار بودند. در ژانویه ۱۹۷۵، سیستمهای تله میتری (MITS) به نام آتاری ۸۸۰۰ از شرکت میکرو تولید شد. پائول آلن متوجه شد که آنها میتوانند برای آتاری ۸۸۰۰، Basic بسازند و پس از تماس با بیل گیتس آنها از این شرکت تقاضای استخدام کردند. پائول آلن به عنوان شبیهساز و بیل گیتس به عنوان مترجم استخدام شدند. پس از تولید Basic، میکرو دستگاه آتاری Basic را تولید کرد و بازاریابی کرد. سرانجام در تاریخ ۴ آوریل ۱۹۷۵، شرکت مایکروسافت با مدیر عاملی بیل گیتس تاسیس شد. در آگوست ۱۹۷۷، مایکروسافت با مجله اسکی در ژاپن توافق کرد و در نتیجه اولین دفتر بینالمللی خود را در ژاپن تاسیس کرد. مایکروسافت در ژانویه ۱۹۷۹، به یک مرکز جدید در واشینگتن در ایالات متحده آمریکا نقل مکان کرد.
مایکروسافت با سیستم عامل خود در سال ۱۹۸۰ یعنی زنیکس، وارد بازار کار سیستم عامل شد. سپس مایکروسافت سیستم عامل MS-DOS را تولید کرد. سرانجام مایکروسافت در مذاکرات با تحقیقات دیجیتال شکست خورد و در نوامبر ۱۹۸۰ سیستم عامل جدیدی با نام CP/M تولید کرد که در آینده در کامپیوترهای شخصی مورد استفاده قرار گرفت. مایکروسافت با درآمدهای بسیارش ۲۱۰ شرکت را خرید و هم چنین یک بخش چاپ و نشر به نام مایکروسافت پرس تولید کرد. سرانجام پائول آلن در ماه فوریه پس از مبتلا شدن به بیماری هوکچین استعفا داد.
آغاز فعالیتها
در ۱۹۹۴ مایکروسافت انکارتا را به راه انداخت؛ نخستین دانشنامهای که روی کامپیوتر قابل اجرا بود. مایکروسافت با همکاری دریم ورکس در سال ۱۹۹۵ برای تولید سرگرمیهای چندمنظوره یک شرکت جدید تأسیس کردند. پیش از ارائه ویندوز ۹۵، مایکروسافت یک شرکت تجارت محور قلمداد میشد اما ویندوز ۹۵ موجب شد که دیگر آن را یک شرکت مشتری محور بدانند. در سپتامبر ۱۹۹۵ دولت چین ویندوز را به عنوان سیستمعامل رسمی کشورش انتخاب کرد و از مایکروسافت خواست نسخه چینی ویندوز را برایشان آماده کند. اواسط دهه۹۰ بیل گیتس تصمیم گرفت مایکروسافت را وارد دنیای اینترنت کند و "MSN" به وجود آمد. این یک سرویس آنلاین بود که قرار بود با آمریکن آنلاین (AOL) رقابت کند. بعد با همکاری انبیسی، ایستگاه کابلی خبری "MSNBC" و مجلهٔ آنلاین "Slate" به سردبیری مایکل کینسلی را تأسیس نمود. راهاندازی وبتیوی که امکان اتصال تلویزیون به شبکه را فراهم میکرد، از دیگر اقدامات مایکروسافت در سال ۱۹۹۶ بود.
فعالیتهای مستمر
در ۱۹۹۷ اینترنت اکسپلورر ۴ همراه ویندوز به بازار آمد. اما دادگستری آمریکا به این دلیل که مایکروسافت با این کار از توافقنامهای که در سال ۱۹۹۴ امضا کرده، تخطی نمودهاست، از آنها خواست که دیگر اینترنت اکسپلورر و ویندوز را همراه هم به بازار نفرستند. در سال ۱۹۹۸ ویندوز ۹۸ به همراه اکسپلورر SP۴/۰ SP۱ و FAT۳۲ به عنوان فایل سیستم عرضه گشت. در عین حال، جنجالهای زیادی در پی افشای یادداشتهای داخلی مایکروسافت در اینترنت به وجود آمد: «نرمافزارهای اوپن سورس تهدیدی جدی برای مایکروسافت به حساب میآیند.» این اسناد که به اسناد هالووین معروف شدهاند، بخشی از این خطرات را عنوان کرده و در عین حال از فعالیتهای مایکروسافت علیه لینوکس پرده برمیدارد. مایکروسافت نیز ضمن این که به صحت این اسناد اعتراف کرد، آنها را صرفاً تحقیقات مهندسی دانست.
دیگر فعالیتها
در آوریل ۲۰۰۰ حکم پرونده ایالات متحده و مایکروسافت صادر شد. این حکم شرکت را مجبور میکرد که به دو پاره تقسیم شود. البته بخشی از این تصمیم در دادگاه استیناف لغو شد. مایکروسافت که اهداف تجاری و خانگی را توأمان نشانه رفته بود، ویندوز ایکس پی را سال ۲۰۰۱ آماده کرد. مایکروسافت برای رقابت با سونی و نینتندو، با سرمایهگذاری میلیاردی و تولید و پخش ایکس باکس وارد عرصه بازیهای کامپیوتری شد.
تا سال ۲۰۰۵، ایکس باکس در بازار فروش آمریکا در رده دوم پس از پلی استیشن ۲ سونی و قبل از گیم کیوب نینتندو قرار داشت. (در بازار جهانی بعد از هر دو بود.) اما با این وجود، با فروش ۲۲ میلیون دستگاه در مقایسه با فروش بیش از ۱۰۰میلیون دستگاه پلی استیشن ۲، ضرر سنگینی معادل ۴ میلیارد دلار متحمل شدهاست. مایکروسافت در مدت ۳ سال کار ساخت «NET.» مقدماتی و سرور ویندوز ۲۰۰۳ را هم به پایان رساند.
در سال ۲۰۰۴ به دنبال شکایت اتحادیه اروپا، مایکروسافت به پرداخت ۶۱۳ میلیون دلار جریمه محکوم شد و متعهد گردید که توافقات قطعی خود با سایر رقبا را افشا کند. همچنین ملزم شد نسخهای از ویندوز را تهیه و آماده کند که فاقد مدیا پلیر باشد.
ایکس باکس ۳۶۰
در نوامبر ۲۰۰۵، مایکروسافت دومین کنسول بازی خود را با نام ایکس باکس ۳۶۰ به بازار عرضه کرد (لازم به ذکر است اولین نسخه کنسول مایکروسافت XBOX نام داشت). مایکروسافت در زمینه رقابت با کنسولهای بازی تجربیات خوبی بدست آورده بود و این بار کنسولی بسیار کاملتر و بهتر نسبت به اولین کنسول خود به بازار عرضه کرد. ایکس باکس ۳۶۰ در دو مدل با نامهای "Premium" و «Core System» عرضه شد. نسخهٔ «ایکس باکس ۳۶۰ Premium» دارای دسته بیسیم، هارد درایو، ریموت کنترل و هدست میباشد ولی نسخهٔ «Core System» شامل دسته سیمی و بدون هارد درایو و وسایل جانبی میباشد. ایکس باکس ۳۶۰ تقریباً یک سال زودتر از رقیبان خود یعنی پلی استیشن ۳ و نینتندو Wii به بازار عرضه شد. ایکس باکس ۳۶۰ پیشرفتهای زیادی نسبت به کنسول قبلی خود کردهاست و علاوه بر قدرت سختافزاری، دارای طراحی فوقالعاده زیبایی میباشد. ایکس باکس ۳۶۰ فروش بسیار بهتری نسبت به کنسول قبلی مایکروسافت داشت.
وبگاه مایکروسافت
وبگاه مایکروسافت با بیش از ۱۰۰ میلیون بازدید در روز یکی از پرطرفدارترین وبگاهها در اینترنت است. بر طبق اطلاعات وبگاه «الکسا»، وبگاه مایکروسافت در ۱۱ مه ۲۰۰۷ رده سیزدهم را در بین وبگاههای اینترنتی از نظر تعداد بازدیدکننده به خود اختصاص دادهاست.
رایانه
رایانه یا کامپیوتر (به انگلیسی: computer) ماشینی است که از آن برای پردازش اطلاعات استفاده میشود.
نام
در زبان انگلیسی «کامپیوتر» به دستگاه خودکاری میگفتند که محاسبات ریاضی را انجام میداد. بر پایهٔ «واژهنامه ریشهیابی Barnhart Concise» واژهٔ کامپیوتر در سال ۱۶۴۶ به زبان انگلیسی وارد گردید که به معنی «شخصی که محاسبه میکند» بودهاست و سپس از سال ۱۸۹۷ به ماشینهای محاسبه مکانیکی گفته میشد. در هنگام جنگ جهانی دوم «کامپیوتر» به زنان نظامی انگلیسی و آمریکایی که کارشان محاسبه مسیرهای شلیک توپهای بزرگ جنگی به وسیله ابزار مشابهی بود، اشاره میکرد.
البته در اوایل دهه ۵۰ میلادی هنوز اصطلاح ماشین حساب (computing machines) برای معرفی این ماشینها بهکار میرفت. پس از آن عبارت کوتاهتر کامپیوتر (computer) بهجای آن بهکار گرفته شد. ورود این ماشین به ایران در اوائل دهه ۱۳۴۰ بود و در فارسی از آن زمان به آن «کامپیوتر» میگفتند. واژه رایانه در دو دهه اخیر در فارسی رایج شده است.
برابر این واژه در زبانهای دیگر حتماً همان واژه زبان انگلیسی نیست. در زبان فرانسوی واژه "ordinateur"، که به معنی «سازمانده» یا «ماشین مرتبساز» است، بهکار میرود. در اسپانیایی "ordenador" با معنایی مشابه استفاده میشود، همچنین در دیگر کشورهای اسپانیایی زبان computadora بصورت انگلیسیمآبانهای ادا میشود. در پرتغالی واژه computador بهکار میرود که از واژه computar گرفته شده و به معنای «محاسبه کردن» میباشد. در ایتالیایی واژه "calcolatore" که معنای ماشین حساب است بکار میرود که بیشتر روی ویژگی حسابگری منطقی آن تاکید دارد. در سوئدی رایانه "dator" خوانده میشود که از "data" (دادهها) برگرفته شدهاست. به فنلاندی "tietokone" خوانده میشود که به معنی «ماشین اطلاعات» میباشد. اما در زبان ایسلندی توصیف شاعرانهتری بکار میرود، «tölva» که واژهای مرکب است و به معنای «زن پیشگوی شمارشگر» میباشد. در چینی رایانه «dian nao» یا «مغز برقی» خوانده میشود. در انگلیسی واژهها و تعابیر گوناگونی استفاده میشود، بهعنوان مثال دستگاه دادهپرداز («data processing machine»).
معنای واژهٔ فارسی رایانه
واژهٔ رایانه از مصدر رایانیدن ساخته شده که در فارسی میانه به شکلِ rāyēnīdan و به معنای «سنجیدن، سبک و سنگین کردن، مقایسه کردن» یا «مرتّب کردن، نظم بخشیدن و سامان دادن» بودهاست. این مصدر در زبان فارسی میانه یا همان پهلوی کاربرد فراوانی داشته و مشتقهای زیادی نیز از آن گرفته شده بوده است. برایِ مصدر رایانیدن/ رایاندن در فرهنگ واژه دهخدا چنین آمده:
رایاندن
دَ (مص) رهنمائی نمودن به بیرون. هدایت کردن. (ناظم الاطباء).
شکلِ فارسی میانهٔ این واژه rāyēnīdan بوده و اگر میخواسته به فارسی نو برسد به شکل رایانیدن/ رایاندن درمیآمده. (بسنجید با واژهیِ فارسیِ میانهیِ āgāhēnīdan که در فارسیِ نو آگاهانیدن/ آگاهاندن شدهاست).
این واژه از ریشهیِ فرضیِ ایرانیِ باستانِ –radz* است که به معنایِ «مرتّب کردن» بوده. این ریشه بهصورتِ –rad به فارسیِ باستان رسیده و به شکلِ rāy در فارسیِ میانه (پهلوی) بهکار رفته. از این ریشه ستاکهایِ حالِ و واژههایِ زیر در فارسیِ میانه و نو بهکار رفتهاند:
-ā-rādz-a*یِ ایرانیِ باستان> -ā-rāy ِ فارسی میانه که در واژهیِ آرایشِ فارسیِ نو دیده میشود.
-pati-rādz-a*یِ ایرانیِ باستان> -pē-rāy ِ فارسی میانه که در واژهیِ پیرایشِ فارسیِ نو دیده میشود؛ و
-rādz-ta*یِ ایرانیِ باستان> rāst ِ فارسی میانه که در واژهیِ راستِ فارسیِ نو دیده میشود.
این ریشهیِ ایرانی از ریشهیِ هندواروپاییِ -reĝ* به معنایِ «مرتّب کردن و نظم دادن» آمدهاست. از این ریشه در
هندی rāj-a به معنیِ «هدایتکننده، شاه» (یعنی کسی که نظم میدهد)؛
لاتینی rect-us به معنیِ «راست، مستقیم»،
فرانسه di-rect به معنیِ «راست، مستقیم»،
آلمانی richt به معنیِ «راست، مستقیم کردن» و
انگلیسی right به معنیِ «راست، مستقیم، درست»
برجای ماندهاست.
در فارسیِ نو پسوندِ -ـه (= /e/ در فارسی رسمی ایران و /a/ در فارسی رسمی افغانستان و تاجیکستان) را به ستاکِ حالِ فعلها میچسبانند تا نامِ ابزارِ آن فعلها بهدست آید (البته با این فرمول مشتقهای دیگری نیز ساخته میشود، امّا در اینجا تنها نامِ ابزار مدِّ نظر است)؛ برای نمونه از
مالـ- (یعنی ستاکِ حالِ مالیدن) + -ـه، ماله «ابزار مالیدنِ سیمان و گچِ خیس»
گیر- (یعنی ستاکِ حالِ گرفتن) + -ـه، گیره «ابزار گرفتن»
پوشـ- (یعنی ستاکِ حالِ پوشیدن) + -ـه، پوشه «ابزار پوشیدن» (خود را جایِ کاغذهایی بگذارید که پوشه را میپوشند!)
رسانـ- (یعنی ستاکِ حالِ رساندن) + -ـه، رسانه «ابزار رساندنِ اطّلاعات و برنامههایِ دیداری و شنیداری»
حاصل میگردد.
در فارسیِ نو پسوندِ -ـه (= e- یا همان a-) را به ستاکِ حالِ "رایانیدن" یعنی رایانـ- چسباندهاند تا نامِ ابزارِ این فعل ساخته شود؛ یعنی "رایانه" به معنایِ «ابزارِ نظم بخشیدن و سازماندهی (ِ دادهها)» است.
سازندگان این واژه به واژهیِ فرانسویِ این مفهوم، یعنی ordinateurتوجّه داشتهاند که در فرانسه از مصدرِ ordre«ترتیب و نظم دادن و سازمان بخشیدن» ساخته شده. به هرحال، معنادهیِ واژهیِ رایانه برایِ این دستگاه جامعتر و رساتر از کامپیوتر است. یادآور میشود که computerبه معنایِ «حسابگر» یا «مقایسهگر» است، حال آنکه کارِ این دستگاه براستی فراتر از "حساب کردن" است.
تاریخچه
در گذشته دستگاههای مختلف مکانیکی سادهای مثل خطکش محاسبه و چرتکه نیز رایانه خوانده میشدند. در برخی موارد از آنها بهعنوان رایانه قیاسی نام برده میشود. البته لازم به ذکر است که کاربرد واژهٔ رایانه آنالوگ در علوم مختلف بیش از این است که به چرتکه و خطکش محاسبه محدود شود. به طور مثال در علوم الکترونیک، مخابرات و کنترل روشی برای محاسبه مشتق و انتگرال توابع ریاضی و معادلات دیفرانسیل توسط تقویت کنندههای عملیاتی، مقاومت، سلف و خازن متداول است که به مجموعهٔ سیستم مداری «رایانهٔ قیاسی» (آنالوگ) گفته میشود. چرا که برخلاف رایانههای رقمی، اعداد را نه بهصورت اعداد در پایه دو بلکه بهصورت کمیتهای فیزیکی متناظر با آن اعداد نمایش میدهند. چیزی که امروزه از آن بهعنوان «رایانه» یاد میشود در گذشته به عنوان «رایانه رقمی (دیجیتال)» یاد میشد تا آنها را از انواع «رایانه قیاسی» جدا سازند.
به تصریح دانشنامه انگلیسی ویکیپدیا، بدیعالزمان ابوالعز بن اسماعیل بن رزاز جَزَری (درگذشتهٔ ۶۰۲ ق.) یکی از نخستین ماشینهای اتوماتا را که جد رایانههای امروزین است، ساخته بودهاست. این مهندس مکانیک مسلمان از دیاربکر در شرق آناتولی بودهاست. رایانه یکی از دو چیز برجستهای است که بشر در سدهٔ بیستم اختراع کرد. دستگاهی که بلز پاسکال در سال ۱۶۴۲ ساخت اولین تلاش در راه ساخت دستگاههای محاسب خودکار بود. پاسکال آن دستگاه را که پس از چرتکه دومیت ابزار ساخت بشر بود، برای یاری رساندن به پدرش ساخت. پدر وی حسابدار دولتی بود و با کمک این دستگاه میتوانست همه اعدادشش رقمی را با هم جمع و تفریق کند.
لایبنیتز ریاضیدان آلمانی نیز از نخستین کسانی بود که در راه ساختن یک دستگاه خودکار محاسبه کوشش کرد. او در سال ۱۶۷۱ دستگاهی برای محاسبه ساخت که کامل شدن آن تا ۱۹۶۴ به درازا کشید. همزمان در انگلستان ساموئل مورلند در سال ۱۶۷۳ دستگاهی ساخت که جمع و تفریق و ضرب میکرد.
در سدهٔ هجدهم میلادی هم تلاشهای فراوانی برای ساخت دستگاههای محاسب خودکار انجام شد که بیشترشان نافرجام بود. سرانجام در سال ۱۸۷۵ میلادی استیفن بالدوین نخستین دستگاه محاسب را که هر چهار عمل اصلی را انجام میداد، به نام خود ثبت کرد.
از جمله تلاشهای نافرجامی که در این سده صورت گرفت، مربوط به چارلز ببیج ریاضیدان انگلیسی است. وی در آغاز این سده در سال ۱۸۱۰ در اندیشهٔ ساخت دستگاهی بود که بتواند بر روی اعداد بیست و شش رقمی محاسبه انجام دهد. او بیست سال از عمرش را در راه ساخت آن صرف کرد اما در پایان آن را نیمهکاره رها کرد تا ساخت دستگاهی دیگر که خود آن را دستگاه تحلیلی مینامید آغاز کند. او میخواست دستگاهی برنامهپذیر بسازد که همه عملیاتی را که میخواستند دستگاه برروی عددها انجام دهد، قبلا برنامهشان به دستگاه داده شده باشد. قرار بود عددها و درخواست عملیات برروی آنها به یاری کارتهای سوراخدار وارد شوند. بابیچ در سال ۱۸۷۱ مرد و ساخت این دستگاه هم به پایان نرسید.
کارهای بابیچ به فراموشی سپرده شد تا این که در سال ۱۹۴۳ و در بحبوحه جنگ جهانی دوم دولت آمریکا طرحی سری برای ساخت دستگاهی را آغاز کرد که بتواند مکالمات رمزنگاریشدهٔ آلمانیها را رمزبرداری کند. این مسئولیت را شرکت آیبیام و دانشگاه هاروارد به عهده گرفتند که سرانجام به ساخت دستگاهی به نام ASCC در سال ۱۹۴۴ انجامید. این دستگاه پنج تنی که ۱۵ متر درازا و ۲٫۵ متر بلندی داشت، میتوانست تا ۷۲ عدد ۲۴ رقمی را در خود نگاه دارد و با آنها کار کند. دستگاه با نوارهای سوراخدار برنامهریزی میشد و همهٔ بخشهای آن مکانیکی یا الکترومکانیکی بود.
تعریف داده و اطلاعات
داده به آن دسته از ورودیهای خام گفته میشود که برای پردازش به رایانه ارسال میشوند.
به دادههای پردازش شده اطّلاعات میگویند.
رایانهها چگونه کار میکنند؟
از زمان رایانههای اولیه که در سال ۱۹۴۱ ساخته شده بودند تا کنون فناوریهای دیجیتالی رشد نمودهاست، معماری فون نوِیمن یک رایانه را به چهار بخش اصلی توصیف میکند: واحد محاسبه و منطق (Arithmetic and Logic Unit یا ALU)، واحد کنترل یا حافظه، و ابزارهای ورودی و خروجی (که جمعا I/O نامیده میشود). این بخشها توسط اتصالات داخلی سیمی به نام گذرگاه (bus) با یکدیگر در پیوند هستند.
حافظه
در این سامانه، حافظه بصورت متوالی شماره گذاری شده در خانهها است، هرکدام محتوی بخش کوچکی از دادهها میباشند. دادهها ممکن است دستورالعملهایی باشند که به رایانه میگویند که چه کاری را انجام دهد باشد. خانه ممکن است حاوی اطلاعات مورد نیاز یک دستورالعمل باشد. اندازه هر خانه، وتعداد خانهها، در رایانهٔ مختلف متفاوت است، همچنین فناوریهای بکاررفته برای اجرای حافظه نیز از رایانهای به رایانه دیگر در تغییر است (از بازپخشکنندههای الکترومکانیکی تا تیوپها و فنرهای پر شده از جیوه و یا ماتریسهای ثابت مغناطیسی و در آخر ترانزیستورهای واقعی و مدار مجتمعها با میلیونها فیوز نیمه هادی یا MOSFETهایی با عملکردی شبیه ظرفیت خازنی روی یک تراشه تنها).
پردازش
واحد محاسبه و منطق یا ALU دستگاهی است که عملیات پایه مانند چهار عمل اصلی حساب (جمع و تفریق و ضرب و تقسیم)، عملیات منطقی (و، یا، نقیض)، عملیات قیاسی (برای مثال مقایسه دو بایت برای شرط برابری) و دستورات انتصابی برای مقدار دادن به یک متغیر را انجام میدهد. این واحد جائیست که «کار واقعی» در آن صورت میپذیرد.
البته CPUها به دو دسته کلی RISC و CISC تقسیم بندی میشوند. نوع اول پردازشگرهای مبتنی بر اعمال ساده هستند و نوع دوم پردازشگرهای مبتنی بر اعمال پیچیده میباشند. پردازشگرهای مبتنی بر اعمال پیچیده در واحد محاسبه و منطق خود دارای اعمال و دستوراتی بسیار فراتر از چهار عمل اصلی یا منطقی میباشند. تنوع دستورات این دسته از پردازندهها تا حدی است که توضیحات آنها خود میتواند یک کتاب با قطر متوسط ایجاد کند. پردازندههای مبتنی بر اعمال ساده اعمال بسیار کمی را پوشش میدهند و در حقیقت برای برنامهنویسی برای این پردازندهها بار نسبتاً سنگینی بر دوش برنامهنویس است. این پردازندهها تنها حاوی ۴ عمل اصلی و اعمال منطقی ریاضی و مقایسهای به علاوه چند دستور بیاهمیت دیگر میباشند. هرچند ذکر این نکته ضروری است که دستورات پیچیده نیز از ترکیب تعدادی دستور ساده تشکیل شدهاند و برای پیادهسازی این دستورات در معماریهای مختلف از پیادهسازی سختافزاری (معماری CISC) و پیادهسازی نرمافزاری (معماری RISC) استفاده میشود.
(قابل ذکر است پردازندههای اینتل از نوع پردازنده مبتنی بر اعمال پیچیده میباشند.)
واحد کنترل همچنین این مطلب را که کدامین بایت از حافظه حاوی دستورالعمل فعلی اجرا شوندهاست را تعقیب میکند، سپس به واحد محاسبه و منطق اعلام میکند که کدام عمل اجرا و از حافظه دریافت شود و نتایج به بخش اختصاص داده شده از حافظه ارسال گردد. بعد از یک بار عمل، واحد کنترل به دستورالعمل بعدی ارجاع میکند (که معمولاً در خانه حافظه بعدی قرار دارد، مگر اینکه دستورالعمل جهش دستورالعمل بعدی باشد که به رایانه اعلام میکند دستورالعمل بعدی در خانه دیگر قرار گرفتهاست).
ورودی/خروجی
بخش ورودی/خروجی (I/O) این امکان را به رایانه میدهد تا اطلاعات را از جهان بیرون تهیه و نتایج آنها را به همان جا برگرداند. محدوده فوق العاده وسیعی از دستگاههای ورودی/خروجی وجود دارد، از خانواده آشنای صفحهکلیدها، نمایشگرها، نَرمدیسک گرفته تا دستگاههای کمی غریب مانند رایابینها (webcams). (از سایر ورودی/خروجیها میتوان موشواره mouse، قلم نوری، چاپگرها (printer)، اسکنرها، انواع لوحهای فشرده(CD, DVD) را نام برد).
چیزی که تمامی دستگاههای عمومی در آن اشتراک دارند این است که آنها رمزکننده اطلاعات از نوعی به نوع دیگر که بتواند مورد استفاده سیستمهای رایانه دیجیتالی قرار گیرد، هستند. از سوی دیگر، دستگاههای خروجی آن اطلاعات به رمز شده را رمزگشایی میکنند تا کاربران آنها را دریافت نمایند. از این رو یک سیستم رایانه دیجیتالی یک نمونه از یک سامانه دادهپردازی میباشد.
دستورالعملها
هر رایانه تنها دارای یک مجموعه کم تعداد از دستورالعملهای ساده و تعریف شده میباشد. از انواع پرکاربردشان میتوان به دستورالعمل «محتوای خانه ۱۲۳ را در خانه ۴۵۶ کپی کن!»، «محتوای خانه ۶۶۶ را با محتوای خانه ۰۴۲ جمع کن، نتایج را در خانه ۰۱۳ کن!»، «اگر محتوای خانه ۹۹۹ برابر با صفر است، به دستورالعمل واقع در خانه ۳۴۵ رجوع کن!».
دستورالعملها در داخل رایانه بصورت اعداد مشخص شدهاند - مثلاً کد دستور العمل (copy instruction) برابر ۰۰۱ میتواند باشد. مجموعه معین دستورالعملهای تعریف شده که توسط یک رایانه ویژه پشتیبانی میشود را زبان ماشین مینامند. در واقعیت، اشخاص معمولاً به زبان ماشین دستورالعمل نمینویسند بلکه بیشتر به نوعی از انواع سطح بالای زبانهای برنامهنویسی، برنامهنویسی میکنند تا سپس توسط برنامه ویژهای (تفسیرگرها (interpreters) یا همگردانها (compilers) به دستورالعمل ویژه ماشین تبدیل گردد. برخی زبانهای برنامهنویسی از نوع بسیار شبیه و نزدیک به زبان ماشین که اسمبلر (یک زبان سطح پایین) نامیده میشود، استفاده میکنند؛ همچنین زبانهای سطح بالای دیگری نیز مانند پرولوگ نیز از یک زبان انتزاعی و چکیده که با زبان ماشین تفاوت دارد بجای دستورالعملهای ویژه ماشین استفاده میکنند.
معماریها
در رایانههای معاصر واحد محاسبه و منطق را به همراه واحد کنترل در یک مدار مجتمع که واحد پردازشی مرکزی (CPU) نامیده میشود، جمع نمودهاند. عموما، حافظه رایانه روی یک مدار مجتمع کوچک نزدیک CPU قرار گرفته. اکثریت قاطع بخشهای رایانه تشکیل شدهاند از سامانههای فرعی (به عنوان نمونه، منبع تغذیه رایانه) و یا دستگاههای ورودی/خروجی.
برخی رایانههای بزرگتر چندین CPU و واحد کنترل دارند که بصورت همزمان با یکدیگر درحال کارند. اینگونه رایانهها بیشتر برای کاربردهای پژوهشی و محاسبات علمی بکار میروند.
کارایی رایانهها بنا به تئوری کاملاً درست است. رایانه دادهها و دستورالعملها را از حافظهاش واکشی (fetch) میکند. دستورالعملها اجرا میشوند، نتایج ذخیره میشوند، دستورالعمل بعدی واکشی میشود. این رویه تا زمانی که رایانه خاموش شود ادامه پیدا میکند. واحد پردازنده مرکزی در رایانههای شخصی امروزی مانند پردازندههای شرکت ای-ام-دی و شرکت اینتل از معماری موسوم به خط لوله استفاده میشود و در زمانی که پردازنده در حال ذخیره نتیجه یک دستور است مرحله اجرای دستور قبلی و مرحله واکشی دستور قبل از آن را آغاز میکند. همچنین این رایانهها از سطوح مختلف حافظه نهانگاهی استفاده میکنند که در زمان دسترسی به حافظه اصلی صرفهجویی کنند.
برنامهها
برنامه رایانهای فهرستهای بزرگی از دستورالعملها (احتمالاً به همراه جدولهائی از داده) برای اجرا روی رایانه هستند. خیلی از رایانهها حاوی میلیونها دستورالعمل هستند، و بسیاری از این دستورها به تکرار اجرا میشوند. یک رایانه شخصی نوین نوعی (درسال ۲۰۰۳) میتواند در ثانیه میان ۲ تا ۳ میلیارد دستورالعمل را پیاده نماید. رایانهها این مقدار محاسبه را صرف انجام دستورالعملهای پیچیده نمیکنند. بیشتر میلیونها دستورالعمل ساده را که توسط اشخاص باهوشی «برنامه نویسان» در کنار یکدیگر چیده شدهاند را اجرا میکنند. برنامهنویسان خوب مجموعههایی از دستورالعملها را توسعه میدهند تا یکسری از وظایف عمومی را انجام دهند (برای نمونه، رسم یک نقطه روی صفحه) و سپس آن مجموعه دستورالعملها را برای دیگر برنامهنویسان در دسترس قرار میدهند. (اگر مایلید «یک برنامهنویس خوب» باشید به این مطلب مراجعه نمایید.)
رایانههای امروزه، قادرند چندین برنامه را در آن واحد اجرا نمایند. از این قابلیت به عنوان چندکارگی (multitasking) نام برده میشود. در واقع، CPU یک رشته دستورالعملها را از یک برنامه اجرا میکند، سپس پس از یک مقطع ویژه زمانی دستورالعملهایی از یک برنامه دیگر را اجرا میکند. این فاصله زمانی اکثرا بهعنوان یک برش زمانی (time slice) نام برده میشود. این ویژگی که CPU زمان اجرا را بین برنامهها تقسیم میکند، این توهم را بوجود میآورد که رایانه همزمان مشغول اجرای چند برنامهاست. این شبیه به چگونگی نمایش فریمهای یک فیلم است، که فریمها با سرعت بالا در حال حرکت هستند و به نظر میرسد که صفحه ثابتی تصاویر را نمایش میدهد. سیستمعامل همان برنامهای است که این اشتراک زمانی را بین برنامههای دیگر تعیین میکند.
سیستمعامل
کامپیوتر همیشه نیاز دارد تا برای بکار انداختنش حداقل یک برنامه روی آن در حال اجرا باشد. تحت عملکردهای عادی این برنامه همان سیستمعامل یا OS که مخفف واژههای Operating System است. سیستم یا سامانه عامل بر اساس پیشفرضها تصمیم میگیرد که کدام برنامه برای انجام چه وظیفهای اجرا شود، چه زمان، از کدام منابع (مثل حافظه، ورودی/خروجی و...) استفاده شود. همچنین سیستمعامل یک لایه انتزاعی بین سختافزار و برنامههای دیگر که میخواهند از سختافزار استفاده کنند، میباشد، که این امکان را به برنامه نویسان میدهد تا بدون اینکه جزئیات ریز هر قطعه الکترونیکی از سختافزار را بدانند بتوانند برای آن قطعه برنامهنویسی نمایند. در گذشته یک اصطلاح متداول بود که گفته میشد با تمام این وجود کامپیوترها نمیتوانند برخی از مسائل را حل کنند که به این مسائل حل نشدنی گفته میشود مانند مسائلی که در مسیر حلشان در حلقه بینهایت میافتند. به همین دلیل نیاز است که با کمک روشهای خاص بطور مثال به چند بخش تقسیم نمودن مساله یا روشهای متداول دیگر از رخ دادن این خطا تا حد امکان جلوگیری نمود. از جمله سیستم عاملهای امروزی میتوان به مایروسافت ویندوز، مکینتاش اپل و لینوکس و بی اس دی اشاره کرد.
توسعه نرمافزار برگردان نیاز کاربران یا مشتریان درقالب یک محصول نرمافزاری است.
توسعه نرمافزار از مرحله طرح یک راه حل مفهومی برای مساله خواسته شده (امکانسنجی) آغاز شده، پس از دریافت خواستهها و تحلیل سیستم طراحی صورت گرفته و در نهایت این طراحی با کمک ابزارهای پیادهسازی تبدیل به یک سیستم واقعی میشود.

هدف این فرایند آن است که از یک سو برآورده ساختن نیازهای کاربران و از سوی دیگر کیفیت مناسب عملکرد سیستم تضمین گردد و بنابراین بایستی حاوی مکانیسمهایی برای اعتبارسنجی یعنی خروجی مطابق با خواستهها (Validation) و وارسیپذیری یعنی صحت عملکرد خروجی (Verification) باشد. فرایند توسعه ضمن دادن آزادی به تحلیلگر باید تضمین کند که زمانبندی اجرای پروژه رعایت میشود.
توسعه نرمافزار ارتباط تنگاتنگی با مهندسی نرمافزار دارد و از دید بسیاری این دو مفاهیمی تقریباً یکسان هستند.
در سالهای اخیر با رشد نیاز به تولید نرمافزارهای تجاری توسعه نرمافزار به بحثی مهم تبدیل شده است و روشهای گوناگونی در قالبهای مختلف برای تولید نرمافزارها بر مبنای نیازهای کاربران، مشخصات کلی سیستم، شرایط مدیریتی و اقتصادی، زمان بندی و سطح کیفی به وجود آمده اند.
اغلب توسعه نرمافزار Software Development با برنامه نویسی Programming یکسان فرض شده اند در حالیکه توسعه نرمافزار بر خلاف برنامه نویسی با تولید تجاری نرمافزار، استفاده بهینه از بخشهای در دسترس تولید شده و همچنین روشهای مدیریت، افزایش سرعت و افزایش کیفیت پروژههای نرمافزاری سر و کار دارد.
کیت توسعه نرمافزار
کیت توسعهٔ نرمافزار یا SDK مجموعه توابع و کتابخانههای کامپایل شدهای که تولیدکنندگان نرمافزار برای آسان کردن برنامهنویسی برای محیط یا سکوی خاصی فراهم میکنند و در اختیار برنامهنویسان کاربردی قرار میدهند.
رابط برنامهنویسی نرمافزار
رابط برنامهنویسی نرمافزار (به انگلیسی: Application Programming Interface یا API) یا به صورت خلاصه رابط برنامه نویسی، رابط بین یک کتابخانه یا سیستمعامل و برنامههایی است که از آن تقاضای سرویس میکنند.
رابط کارکردهایی را تعریف میکند که کتابخانه یا سیستمعامل میتواند ارائه دهد و مفهومی مجرد است. این کارکردها سپس در قالب یک نرمافزار یا کتابخانه پیادهسازی میشوند. به عبارت سادهتر، رابط برنامهنویسی مجموعه توابعی است که یک برنامه میتواند از یک برنامه دیگر فرا بخواند.
برای مثال مایکروسافت برای APIهای ویندوز مرجعهایی استاندارد دارد که با استفاده از آنها برنامهنویسان میتوانند از قابلیتها و سرویسهای سیستمعامل در توسعه و نوشتن برنامههای کاربردی خود استفاده کنند.
گسترش نرمافزار
گسترش نرمافزار به تمامی فعالیتهایی که یک نرمافزار را برای استفاده آماده میکند اطلاق میشود.
پارادایم برنامهنویسی
پارادایم برنامهنویسی یا شیوههای برنامهنویسی، به شیوههای اساسی برنامهنویسی رایانه گویند.
مرور کلی
یک زبان برنامهنویسی میتواند یک یا چند شیوه برنامهنویسی را پشتیبانی نماید. برای مثال، برنامههای نوشته شده با سی++ میتوانند کاملاً بصورت رویهای باشند یا کاملاً منطبق بر شیوه برنامهنویسی شئگرا که در تضاد کامل با شیوه رویهای است بوده یا حتی حاوی عناصری از هر دو شیوه باشند. تصمیمگیری برای چگونگی استفاده از عناصر شیوههای برنامهنویسی برعهده طراح برنامه یا برنامهنویس میباشد.
برنامهنویسی دستوری
برنامهنویسی دستوری (به انگلیسی: Imperative programming) در علوم رایانه یکی از شیوههای برنامهنویسی است که در آن مراحل اجرای یک برنامه کامپیوتری قدم به قدم توسط برنامه نویس بیان میشود. این بر خلاف زبانهای اعلانی است که در آنها تنها نتیجه انجام دستورات بیان میشود. به بیان دیگر در زبانهای دستوری چگونگی اجرای برنامه بیان میشود اما در زبانهای اعلانی چیستی نتیجه بیان میشود.
به عنوان مثال اگر قصد باز کردن دری را داشته باشیم و با زبان اعلانی این را بخواهیم بیان کنیم خواهیم گفت در را باز کن اما اگر با زبان دستوری بیان کنیم خواهیم گفت بلند شو، به طرف در نردیک شو، دستگیره را بگیر و در را به طرف بیرون هل بده.
برنامهنویسی تابعی
برنامهنویسی تابعی (به انگلیسی: Functional programming) نوعی پارادایم برنامهنویسی است که در آن «محاسبات» به صورت ارزشیابی توابع ریاضی در نظر گرفته میشوند.
برنامهنویسی رویهای
برنامهنویسی پروسهای یک پارادایم برنامهنویسی بر پایه مفهوم فراخوانی پروسهها است. پروسه که همچنین به نامهای روال، زیرروال (سابروتین)، تابع، روش شناخته میشود، دربردارنده یک سری گامهای محاسباتی است که باید توسط رایانه اجرا شوند.
هر پروسه میتواند در هر نقطهای در طول اجرای برنامه فراخوانده شود شامل فراخوانی پروسه توسط خودش (برنامهنویسی بازگشتی) یا پروسههای دیگر.
برنامهنویسی شیءگرا
برنامهنویسی شیءگرا (به انگلیسی Object-Oriented Programming مخفف OOP) یک شیوه برنامه نویسی است که ساختار یا بلوک اصلی اجزای آن، شیها میباشند. در واقع در این شیوه برنامه نویسی، برنامه به شیء گرایش پیدا میکند. به این معنا که دادهها و توابعی که قرار است بر روی این دادهها عمل کنند، تا حد امکان در قالبی به نام شی در کنار یکدیگر قرار گرفته، جمعبندی شده و یک واحد (شی) را تشکیل داده و نسبت به محیط بیرونِ خود، کپسوله میشوند و از این طریق، توابع بیگانهٔ خارج از آن شی، دیگر امکان ایجاد تغییر در دادههای درون آن شی را ندارند. به طور مثال حساب بانکی شما که شامل مشخصات فردی شما و میزان سپردهٔ شما در بانک است، تشکیل یک شی را میدهند و به دلیل دارا بودن ویژگی کپسوله، امکان دستکاری در میزان سپرده یا مشخصات شما، توسط دیگران وجود ندارد. از دیگر ویژگیهای برنامه نویسی شی گرا، پیچیدگی کم، هزینه کم، امکان گسترش سریع برنامه با خطای کمتر نسبت به سایر پارادیامهای برنامه نویسی است.
فلسفه یی که منجر به شکل گیری ی زبانهای شی گرا شد، عبارت بود از این واقعیت که نحوهٔ عملکرد مغز و شیوهٔ دریافت اطلاعات از محیط پیرامون و پردازش آن اطلاعات (اندیشیدن)، شیوه یی شی گراست، از همین روی میبایستی زبانی تعریف میشد که همین شیوه را مبنای کار خود قرار داده و بازتولید میکرد. و دقیقاً به همان شکل که اشیا در جهان خارج، دارای هویت و کارکرد مشخص و یگانه برای خود هستند و در عین حال با دیگر اشیا در ارتباطی تنگاتنگ و مستقیم اند، در زبانهای برنامه نویسی نیز میبایستی این اصول کلی برقرار میشد. تا به این شکل، برنامه نویس بتواند با بهرهگیری از زبانی که به روش اندیشیدنش، نزدیکی بیشتری دارد، شیهای مختلفی را تعریف نموده، این شیها را در ارتباط با یکدیگر قرار داده و از شیهای پویای تولید شده برای حل مساله ی پیش روی استفاده نماید. امروزه اکثر زبانهای دستوری برنامه نویسی از فنون شیءگرایی پشتیبانی میکنند. زبانهایی مانند جاوا، سی++، سی شارپ، دلفی از جمله زبانهای شیءگرا هستند. حتی بسیاری از زبانهای روال گونه که ساختار برنامهها در آنها بلوکهایی با نام پروسیجر است امروزه از فنون شیءگرایی نیز پشتبانی میکنند. زبانهای سی++ و پیاچپی از این جمله هستند. هر شیء یک سری خصوصیت و قابلیت دارد، که اصطلاحاً Properties و Operation خوانده میشوند. در این روش از برنامه نویسی دید برنامه نویس به سیستم دید شخصی است که سعی مینماید به پیدا کردن اشیاء مختلف در سیستم و برقراری ارتباط بین آنها سیستم را تولید نماید. مفهوم مدیریت دیداری
مفاهیم عمده
کلاس
کلاس نوع خاصی از آرایه است که امکان ذخیره و جمعبندی تعداد زیادی المان را (که شامل دادهها و توابع هستند) برای یک شی جدید فراهم آورده و تحت یک نام مشترک ذخیره میکند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ دادههایی هم جنس است، کلاس میتواند دادههایی از جنسهای مختلف را ذخیره نماید. به طور مثال در نظر بگیرید که میخواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم.
حال در نظر بگیرید که نه فقط یک تاریخ، بلکه n تاریخ متفاوت مورد نیاز است. این بدان معنی ست که میبایستی به تعداد n بار، سه متغیر بالا، جداگانه تعریف شوند و تعریفِ تک تک و پیاپی متغیرها، نه فقط از لحاظ زمانی بسیار وقت گیر مینماید، بلکه از لحاظ میزان کد مورد نیاز نیز بسیار غیر عملی ست، چرا که هر بار میبایستی نام جدیدی برای متغیرها در نظر گرفته شود (دو متغیر متفاوت نمیتوانند هم نام باشند). در اینجاست که کلاسها به خوبی وارد عمل میشوند. با استفاده از کلاسها میتوان متغیرهای متعدد (در مثال بالا: int day ;String month, ;int year) را زیر عنوان یک جنسیت مشترک جدید (به طور مثال هر سه را در یک کلاس با نام Date)، تعریف و جمعبندی نمود. و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال، از کلاس Date به میزان مورد نیاز استفاده کرد
وراثت
وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه نویسی شیءگراست. هر شیء یک نمونه از یک کلاس است و هر کلاس میتواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاسهای دیگر را به ارث ببرد). در یک مثال ساده میتوان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، میتوان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل زانتیا مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفهجویی در نوشتن کد و تا حدودی تضمین صحت کد موجود میشود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاسهایی که از این کلاس پایه ویژگیای ا به ارث بردهاند این تغییر اعمال خواهد شد.
مخفیسازی
کپسوله سازی، مخفیسازی (Encapsulation)، یا لفافهبندی، به این مفهوم اشاره دارد که باید بعضی خصوصیات یا رفتارهای شیء را از دید دیگران پنهان کرد. فرض کنید شما به عنوان یک راننده میخواهید اتومبیل شخصی تان را روشن کنید و به محل کارتان عزیمت کنید سوییچ را بر میدارید، استارت میزنید و با فشار آوردن به پدالهای گاز و ترمز و چرخش فرمان و ... به محل کارتان خواهید رسید. در طول این مسیر در اتومبیل شما به عنوان یک شیء اعمال مختلفی در حال انجام بود. مثلاً لنت ترمز به دیسک چرخ برخورد میکرد و باعث کم شدن سرعت میشد یا شمعها شروع به جرقه زدن در زمانی بخصوصی میکردند. حال فرض کنید که عمل مخفی سازی وجود نداشت و شما مجبور بودید که جرقه زدن شمعها را کنترل میکردید و به سیستم سوخت رسانی در موقع لزوم دستور میدادید که سوخت را بداخل سیلندرها ارسال کند و... یا هیچگاه به مقصد نمیرسیدید! یا سالم نمیرسیدید!
عمل مخفی سازی باعث میشود که اشیاء بدون آنکه از چگونگی کارکرد یکدیگر اطلاع داشته باشند با هم کار کنند.
چندشکلی
چند ریختی(Polymorphism) چند ریختی، کمیتی است که به یک رابط امکان میدهد تا از عملیات یکسانی در قالب یک کلاس عمومی استفاده کند. عمل خاص کلاس را ذات حقیقی شیء تعیین میکند. مثال سادهای از چند ریختی، فرمان اتومبیل است. عمل فرمان اتومبیل برای تمام اتومبیلها بدون توجه به ساز و کاری که دارند، یکسان است. فرمان برای اتومبیل که به طور مکانیکی کار میکند یا با نیروی برق یا هر چیز دیگری، عمل یکسانی را انجام میدهد. بنابراین، پس از اینکه شما عملکرد فرمان را یاد گرفتید، میتوانید فرمان هر اتومبیلی را کنترل کنید. همین هدف در برنامه نویسی نیز اعمال میشود. به طور کلی، مفهوم چند ریختی، اغلب با عبارت ((یک رابط، چندین روش))بیان میشود. این بدین معنی است که امکان طراحی رابط عمومی برای گروهی از عملیات مرتبط وجود دارد. چند ریختی یا چندشکلی (Polymorphism) به این معنا است که اشیاء میتوانند در موقعیتهای مختلف، رفتارهای متفاوتی بروز دهند. مثلاً یک تابع در صورتی که بر روی نمونهای از کلاس آ فراخوانی شود، رفتار ب را بروز دهد در حالی که اگر بر روی کلاس ج (که فرزند کلاس آ است) فراخوانی شود، رفتاری متفاوت انجام دهد.
انتزاع / تجرید
به این معنا است که بخشی از یک موجودیّت یک مفهوم را که میان همهٔ وارثان مشترک است، پیش تعریف کنیم. این توانایی منجر به داشتن نگاه مشابه به موجودیّتهای مشابه میگردد.
یک مثال کاربردی
در اطراف ما اشیاء زیادی وجود دارد و میتوان تمام مفاهیم موجود در طبیعت را با اشیاء تقلیل داد. مثلاً یک ماشین باربری. این ماشین یک سری خصوصیات دارد: چهار چرخ، یک پدال ترمز، یک پدال گاز، یک فرمان و یک محل بزرگ برای قرار دادن اشیاء در آن و.... این ماشین در صورتی که ما پدال گاز آن را فشار دهیم، حرکت میکند. در صورتی که فرمان آن را بچرخانیم تغییر مسیر میدهد. پس این شیء علاوه بر یک سری خصوصیات، یک سری رفتار مشخص هم به ما نشان میدهد. ولی فقط این یک ماشین نیست که این کار را انجام میدهد. تمامی ماشینها این کارها را انجام میدهند. پس میتوانیم این ماشین را 'تعریف' کنیم و بگوییم:
ماشین باربری وسیلهای است که چهار چرخ، یک گاز، یک ترمز، یک فرمان و یک محل برای حمل بار دارد و اگر پدال گاز آن فشار داده شود حرکت میکند. این تعریف این ماشین است ولی خود آن نیست. هر زمانی چنین ماشینی بخواهیم به کارخانه تولید آن میرویم و از فروشندگان میخواهیم تا با توجه به این تعریف یک ماشین به ما بدهند.
مفاهیم فوق در زبانهای برنامه نویسی شیءگرا گنجانده شدهاند. در این زبانها، اشیاء زیادی از پیش وجود دارند که برنامهنویسان میتوانند از آنها استفاده کنند.
ارتباط اشیاء
مجدداً به مثال ماشین باربری بر میگردیم و این بار، یک ماشین سواری را تعریف میکنیم. ماشین سواری شیئی است که چهار چرخ، یک ترمز، یک پدال گاز و یک صندوق عقب دارد. این تعریف به تعریف ماشین باربری بسیار شبیهاست. به عبارت دیگر ما به یک تعریف جدید میرسیم: خودرو. خودرو وسیلهای است که چهار چرخ، یک ترمز، یک پدال گاز دارد. پس از این به بعد تعریف ماشین باربری و ماشین سواری خیلی سادهتر میشود.
ماشین باربری، خودرویی است که محلی برای قرار دادن بار داشته باشد و ماشین سواری خودروییاست که صندوق عقب داشته باشد.
اگر کسی به درب کارخانه مراجعه کند و بگوید که 'خودرو' میخواهد، چیزی دریافت نمیکند. خودرو یک تعریف انتزاعی است، برای تعریف خودرو شیء وجود ندارد پس مشتری تنها میتواتند ماشین باربری یا ماشین سواری بخواهد.
کارواش را در نظر میگیریم. این کارواش خودرو را تمیز میکند و دیگر به طور جزئی عنوان نمیکند که کدام نوع خودرو را تمیز میکند. به عبارت دیگر نوع خودرو برای کارواش مهم نیست.
وقتی شخصی قصد اجاره خودرویی دارد، و میخواهد جنسی را حمل کند در هنگام تماس با متصدی کرایه ماشین میگوید: «اگر خودرو شمااز نوع باربری است، برای من ارسال کنید»، ولی اگر قصد جابجا شدن را دارد میگوید: «برای من یک ماشین سواری بفرستید.»
در زبانهای برنامه نویسی شیءگرا نیز اشیاء مختلفی وجود دارند که تعریف آنها تکمیل کننده یکدیگر است، به عبارت دیگر اشیا از یکدیگر ارث بری میکنند. برخی از تعاریف کاملاً عام است و نمیتوان از آنها نمونه شیئی ساخت و تنها تعریف هستند. به این تعاریف Interface گفته میشود.
مدیریت پیچیدگی
اعمال شیوههای مدیریتی با محوریت اشیاء در مطالعه، طراحی، ایجاد، و اجراء پروژههای مهندسی نرمافزار و مهندسی دانش.
برنامهنویسی منطقی
برنامهنویسی منطقی در کلیترین مفهوم آن، کاربرد منطق ریاضی در برنامهنویسی رایانه است.
معماری نرمافزار
معماری نرمافزار یعنی ساختار و سازمان یک سیستم نرمافزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز میباشد. در واقع اجزاء را در حوزههای مرتبط به هم گروه بندی میکند. دیگر حوزههای مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز میشوند.
معماری نرمافزار از کلیدیترین بخشهای تولید نرمافزار مخصوصا نوع تجاری آن است که البته در سالهای اخیر با ایجاد مدلهای کلاسیک تولید نرمافزار به نرمافزارهای عظیم تر محدود شده است.
معماری نرمافزار در واقع انتخاب یک ساختار کلی برای پیاده سازی یک پروژه نرمافزاری بر مبنای مجموعه ای از نیازهای کاربری و تجاری یک سیستم نرمافزاری است تا هم بتوان کاربردهای مورد نظر را پیاده سازی کرد و هم بتوان کیفیت نرمافزار، تولید آن و نگهداری آن را نیز بهینه کرد و سرعت بخشید. به عبارتی دیگر: معماری نرم افزار یک برنامه یا سیستم محاسباتی، ساختار یا ساختارهای آن سیستم محاسباتی است که خصوصیات قابل رویت از بیرون، عناصر و ارتباطات بین آنها را نشان می دهد.
فرایند توسعه نرمافزار
فرایند تولید نرمافزار که با عنوان «چرخهٔ حیات تولید نرمافزار» نیز شناخته میشود، ساختاری است که روی توسعه و تولید محصولات نرمافزاری اعمال میشود. عبارتهای مشابهی چون «چرخهٔ حیات نرمافزار» و «فرایند نرمافزار» در این رابطه استفاده میشود.الگوهای گوناگونی نظیر فرایندهای (خاص) وجود دارند که هر کدام خط مشی مختص (آن فرایندها) برای انجام کارها و فعالیتهای متنوع در طول فرایندها را مشخص میکنند. برخی عنوان میکنند که «طرح چرخهٔ حیات» یک عبارت بسیار عمومی بوده و «فرایند تولید نرمافزار» عبارت تخصصیتر است. برای مثال خیلی از فرایندهای تولید نرمافزار ویژهای هستند که خود زیر مجموعه چرخهٔ حیات حلزونی به شمار میروند.از مهمترین کارها در تولید نرمافزار استخراج نیازمندیها یا تحلیل نیازمندیهای آن سامانه است. مشتریان عمومی معمولاً تصور مفهومی، انتزاعی و مبهمی از نتیجه نهایی خواستههایشان دارند و نمیدانند به درستی نرمافزار مورد نظرشان چه کاری باید انجام دهد. در این مرحله نیازمندیهای ناتمام، پیچیده و مبهم، و حتی متضاد توسط مهندسان نرمافزار ماهر شناسایی میشوند. در این برهه تکه نرمافزارهای آماده، تجربهشده و فعال ممکن است برای پایین آوردن ریسک (و مشکلات) نیازمندیها کمک کنند.نخست نیازمندیهای عمومی از کاربران جمعآوری شده و دامنه توسعه و تولید نرمافزار که باید تولید شود شناسایی و تحلیل میشود، سپس مستندات بصورت شفاف نوشته میشوند. معمولاً به این مستند، مستند دامنه یا محدوده سامانه اطلاق میشود.برخی قابلیتها ممکن است در ابتدای پروژه به خاطر مسائل مالی یا نیازمندیهای غیر شفاف و نامشخص خارج از محدوده پروژه باشند. اگر تولید و توسعه نرمافزار برونسپاری شود (یعنی به شرکتهای خارجی محول شود) این مستندات به عنوان مستندات قانونی و حقوقی در نظر گرفته میشود؛ بنابراین در صورت اتفاق هرگونه دعوای حقوقی یا ابهام در مورد تعهدات دادهشده به کاربر، این مسائل قابل شفافسازی خواهد بود.=== پیادهسازی، آزمون و مستندسازی ===پیادهسازی آن قسمت از فرایند تولید نرمافزار به شمار میرود که مهندسان نرمافزار در دنیای واقعی تمام کدهای پروژه را مینویسند و به قول معروف برنامهنویسی میکنند.آزمون نرمافزار بخش لاینفک و مهم از فرایند تولید نرمافزار است. این قسمت از فرایندها کمک میکند تا مشکلات سامانه بصورت سریع شناسایی شوند.مستندسازی در تمام مراحل پروژه چون طراحی داخلی نرمافزار برای تعیین اهداف سیستم، نگهداری آینده و ارتقاء و بهبود سامانه هرچند پروژه پایان یافته باشد انجام میشود. همچنین ممکن است این مستندسازی شامل نوشتن ساختار تکههای برنامه ظاهر برنامه کاربردی داخلی و خارجی هم باشند. این مطلب خیلی مهم است که همه چیز پروژه مستندسازی شود.=== استقرار و نگهداری سامانه ===استقرار و تحویل سامانه پس از اینکه آزمون مناسب را گذراند و برای انتشار، فروش یا هر نوع توزیع برای محیط کار نهایی تأیید شد انجام خواهد شد.آموزش نرمافزار و پشتیبانی خیلی مهم است و خیلی از تولیدکنندگان و توسعهدهندگان نرمافزارها اهمیت آن را درک نمیکنند. مهم نیست که چقدر زمان و برنامهریزی توسط تیم تولید و توسعه نرمافزار برای ایجاد نرمافزار مصرف کردهاند اگر در آخر کار کاربری در سازمان نباشد تا از نرمافزار استفاده کند. مردم معمولاً در برابر تغییرات مقاومت نشان میدهند و از ماجراجویی در محیط ناآشنا اجتناب میکنند، برای همین در فاز استقرار این خیلی مهم است کلاسهای آموزشی برای کاربران جدیدِ نرمافزار گذاشته شود.نگهداری و ارتقای نرمافزاری برای پوشش، مسائل پوشش دادهنشده یا نیازمندیهای تازهای که ممکن است بوجود آیند مدت خیلی زیادی حتی بیشتر از زمان اولیه تولید نرمافزار زمان بگیرد. این مرحله ممکن است نیاز باشد تا کدهای برنامهنویسی تازهای که در طراحی اصلی برنامه نیز دیده نشده اضافه شود تا مسائل و مشکلات دیدهنشده حل شوند یا ممکن است کاربر درخواست عملیات اصلی دیگری کند و برنامهنویسیهای تازهای برای برآورده کردن نیازهای جدید انجام گیرد. اگر هزینه کار فاز نگهداری از ۲۵ درصد هزینه فاز قبلی (پیادهسازی) بیشتر باشد، این احتمال وجود دارد که کیفیت کلی فاز قبلی خیلی ضعیف بوده باشد. در این صورت مدیران پروژه باید گزینهٔ ایجاد مجدد سامانه (یا بخشی از سامانه) را قبل از اینکه هزینههای نگهداری غیر قابل کنترل شود را مطرح کنند.الگوهای تولید نرمافزارالگو آبشاریالگو آبشاری فرایندها را به گونهای نشان میدهد که کجا تولید کنندگان نرمافزار (برنامهنویسان) فازهای زیر را به ترتیب انجام دهند:# مشخصات مورد نیاز (تحلیل نیازمندیها)# طراحی نرمافزار# پیادهسازی و یکپارچهسازی# تست نرمافزار (یا اعتبارسنجی)# گسترش نرمافزار (یا نصب)# نگهداری نرمافزاردر سختگیرانهترین حالت آبشاری، بعد از اینکه هر فاز کاملاً پایان پذیرفت، به مرحله بعدی میرویم. بازبینی که اجازه ایجاد تغییرات در سامانه را بدهد (که ممکن است شامل تغییرات فرایندهای کنترل رسمی باشد) فقط قبل از رفتن به مرحله بعد امکانپذیر است. همچنین بازبینی ممکن است جهت اطمینان از پایان قطعی این فاز (مرحله) بکار گرفته شود. فازی که معیارهای تکمیل آن کامل شده، معمولاً با عنوان دروازه اطلاق میشود که نشان میدهد پروژه از فاز فعلی به فاز بعدی منتقل شده است. الگو آبشاری از بازبینی و تجدید نظر فازهای قبلی که کامل شدهاند، جلوگیری میکند. این عدم انعطافپذیری مفصل در الگو آبشاری محض، دست مایه انتقاد، پشتیبانی کنندگان الگوهای انعطاف پذیر است.الگو حلزونیخصوصیت کلیدی الگو حلزونی مدیریت ریسک در تمام مراحل چرخهٔ تولید نرمافزار است. در سال ۱۹۸۸ میلادی بری بوهم به صورت رسمی الگو حلزونی فرایند تولید نرمافزار را منتشر کرد، که ترکیبی از بعضی کلیدهای تایید شده متدولوژی الگو آبشاری و نمونهسازی سریع است، اما احساس میشود الگو ارائه شده تاکید در ناحیه های کلیدی (الگو آبشاری) را با متدهای دیگری همچون بررسی دقیق و تحلیل دائمی ریسکها، سیستمهای خاص مناسب برای سامانه پیچیده و بزرگ، کوتاه تر کرده است.الگو حلزونی این روش را با چهار نمودار که نشان دهند فعالیت های زیر است، به تصویر می کشد که فرایندها در چند مرحله تکرار انجام میشود:# تدوین و فرموله کردن برنامه ریزی خوب است برای شناسایی اهداف سیستم، قسمت های انتخاب شده جهت پیاده سازی برنامه، محدودیتهای واضح و مشخص پروژه.# تحلیل ریسک و مشکلات سامانه: ارزیابی تحلیلی برنامه های انتخاب شده، جهت مشخص کردن چگونگی شناسایی و از بین بردن ریسکها.# پیاده سازی پروژه: پیاده سازی تولید نرمافزار و تایید کارایی سامانه. الگو حلزونی مبتنی بر ریسک، بر اختیارانتخاب گزینه ها و محدودیتها در سفارشها برای پشتیبانی استفاده مجدد نرمافزار و اینکه کیفیت نرمافزار میتواند در ادغام اهداف ویژه در تولید نرمافزار کمک میکند، تاکید میکند.به هر حال الگو حلزونی شرایط محدود کننده زیر را دارا می باشد: # الگو حلزونی تحلیل ریسکها را تاکید میکند و بنابراین کاربران باید این تحلیل را قبول کنند و فکری برایش کنند (این مطالب را در نظر داشته باشند). این مسئله نیازمند اعتماد متقابل و همچنین تمایل به هزینه کردن برای رفع ایرادات، در هنگام تولید نرمافزار است و این دلیل استفاده شدن این الگو تولید نرمافزار پروژه های بزرگ است.# درصورتیکه در هنگام پیادهسازی تحلیل ریسکها تاثیر منفی روی سود پروژه زیاد باشد نبایستی از الگو حلزونی استفاده گردد.# تولید و توسعه دهندگان نرمافزار بصورت فعال حواسشان به ریسکهای قابل حل خواهد بود و به دقت آنها را در الگو حلزونی تحلیل میکنند.مرحله اول تدوین و فرموله کردن یک برنامه برای رسیدن به اهداف با این محدودیتها، و پس از آن تلاش برای پیدا کردن و حذف تمام خطرات بالقوه (ریسکهای بالقوه) از طریق تجزیه و تحلیل دقیق و در صورت لزوم، با ساخت نمونه اولیه است. اگر برخی ریسکها قابل حل نبودند در این صورت مشتریان باید تصمیم بگیرند که آیا میخواهند انجام پروژه را خاتمه دهند یا از ریسکهای مورد نظر چشم پوشی کنند و به هر ترتیب ادامه دهند. در نهایت، نتایج ارزیابی شده و طراحی مرحله بعدی آغاز میشود.در حالت کلی یک الگو تکاملی است که به صورت مجموعهای از نسخههای افزایشی توسعه میابد و همچنین در طی تکرارهای اولیه ممکن است یک الگو کاغذی یا یک نمونه اولیه باشد ولی در طول تکرارهای بعدی هر بار نسخه کاملتری از سامانه تولید میشود و این الگو به ۳ تا ۶ نواحی کاری تقسیم میشود.روش تکرارشونده و افزایشیروشی تکراری تولید نرمافزار اجازه ی ایجاد که پروژه در ابتدا از بخشهای کوچک شروع شود و به مرور زمان سامانه رشد کند تا کمک کند در این درگیری مشکلات مهم پیدا شوند قبل از اینکه فرضیات اشتباه باعث خراب شدن سامانه شوند. الگو تکرار فرایند ها بوسیله تولید کنندگان نرمافزارهای تجاری انتخاب و استفاده میشود چون این الگو اجازه می دهد تا نیازهای کاربرانی که در زمان طراحی دقیقاً نمیدانند چگونه نیازمندیهایشان از سامانه را معرفی کنند بصورت بالقوه برآورده شود. روش توسعه سریع نرمافزارروش توسعه سریع نرمافزار (به انگلیسی: Rapid application development)(مخفف انگلیسی: RAD) روش تکراری را بعنوان پایه کار استفاده میکند اما طرفداری نظریه سبکتر و محبوبیت بیشتر از روش سنتی است. روش سریع از بازخوردها به جای برنامهریزی بعنوان سازوکار اصلی کنترل پروژه استفاده میکند. بازخوردها بوسیله آزمونهای مرتب و انتشار پیاپی در بازههای زمانی کوتاه نرمافزارهای در حال تکامل تولید میشوند.روشهای گوناگونی از فرایند سریع برای تولید نرمافزار استفاه میشود:روش برنامهسازی مفرطتولید نرمافزار به روش برنامهسازی مفرط (به انگلیسی: Extreme programming)(مخفف انگلیسی: XP) در فازهای خیلی کوچک (یا مداوم) انجام و با فرایندهای دستهای قدیمیتر تطبیق داده میشوند. فاز اول (که عمداً کامل نشده) در طول مراحل ممکن است به جای اینکه ماهها و سالها در روش آبشاری طول بکشد تا کامل شود، یک روز یا یک هفته وقت بگیرد. ابتدا یک آزمون خودکار برای ایجاد اهداف اساسی تولید نرمافزار نوشته میشود. سپس (توسط دو برنامهنویس) برنامهنویسی انجام میگیرد که وقتی تمام آزمونها را پشت سر گذاشته و دیگر هیچ آزمون مورد نیازی به ذهن برنامهنویسان نرسد کامل میشود. کار طراحی و معماری سیستم بعد از اینکه نه آزمونی وجود دارد و نه برنامهنویسیشده انجام میشود.طراحی توسط برنامهنویسان انجام میشود. (فقط مشخصات نهایی و ترکیب طراحی و کد در تمام فرایندها در روش سریع مشترک هستند) عملیات اصلی ناقص سامانه (توسط دست کم یکی از افراد گروه تولیدکننده و برنامهنویس) برای کاربران (یا برخی از کاربران) نصب یا نمایش داده میشوند. در اینجا تمام عوامل پروژه دوباره شروع به نوشتن آزمون برای قسمتهای مهم سامانه خواهند کرد.الگو اسکرام اسکرام یک روش چابکِ تکرارشونده و افزایشی برای مدیریت پروژه است که معمولاً در الگوی تولید نرمافزار چابک به عنوان نوعی متدولوژی توسعه نرمافزار دیده میشود. با اینکه روش اسکرام در واقع برای مدیریت محصولات تولید و توسعه پروژهها پیشنهاد شده بود، اما استفاده آن در مدیریت پروژههای تولید نرمافزار متمرکز شد؛ همچنین امکان دارد جهت مدیریت تیم نگهداری نرمافزار، مدیریت پروژهها یا برنامههای عمومی مدیریت خط مشیها استفاده شود.الگوهای بهبودسازی الگوی تکامل قابلیت یکپارچه سازی (CMMI) الگوی تکامل قابلیت یکپارچهسازی (CMMI) یکی از الگوهای پیشنهادی و تکنیکهای پیشتاز است. ارزیابی سازمانهای مستقل و رتبهبندی در مورد کیفیت چگونگی تعریف فرایندهای آن سازمانها را دنبال میکند، نه بر کیفیت خود فرایندها یا نرمافزار تهیه شده است. الگوی CMMI جایگزین الگوی CMM شده است.ایزو ۹۰۰۰ ایزو ۹۰۰۰ یک استاندارد رسمی سازماندهی فراینده ساخت محصولات و روشی برای مدیریت و نظارت پیشرفت کارهاست. در اصل این استاندارد برای بخش تولید وساخت(صنعتی) ایجاد شد.ایزو ۹۰۰۰ همچنین برای فرایند تولید نرمافزار نیز به خوبی استفاده شده.مانند الگو CMMI مدرک ایزو ۹۰۰۰ هیچ تضمینی راجع به کیفیت نتایج نهایی ندارد و فقط فرایندهای کاری را فرموله و قالب استاندارد رسمی می دهد.ایزو ۱۵۵۰۴ ایزو ۱۵۵۰۴ که با عنوان فرایند تشخیص و تعیین بهبود قابلیت نرمافزار (به انگلیسی: Software Process Improvement and Capability Determination)(مخفف انگلیسی: SPICE) نیز شناخته میشود، چارچوبی برای ارزیابی فرایندهای نرمافزار است. این استاندارد تنظیمات قالب روشنی برای مقایسه فرایندها به شمار میرود. SPICE خیلی شبیه CMMI استفاده میشود. فرایندهای این الگو برای مدیریت، کنترل، راهنمایی و نظارت تولید نرمافزار است. این الگو جهت سنجش سازماندهی تولید و توسعه یا تیم پروژه بصورت واقعی در طول مدت تولید نرمافزار استفاده میشود. تجزیه و تحلیل این اطلاعات برای شناسایی نقاط ضعف و حرکت به سمت بهبود پروژه استفاه میشود. همچنین برای تشخیص نقاط قوت پروژه که می تواند برای سازمان یا تیم پروژه ادامه پیدا کند یا برای امور مشترک یکپارچه شود.
کیفیت نرمافزار
در مبحث مهندسی نرم افزار، کیفیت نرم افزار به دو رده مرتبط اما مجزای زیر اشاره دارد:
کیفیت عملیاتی نرم افزار (Software Functional Quality): شاخصی جهت نشان دادن میزان تطابق نرم افزار با نیامندی های عملیاتی تعریف شده برای نرم افزار.
کیفیت ساختاری نرم افزار (Software Structural Quality): که منعکس کننده میزان دست یابی به نیازمندی های غیر عملیاتی مانند استحکام (Robustness) و قابلیت نگهداری (Maintainability) نرم افزار است.
مایکروسافت
مایکروسافت، (به انگلیسی: Microsoft Corporation) شرکت کامپیوتری آمریکایی و چندملیتی است، که دفتر مرکزی آن در شهر ردموند، ایالت واشینگتن، ایالات متحده آمریکا قرار دارد. این شرکت، بزرگترین شرکت ارائه نرمافزار رایانه در دنیاست، که به انتشار کتاب و تولید محصولات چندرسانهای و ارائه خدمات پست الکترونیکی نیز میپردازد.
مایکروسافت در سال مالی منتهی به ژوئن ۲۰۱۰ میلادی، بیش از ۶۲ میلیارد دلار درآمد فروش، بیش از ۱۸ میلیارد دلار سود خالص و ۸۹٬۰۰۰ کارمند در کشورهای مختلف دنیا داشته است. فعالیت اصلی آن در زمینهٔ طراحی، توسعه، ساخت، صدور مجوز، پشتیبانی و ارائهٔ خدمات نرمافزاری برای ابزارهای رایانهای میباشد.
پرفروشترین محصولات مایکروسافت، سیستمعامل «ویندوز» و نرمافزار «آفیس» است و شعار اصلی شرکت «یک کامپیوتر روی هر میز و در هر خانه، که نرمافزارهای مایکروسافت را اجرا کند.» میباشد. این دو محصول با سهمی حدود ۹۰٪ در سال ۲۰۰۳ برای مایکروسافت آفیس و در سال ۲۰۰۶ برای ویندوز جایگاه مهمی در بازار فروش محصولات کامپیوترهای شخصی و کامپیوترهای رومیزی پیدا کردند.
مایکروسافت که در ابتدا کار خود را توسط دو دوست دوران کودکی به نامهای بیل گیتس و پُل جی. آلن با ساخت و فروش مفسر زبان برنامهنویسی بیسیک (Basic interpreters) برای «آلتایر» (Altair) شروع کرد، در اواسط دههٔ ۸۰ میلادی با طراحی سیستمعامل داس بر بازار سیستمهای عامل رایانههای خانگی مسلط شد.
شرکت، سهام خود را وارد بورس کرد، که با افزایش ارزش سهام، چهار نفر، میلیاردر و حدود ۱۲٬۰۰۰ نفر از کارکنان مایکروسافت، میلیونر شدند.
شرکت مایکروسافت همواره هدف نقدهای مختلفی از جمله انحصارطلبی بوده، که موجب تشکیل دادگاههای قضایی بسیاری علیه آن، به علت تجاوز از قوانین انحصار، در وزارت دادگستری ایالات متحده آمریکا و کمیسیون اروپا شده است.
مایکروسافت علاوه بر بازار سیستمعامل و نرمافزار اداری، در زمینههای دیگر هم فعالیت میکند مانند: شبکه تلویزیونی اماسانبیسی "MSNBC"، سایت اینترنتی «اماسان» و دانشنامه چندرسانهای انکارتا (که دیگر انتشار نمییابد). همچنین در زمینه تولید سختافزار رایانه، با ساخت محصولاتی مانند موشواره و نیز سرگرمیهای خانگی، از جمله ایکسباکس، ایکسباکس ۳۶۰ و زون(zune) نیز میپردازد. مایکروسافت از گذشته تاکنون با استفاده از روشهای مختلف مانند گروه خبری «یوزنت» "Usenet" و وب، پشتیبانی از نرمافزارهای خود را همواره ادامه دادهاست و جایزهٔ «امویپی» Microsoft MVP را به داوطلبانی که در کمک به مشتریان شرکت مفید بوده باشند، اهدا میکند.
در آوریل ۲۰۱۴ مایکروسافت شرکت فنلاندی تولید تلفن همراه نوکیا را به قیمت هفت و نیم میلیارد دلار خرید. بدین ترتیب تولید گوشیهای تلفن همراه توسط شرکت نوکیا برای همیشه به پایان رسید. با وجود این نوکیا اعلام کرد از این پس بر خدمات نرمافزاری، نقشهکشی، شبکهسازی و پیشبرد فناوری متمرکز خواهد شد. تلفنهای همراه نوکیا پس از ورود گوشیهای هوشمند به ویژه سامسونگ و آیفون، به سرعت از رده خارج شدند.
تاریخچه
تاریخچه اولیه
پائول آلن و بیل گیتس، دوستان دوران کودکی بودند که با شور و شوق فراوانی برای کامپیوتر برنامه نویسی میکردند و به دنبال ایجاد یک کسب و کار بودند. در ژانویه ۱۹۷۵، سیستمهای تله میتری (MITS) به نام آتاری ۸۸۰۰ از شرکت میکرو تولید شد. پائول آلن متوجه شد که آنها میتوانند برای آتاری ۸۸۰۰، Basic بسازند و پس از تماس با بیل گیتس آنها از این شرکت تقاضای استخدام کردند. پائول آلن به عنوان شبیهساز و بیل گیتس به عنوان مترجم استخدام شدند. پس از تولید Basic، میکرو دستگاه آتاری Basic را تولید کرد و بازاریابی کرد. سرانجام در تاریخ ۴ آوریل ۱۹۷۵، شرکت مایکروسافت با مدیر عاملی بیل گیتس تاسیس شد. در آگوست ۱۹۷۷، مایکروسافت با مجله اسکی در ژاپن توافق کرد و در نتیجه اولین دفتر بینالمللی خود را در ژاپن تاسیس کرد. مایکروسافت در ژانویه ۱۹۷۹، به یک مرکز جدید در واشینگتن در ایالات متحده آمریکا نقل مکان کرد.
مایکروسافت با سیستم عامل خود در سال ۱۹۸۰ یعنی زنیکس، وارد بازار کار سیستم عامل شد. سپس مایکروسافت سیستم عامل MS-DOS را تولید کرد. سرانجام مایکروسافت در مذاکرات با تحقیقات دیجیتال شکست خورد و در نوامبر ۱۹۸۰ سیستم عامل جدیدی با نام CP/M تولید کرد که در آینده در کامپیوترهای شخصی مورد استفاده قرار گرفت. مایکروسافت با درآمدهای بسیارش ۲۱۰ شرکت را خرید و هم چنین یک بخش چاپ و نشر به نام مایکروسافت پرس تولید کرد. سرانجام پائول آلن در ماه فوریه پس از مبتلا شدن به بیماری هوکچین استعفا داد.
آغاز فعالیتها
در ۱۹۹۴ مایکروسافت انکارتا را به راه انداخت؛ نخستین دانشنامهای که روی کامپیوتر قابل اجرا بود. مایکروسافت با همکاری دریم ورکس در سال ۱۹۹۵ برای تولید سرگرمیهای چندمنظوره یک شرکت جدید تأسیس کردند. پیش از ارائه ویندوز ۹۵، مایکروسافت یک شرکت تجارت محور قلمداد میشد اما ویندوز ۹۵ موجب شد که دیگر آن را یک شرکت مشتری محور بدانند. در سپتامبر ۱۹۹۵ دولت چین ویندوز را به عنوان سیستمعامل رسمی کشورش انتخاب کرد و از مایکروسافت خواست نسخه چینی ویندوز را برایشان آماده کند. اواسط دهه۹۰ بیل گیتس تصمیم گرفت مایکروسافت را وارد دنیای اینترنت کند و "MSN" به وجود آمد. این یک سرویس آنلاین بود که قرار بود با آمریکن آنلاین (AOL) رقابت کند. بعد با همکاری انبیسی، ایستگاه کابلی خبری "MSNBC" و مجلهٔ آنلاین "Slate" به سردبیری مایکل کینسلی را تأسیس نمود. راهاندازی وبتیوی که امکان اتصال تلویزیون به شبکه را فراهم میکرد، از دیگر اقدامات مایکروسافت در سال ۱۹۹۶ بود.
فعالیتهای مستمر
در ۱۹۹۷ اینترنت اکسپلورر ۴ همراه ویندوز به بازار آمد. اما دادگستری آمریکا به این دلیل که مایکروسافت با این کار از توافقنامهای که در سال ۱۹۹۴ امضا کرده، تخطی نمودهاست، از آنها خواست که دیگر اینترنت اکسپلورر و ویندوز را همراه هم به بازار نفرستند. در سال ۱۹۹۸ ویندوز ۹۸ به همراه اکسپلورر SP۴/۰ SP۱ و FAT۳۲ به عنوان فایل سیستم عرضه گشت. در عین حال، جنجالهای زیادی در پی افشای یادداشتهای داخلی مایکروسافت در اینترنت به وجود آمد: «نرمافزارهای اوپن سورس تهدیدی جدی برای مایکروسافت به حساب میآیند.» این اسناد که به اسناد هالووین معروف شدهاند، بخشی از این خطرات را عنوان کرده و در عین حال از فعالیتهای مایکروسافت علیه لینوکس پرده برمیدارد. مایکروسافت نیز ضمن این که به صحت این اسناد اعتراف کرد، آنها را صرفاً تحقیقات مهندسی دانست.
دیگر فعالیتها
در آوریل ۲۰۰۰ حکم پرونده ایالات متحده و مایکروسافت صادر شد. این حکم شرکت را مجبور میکرد که به دو پاره تقسیم شود. البته بخشی از این تصمیم در دادگاه استیناف لغو شد. مایکروسافت که اهداف تجاری و خانگی را توأمان نشانه رفته بود، ویندوز ایکس پی را سال ۲۰۰۱ آماده کرد. مایکروسافت برای رقابت با سونی و نینتندو، با سرمایهگذاری میلیاردی و تولید و پخش ایکس باکس وارد عرصه بازیهای کامپیوتری شد.
تا سال ۲۰۰۵، ایکس باکس در بازار فروش آمریکا در رده دوم پس از پلی استیشن ۲ سونی و قبل از گیم کیوب نینتندو قرار داشت. (در بازار جهانی بعد از هر دو بود.) اما با این وجود، با فروش ۲۲ میلیون دستگاه در مقایسه با فروش بیش از ۱۰۰میلیون دستگاه پلی استیشن ۲، ضرر سنگینی معادل ۴ میلیارد دلار متحمل شدهاست. مایکروسافت در مدت ۳ سال کار ساخت «NET.» مقدماتی و سرور ویندوز ۲۰۰۳ را هم به پایان رساند.
در سال ۲۰۰۴ به دنبال شکایت اتحادیه اروپا، مایکروسافت به پرداخت ۶۱۳ میلیون دلار جریمه محکوم شد و متعهد گردید که توافقات قطعی خود با سایر رقبا را افشا کند. همچنین ملزم شد نسخهای از ویندوز را تهیه و آماده کند که فاقد مدیا پلیر باشد.
ایکس باکس ۳۶۰
در نوامبر ۲۰۰۵، مایکروسافت دومین کنسول بازی خود را با نام ایکس باکس ۳۶۰ به بازار عرضه کرد (لازم به ذکر است اولین نسخه کنسول مایکروسافت XBOX نام داشت). مایکروسافت در زمینه رقابت با کنسولهای بازی تجربیات خوبی بدست آورده بود و این بار کنسولی بسیار کاملتر و بهتر نسبت به اولین کنسول خود به بازار عرضه کرد. ایکس باکس ۳۶۰ در دو مدل با نامهای "Premium" و «Core System» عرضه شد. نسخهٔ «ایکس باکس ۳۶۰ Premium» دارای دسته بیسیم، هارد درایو، ریموت کنترل و هدست میباشد ولی نسخهٔ «Core System» شامل دسته سیمی و بدون هارد درایو و وسایل جانبی میباشد. ایکس باکس ۳۶۰ تقریباً یک سال زودتر از رقیبان خود یعنی پلی استیشن ۳ و نینتندو Wii به بازار عرضه شد. ایکس باکس ۳۶۰ پیشرفتهای زیادی نسبت به کنسول قبلی خود کردهاست و علاوه بر قدرت سختافزاری، دارای طراحی فوقالعاده زیبایی میباشد. ایکس باکس ۳۶۰ فروش بسیار بهتری نسبت به کنسول قبلی مایکروسافت داشت.
وبگاه مایکروسافت
وبگاه مایکروسافت با بیش از ۱۰۰ میلیون بازدید در روز یکی از پرطرفدارترین وبگاهها در اینترنت است. بر طبق اطلاعات وبگاه «الکسا»، وبگاه مایکروسافت در ۱۱ مه ۲۰۰۷ رده سیزدهم را در بین وبگاههای اینترنتی از نظر تعداد بازدیدکننده به خود اختصاص دادهاست.
رایانه
رایانه یا کامپیوتر (به انگلیسی: computer) ماشینی است که از آن برای پردازش اطلاعات استفاده میشود.
نام
در زبان انگلیسی «کامپیوتر» به دستگاه خودکاری میگفتند که محاسبات ریاضی را انجام میداد. بر پایهٔ «واژهنامه ریشهیابی Barnhart Concise» واژهٔ کامپیوتر در سال ۱۶۴۶ به زبان انگلیسی وارد گردید که به معنی «شخصی که محاسبه میکند» بودهاست و سپس از سال ۱۸۹۷ به ماشینهای محاسبه مکانیکی گفته میشد. در هنگام جنگ جهانی دوم «کامپیوتر» به زنان نظامی انگلیسی و آمریکایی که کارشان محاسبه مسیرهای شلیک توپهای بزرگ جنگی به وسیله ابزار مشابهی بود، اشاره میکرد.
البته در اوایل دهه ۵۰ میلادی هنوز اصطلاح ماشین حساب (computing machines) برای معرفی این ماشینها بهکار میرفت. پس از آن عبارت کوتاهتر کامپیوتر (computer) بهجای آن بهکار گرفته شد. ورود این ماشین به ایران در اوائل دهه ۱۳۴۰ بود و در فارسی از آن زمان به آن «کامپیوتر» میگفتند. واژه رایانه در دو دهه اخیر در فارسی رایج شده است.
برابر این واژه در زبانهای دیگر حتماً همان واژه زبان انگلیسی نیست. در زبان فرانسوی واژه "ordinateur"، که به معنی «سازمانده» یا «ماشین مرتبساز» است، بهکار میرود. در اسپانیایی "ordenador" با معنایی مشابه استفاده میشود، همچنین در دیگر کشورهای اسپانیایی زبان computadora بصورت انگلیسیمآبانهای ادا میشود. در پرتغالی واژه computador بهکار میرود که از واژه computar گرفته شده و به معنای «محاسبه کردن» میباشد. در ایتالیایی واژه "calcolatore" که معنای ماشین حساب است بکار میرود که بیشتر روی ویژگی حسابگری منطقی آن تاکید دارد. در سوئدی رایانه "dator" خوانده میشود که از "data" (دادهها) برگرفته شدهاست. به فنلاندی "tietokone" خوانده میشود که به معنی «ماشین اطلاعات» میباشد. اما در زبان ایسلندی توصیف شاعرانهتری بکار میرود، «tölva» که واژهای مرکب است و به معنای «زن پیشگوی شمارشگر» میباشد. در چینی رایانه «dian nao» یا «مغز برقی» خوانده میشود. در انگلیسی واژهها و تعابیر گوناگونی استفاده میشود، بهعنوان مثال دستگاه دادهپرداز («data processing machine»).
معنای واژهٔ فارسی رایانه
واژهٔ رایانه از مصدر رایانیدن ساخته شده که در فارسی میانه به شکلِ rāyēnīdan و به معنای «سنجیدن، سبک و سنگین کردن، مقایسه کردن» یا «مرتّب کردن، نظم بخشیدن و سامان دادن» بودهاست. این مصدر در زبان فارسی میانه یا همان پهلوی کاربرد فراوانی داشته و مشتقهای زیادی نیز از آن گرفته شده بوده است. برایِ مصدر رایانیدن/ رایاندن در فرهنگ واژه دهخدا چنین آمده:
رایاندن
دَ (مص) رهنمائی نمودن به بیرون. هدایت کردن. (ناظم الاطباء).
شکلِ فارسی میانهٔ این واژه rāyēnīdan بوده و اگر میخواسته به فارسی نو برسد به شکل رایانیدن/ رایاندن درمیآمده. (بسنجید با واژهیِ فارسیِ میانهیِ āgāhēnīdan که در فارسیِ نو آگاهانیدن/ آگاهاندن شدهاست).
این واژه از ریشهیِ فرضیِ ایرانیِ باستانِ –radz* است که به معنایِ «مرتّب کردن» بوده. این ریشه بهصورتِ –rad به فارسیِ باستان رسیده و به شکلِ rāy در فارسیِ میانه (پهلوی) بهکار رفته. از این ریشه ستاکهایِ حالِ و واژههایِ زیر در فارسیِ میانه و نو بهکار رفتهاند:
-ā-rādz-a*یِ ایرانیِ باستان> -ā-rāy ِ فارسی میانه که در واژهیِ آرایشِ فارسیِ نو دیده میشود.
-pati-rādz-a*یِ ایرانیِ باستان> -pē-rāy ِ فارسی میانه که در واژهیِ پیرایشِ فارسیِ نو دیده میشود؛ و
-rādz-ta*یِ ایرانیِ باستان> rāst ِ فارسی میانه که در واژهیِ راستِ فارسیِ نو دیده میشود.
این ریشهیِ ایرانی از ریشهیِ هندواروپاییِ -reĝ* به معنایِ «مرتّب کردن و نظم دادن» آمدهاست. از این ریشه در
هندی rāj-a به معنیِ «هدایتکننده، شاه» (یعنی کسی که نظم میدهد)؛
لاتینی rect-us به معنیِ «راست، مستقیم»،
فرانسه di-rect به معنیِ «راست، مستقیم»،
آلمانی richt به معنیِ «راست، مستقیم کردن» و
انگلیسی right به معنیِ «راست، مستقیم، درست»
برجای ماندهاست.
در فارسیِ نو پسوندِ -ـه (= /e/ در فارسی رسمی ایران و /a/ در فارسی رسمی افغانستان و تاجیکستان) را به ستاکِ حالِ فعلها میچسبانند تا نامِ ابزارِ آن فعلها بهدست آید (البته با این فرمول مشتقهای دیگری نیز ساخته میشود، امّا در اینجا تنها نامِ ابزار مدِّ نظر است)؛ برای نمونه از
مالـ- (یعنی ستاکِ حالِ مالیدن) + -ـه، ماله «ابزار مالیدنِ سیمان و گچِ خیس»
گیر- (یعنی ستاکِ حالِ گرفتن) + -ـه، گیره «ابزار گرفتن»
پوشـ- (یعنی ستاکِ حالِ پوشیدن) + -ـه، پوشه «ابزار پوشیدن» (خود را جایِ کاغذهایی بگذارید که پوشه را میپوشند!)
رسانـ- (یعنی ستاکِ حالِ رساندن) + -ـه، رسانه «ابزار رساندنِ اطّلاعات و برنامههایِ دیداری و شنیداری»
حاصل میگردد.
در فارسیِ نو پسوندِ -ـه (= e- یا همان a-) را به ستاکِ حالِ "رایانیدن" یعنی رایانـ- چسباندهاند تا نامِ ابزارِ این فعل ساخته شود؛ یعنی "رایانه" به معنایِ «ابزارِ نظم بخشیدن و سازماندهی (ِ دادهها)» است.
سازندگان این واژه به واژهیِ فرانسویِ این مفهوم، یعنی ordinateurتوجّه داشتهاند که در فرانسه از مصدرِ ordre«ترتیب و نظم دادن و سازمان بخشیدن» ساخته شده. به هرحال، معنادهیِ واژهیِ رایانه برایِ این دستگاه جامعتر و رساتر از کامپیوتر است. یادآور میشود که computerبه معنایِ «حسابگر» یا «مقایسهگر» است، حال آنکه کارِ این دستگاه براستی فراتر از "حساب کردن" است.
تاریخچه
در گذشته دستگاههای مختلف مکانیکی سادهای مثل خطکش محاسبه و چرتکه نیز رایانه خوانده میشدند. در برخی موارد از آنها بهعنوان رایانه قیاسی نام برده میشود. البته لازم به ذکر است که کاربرد واژهٔ رایانه آنالوگ در علوم مختلف بیش از این است که به چرتکه و خطکش محاسبه محدود شود. به طور مثال در علوم الکترونیک، مخابرات و کنترل روشی برای محاسبه مشتق و انتگرال توابع ریاضی و معادلات دیفرانسیل توسط تقویت کنندههای عملیاتی، مقاومت، سلف و خازن متداول است که به مجموعهٔ سیستم مداری «رایانهٔ قیاسی» (آنالوگ) گفته میشود. چرا که برخلاف رایانههای رقمی، اعداد را نه بهصورت اعداد در پایه دو بلکه بهصورت کمیتهای فیزیکی متناظر با آن اعداد نمایش میدهند. چیزی که امروزه از آن بهعنوان «رایانه» یاد میشود در گذشته به عنوان «رایانه رقمی (دیجیتال)» یاد میشد تا آنها را از انواع «رایانه قیاسی» جدا سازند.
به تصریح دانشنامه انگلیسی ویکیپدیا، بدیعالزمان ابوالعز بن اسماعیل بن رزاز جَزَری (درگذشتهٔ ۶۰۲ ق.) یکی از نخستین ماشینهای اتوماتا را که جد رایانههای امروزین است، ساخته بودهاست. این مهندس مکانیک مسلمان از دیاربکر در شرق آناتولی بودهاست. رایانه یکی از دو چیز برجستهای است که بشر در سدهٔ بیستم اختراع کرد. دستگاهی که بلز پاسکال در سال ۱۶۴۲ ساخت اولین تلاش در راه ساخت دستگاههای محاسب خودکار بود. پاسکال آن دستگاه را که پس از چرتکه دومیت ابزار ساخت بشر بود، برای یاری رساندن به پدرش ساخت. پدر وی حسابدار دولتی بود و با کمک این دستگاه میتوانست همه اعدادشش رقمی را با هم جمع و تفریق کند.
لایبنیتز ریاضیدان آلمانی نیز از نخستین کسانی بود که در راه ساختن یک دستگاه خودکار محاسبه کوشش کرد. او در سال ۱۶۷۱ دستگاهی برای محاسبه ساخت که کامل شدن آن تا ۱۹۶۴ به درازا کشید. همزمان در انگلستان ساموئل مورلند در سال ۱۶۷۳ دستگاهی ساخت که جمع و تفریق و ضرب میکرد.
در سدهٔ هجدهم میلادی هم تلاشهای فراوانی برای ساخت دستگاههای محاسب خودکار انجام شد که بیشترشان نافرجام بود. سرانجام در سال ۱۸۷۵ میلادی استیفن بالدوین نخستین دستگاه محاسب را که هر چهار عمل اصلی را انجام میداد، به نام خود ثبت کرد.
از جمله تلاشهای نافرجامی که در این سده صورت گرفت، مربوط به چارلز ببیج ریاضیدان انگلیسی است. وی در آغاز این سده در سال ۱۸۱۰ در اندیشهٔ ساخت دستگاهی بود که بتواند بر روی اعداد بیست و شش رقمی محاسبه انجام دهد. او بیست سال از عمرش را در راه ساخت آن صرف کرد اما در پایان آن را نیمهکاره رها کرد تا ساخت دستگاهی دیگر که خود آن را دستگاه تحلیلی مینامید آغاز کند. او میخواست دستگاهی برنامهپذیر بسازد که همه عملیاتی را که میخواستند دستگاه برروی عددها انجام دهد، قبلا برنامهشان به دستگاه داده شده باشد. قرار بود عددها و درخواست عملیات برروی آنها به یاری کارتهای سوراخدار وارد شوند. بابیچ در سال ۱۸۷۱ مرد و ساخت این دستگاه هم به پایان نرسید.
کارهای بابیچ به فراموشی سپرده شد تا این که در سال ۱۹۴۳ و در بحبوحه جنگ جهانی دوم دولت آمریکا طرحی سری برای ساخت دستگاهی را آغاز کرد که بتواند مکالمات رمزنگاریشدهٔ آلمانیها را رمزبرداری کند. این مسئولیت را شرکت آیبیام و دانشگاه هاروارد به عهده گرفتند که سرانجام به ساخت دستگاهی به نام ASCC در سال ۱۹۴۴ انجامید. این دستگاه پنج تنی که ۱۵ متر درازا و ۲٫۵ متر بلندی داشت، میتوانست تا ۷۲ عدد ۲۴ رقمی را در خود نگاه دارد و با آنها کار کند. دستگاه با نوارهای سوراخدار برنامهریزی میشد و همهٔ بخشهای آن مکانیکی یا الکترومکانیکی بود.
تعریف داده و اطلاعات
داده به آن دسته از ورودیهای خام گفته میشود که برای پردازش به رایانه ارسال میشوند.
به دادههای پردازش شده اطّلاعات میگویند.
رایانهها چگونه کار میکنند؟
از زمان رایانههای اولیه که در سال ۱۹۴۱ ساخته شده بودند تا کنون فناوریهای دیجیتالی رشد نمودهاست، معماری فون نوِیمن یک رایانه را به چهار بخش اصلی توصیف میکند: واحد محاسبه و منطق (Arithmetic and Logic Unit یا ALU)، واحد کنترل یا حافظه، و ابزارهای ورودی و خروجی (که جمعا I/O نامیده میشود). این بخشها توسط اتصالات داخلی سیمی به نام گذرگاه (bus) با یکدیگر در پیوند هستند.
حافظه
در این سامانه، حافظه بصورت متوالی شماره گذاری شده در خانهها است، هرکدام محتوی بخش کوچکی از دادهها میباشند. دادهها ممکن است دستورالعملهایی باشند که به رایانه میگویند که چه کاری را انجام دهد باشد. خانه ممکن است حاوی اطلاعات مورد نیاز یک دستورالعمل باشد. اندازه هر خانه، وتعداد خانهها، در رایانهٔ مختلف متفاوت است، همچنین فناوریهای بکاررفته برای اجرای حافظه نیز از رایانهای به رایانه دیگر در تغییر است (از بازپخشکنندههای الکترومکانیکی تا تیوپها و فنرهای پر شده از جیوه و یا ماتریسهای ثابت مغناطیسی و در آخر ترانزیستورهای واقعی و مدار مجتمعها با میلیونها فیوز نیمه هادی یا MOSFETهایی با عملکردی شبیه ظرفیت خازنی روی یک تراشه تنها).
پردازش
واحد محاسبه و منطق یا ALU دستگاهی است که عملیات پایه مانند چهار عمل اصلی حساب (جمع و تفریق و ضرب و تقسیم)، عملیات منطقی (و، یا، نقیض)، عملیات قیاسی (برای مثال مقایسه دو بایت برای شرط برابری) و دستورات انتصابی برای مقدار دادن به یک متغیر را انجام میدهد. این واحد جائیست که «کار واقعی» در آن صورت میپذیرد.
البته CPUها به دو دسته کلی RISC و CISC تقسیم بندی میشوند. نوع اول پردازشگرهای مبتنی بر اعمال ساده هستند و نوع دوم پردازشگرهای مبتنی بر اعمال پیچیده میباشند. پردازشگرهای مبتنی بر اعمال پیچیده در واحد محاسبه و منطق خود دارای اعمال و دستوراتی بسیار فراتر از چهار عمل اصلی یا منطقی میباشند. تنوع دستورات این دسته از پردازندهها تا حدی است که توضیحات آنها خود میتواند یک کتاب با قطر متوسط ایجاد کند. پردازندههای مبتنی بر اعمال ساده اعمال بسیار کمی را پوشش میدهند و در حقیقت برای برنامهنویسی برای این پردازندهها بار نسبتاً سنگینی بر دوش برنامهنویس است. این پردازندهها تنها حاوی ۴ عمل اصلی و اعمال منطقی ریاضی و مقایسهای به علاوه چند دستور بیاهمیت دیگر میباشند. هرچند ذکر این نکته ضروری است که دستورات پیچیده نیز از ترکیب تعدادی دستور ساده تشکیل شدهاند و برای پیادهسازی این دستورات در معماریهای مختلف از پیادهسازی سختافزاری (معماری CISC) و پیادهسازی نرمافزاری (معماری RISC) استفاده میشود.
(قابل ذکر است پردازندههای اینتل از نوع پردازنده مبتنی بر اعمال پیچیده میباشند.)
واحد کنترل همچنین این مطلب را که کدامین بایت از حافظه حاوی دستورالعمل فعلی اجرا شوندهاست را تعقیب میکند، سپس به واحد محاسبه و منطق اعلام میکند که کدام عمل اجرا و از حافظه دریافت شود و نتایج به بخش اختصاص داده شده از حافظه ارسال گردد. بعد از یک بار عمل، واحد کنترل به دستورالعمل بعدی ارجاع میکند (که معمولاً در خانه حافظه بعدی قرار دارد، مگر اینکه دستورالعمل جهش دستورالعمل بعدی باشد که به رایانه اعلام میکند دستورالعمل بعدی در خانه دیگر قرار گرفتهاست).
ورودی/خروجی
بخش ورودی/خروجی (I/O) این امکان را به رایانه میدهد تا اطلاعات را از جهان بیرون تهیه و نتایج آنها را به همان جا برگرداند. محدوده فوق العاده وسیعی از دستگاههای ورودی/خروجی وجود دارد، از خانواده آشنای صفحهکلیدها، نمایشگرها، نَرمدیسک گرفته تا دستگاههای کمی غریب مانند رایابینها (webcams). (از سایر ورودی/خروجیها میتوان موشواره mouse، قلم نوری، چاپگرها (printer)، اسکنرها، انواع لوحهای فشرده(CD, DVD) را نام برد).
چیزی که تمامی دستگاههای عمومی در آن اشتراک دارند این است که آنها رمزکننده اطلاعات از نوعی به نوع دیگر که بتواند مورد استفاده سیستمهای رایانه دیجیتالی قرار گیرد، هستند. از سوی دیگر، دستگاههای خروجی آن اطلاعات به رمز شده را رمزگشایی میکنند تا کاربران آنها را دریافت نمایند. از این رو یک سیستم رایانه دیجیتالی یک نمونه از یک سامانه دادهپردازی میباشد.
دستورالعملها
هر رایانه تنها دارای یک مجموعه کم تعداد از دستورالعملهای ساده و تعریف شده میباشد. از انواع پرکاربردشان میتوان به دستورالعمل «محتوای خانه ۱۲۳ را در خانه ۴۵۶ کپی کن!»، «محتوای خانه ۶۶۶ را با محتوای خانه ۰۴۲ جمع کن، نتایج را در خانه ۰۱۳ کن!»، «اگر محتوای خانه ۹۹۹ برابر با صفر است، به دستورالعمل واقع در خانه ۳۴۵ رجوع کن!».
دستورالعملها در داخل رایانه بصورت اعداد مشخص شدهاند - مثلاً کد دستور العمل (copy instruction) برابر ۰۰۱ میتواند باشد. مجموعه معین دستورالعملهای تعریف شده که توسط یک رایانه ویژه پشتیبانی میشود را زبان ماشین مینامند. در واقعیت، اشخاص معمولاً به زبان ماشین دستورالعمل نمینویسند بلکه بیشتر به نوعی از انواع سطح بالای زبانهای برنامهنویسی، برنامهنویسی میکنند تا سپس توسط برنامه ویژهای (تفسیرگرها (interpreters) یا همگردانها (compilers) به دستورالعمل ویژه ماشین تبدیل گردد. برخی زبانهای برنامهنویسی از نوع بسیار شبیه و نزدیک به زبان ماشین که اسمبلر (یک زبان سطح پایین) نامیده میشود، استفاده میکنند؛ همچنین زبانهای سطح بالای دیگری نیز مانند پرولوگ نیز از یک زبان انتزاعی و چکیده که با زبان ماشین تفاوت دارد بجای دستورالعملهای ویژه ماشین استفاده میکنند.
معماریها
در رایانههای معاصر واحد محاسبه و منطق را به همراه واحد کنترل در یک مدار مجتمع که واحد پردازشی مرکزی (CPU) نامیده میشود، جمع نمودهاند. عموما، حافظه رایانه روی یک مدار مجتمع کوچک نزدیک CPU قرار گرفته. اکثریت قاطع بخشهای رایانه تشکیل شدهاند از سامانههای فرعی (به عنوان نمونه، منبع تغذیه رایانه) و یا دستگاههای ورودی/خروجی.
برخی رایانههای بزرگتر چندین CPU و واحد کنترل دارند که بصورت همزمان با یکدیگر درحال کارند. اینگونه رایانهها بیشتر برای کاربردهای پژوهشی و محاسبات علمی بکار میروند.
کارایی رایانهها بنا به تئوری کاملاً درست است. رایانه دادهها و دستورالعملها را از حافظهاش واکشی (fetch) میکند. دستورالعملها اجرا میشوند، نتایج ذخیره میشوند، دستورالعمل بعدی واکشی میشود. این رویه تا زمانی که رایانه خاموش شود ادامه پیدا میکند. واحد پردازنده مرکزی در رایانههای شخصی امروزی مانند پردازندههای شرکت ای-ام-دی و شرکت اینتل از معماری موسوم به خط لوله استفاده میشود و در زمانی که پردازنده در حال ذخیره نتیجه یک دستور است مرحله اجرای دستور قبلی و مرحله واکشی دستور قبل از آن را آغاز میکند. همچنین این رایانهها از سطوح مختلف حافظه نهانگاهی استفاده میکنند که در زمان دسترسی به حافظه اصلی صرفهجویی کنند.
برنامهها
برنامه رایانهای فهرستهای بزرگی از دستورالعملها (احتمالاً به همراه جدولهائی از داده) برای اجرا روی رایانه هستند. خیلی از رایانهها حاوی میلیونها دستورالعمل هستند، و بسیاری از این دستورها به تکرار اجرا میشوند. یک رایانه شخصی نوین نوعی (درسال ۲۰۰۳) میتواند در ثانیه میان ۲ تا ۳ میلیارد دستورالعمل را پیاده نماید. رایانهها این مقدار محاسبه را صرف انجام دستورالعملهای پیچیده نمیکنند. بیشتر میلیونها دستورالعمل ساده را که توسط اشخاص باهوشی «برنامه نویسان» در کنار یکدیگر چیده شدهاند را اجرا میکنند. برنامهنویسان خوب مجموعههایی از دستورالعملها را توسعه میدهند تا یکسری از وظایف عمومی را انجام دهند (برای نمونه، رسم یک نقطه روی صفحه) و سپس آن مجموعه دستورالعملها را برای دیگر برنامهنویسان در دسترس قرار میدهند. (اگر مایلید «یک برنامهنویس خوب» باشید به این مطلب مراجعه نمایید.)
رایانههای امروزه، قادرند چندین برنامه را در آن واحد اجرا نمایند. از این قابلیت به عنوان چندکارگی (multitasking) نام برده میشود. در واقع، CPU یک رشته دستورالعملها را از یک برنامه اجرا میکند، سپس پس از یک مقطع ویژه زمانی دستورالعملهایی از یک برنامه دیگر را اجرا میکند. این فاصله زمانی اکثرا بهعنوان یک برش زمانی (time slice) نام برده میشود. این ویژگی که CPU زمان اجرا را بین برنامهها تقسیم میکند، این توهم را بوجود میآورد که رایانه همزمان مشغول اجرای چند برنامهاست. این شبیه به چگونگی نمایش فریمهای یک فیلم است، که فریمها با سرعت بالا در حال حرکت هستند و به نظر میرسد که صفحه ثابتی تصاویر را نمایش میدهد. سیستمعامل همان برنامهای است که این اشتراک زمانی را بین برنامههای دیگر تعیین میکند.
سیستمعامل
کامپیوتر همیشه نیاز دارد تا برای بکار انداختنش حداقل یک برنامه روی آن در حال اجرا باشد. تحت عملکردهای عادی این برنامه همان سیستمعامل یا OS که مخفف واژههای Operating System است. سیستم یا سامانه عامل بر اساس پیشفرضها تصمیم میگیرد که کدام برنامه برای انجام چه وظیفهای اجرا شود، چه زمان، از کدام منابع (مثل حافظه، ورودی/خروجی و...) استفاده شود. همچنین سیستمعامل یک لایه انتزاعی بین سختافزار و برنامههای دیگر که میخواهند از سختافزار استفاده کنند، میباشد، که این امکان را به برنامه نویسان میدهد تا بدون اینکه جزئیات ریز هر قطعه الکترونیکی از سختافزار را بدانند بتوانند برای آن قطعه برنامهنویسی نمایند. در گذشته یک اصطلاح متداول بود که گفته میشد با تمام این وجود کامپیوترها نمیتوانند برخی از مسائل را حل کنند که به این مسائل حل نشدنی گفته میشود مانند مسائلی که در مسیر حلشان در حلقه بینهایت میافتند. به همین دلیل نیاز است که با کمک روشهای خاص بطور مثال به چند بخش تقسیم نمودن مساله یا روشهای متداول دیگر از رخ دادن این خطا تا حد امکان جلوگیری نمود. از جمله سیستم عاملهای امروزی میتوان به مایروسافت ویندوز، مکینتاش اپل و لینوکس و بی اس دی اشاره کرد.
روشهای جهتیابی در روز
جهتیابی به کمک موقعیت خورشید در آسمان
۱- خورشید صبح تقریباً از سمت شرق طلوع میکند، و شب تقریباً در سمت غرب غروب میکند.
این مطلب فقط در اول بهار و پاییز صحیح است؛ یعنی در اولین روز بهار و پاییز خورشید دقیقاً از شرق طلوع و در غرب غروب میکند، ولی در زمانهای دیگر، محل طلوع و غروب خورشید نسبت به مشرق و مغرب مقداری انحراف دارد.

در تابستان طلوع و غروب خورشید شمالیتر از شرق و غرب است، و در زمستان جنوبیتر از شرق و غرب میباشد. در اول تابستان و زمستان، محل طلوع و غروب خورشید حداقل حدود ۲۳٫۵ درجه با محل دقیق شرق و غرب فاصله دارد، که این خطا به هیچ وجه قابل چشم پوشی نیست. در واقع از آنجا که موقعیت دقیق خورشید با توجه به فصل و عرض جغرافیایی متغیر است، این روش نسبتاً غیردقیق است.
۲- در نیمکرهٔ شمالی زمین، در زمان ظهر شرعی خورشید همیشه دقیقاً در جهت جنوب است و سایهٔ اجسام رو به شمال میافتد.
ظهر شرعی یا ظهر نجومی، دقیقاً هنگامی است که خورشید به بالاترین نقطه خود در آسمان میرسد. در این زمان، سایهٔ شاخص به حداقل خود در روز میرسد، و پس از آن دوباره افزایش مییابد؛ همان زمان اذان ظهر.
برای دانستن زمان ظهر شرعی میتوان به روزنامهها مراجعه کرد یا منتظر صدای اذان ظهر شد. ظهر شرعی حدوداً نیمه بین طلوع آفتاب و غروب آفتاب است.
۳- حرکت خورشید از شرق به غرب است؛ و این هم میتواند روشی برای یافتن جهتهای جغرافیایی باشد.
جهتیابی با سایهٔ چوب(شاخص)
شاخص، چوب یا میلهای صاف و راست است (مثلاً شاخه نسبتاً صافی از یک درخت به طول مثلاً یک متر) که به طور عمودی در زمینی مسطح و هموار و افقی(تراز و میزان) فرو شدهاست.
روش اول: نوک(انتهای) سایهٔ شاخص روی زمین را [مثلاً با یک سنگ] علامتگذاری میکنیم. مدتی (مثلاً ده-بیست دقیقه بعد، یا بیشتر) صبر میکنیم تا نوک سایه چند سانتیمتر جابهجا شود. حال محل جدید سایهٔ شاخص (که تغییر مکان دادهاست) را علامتگذاری مینماییم. حال اگر این دو نقطه را با خطی به هم وصل کنیم، جهت شرق-غرب را مشخص میکند. نقطهٔ علامتگذاری اول سمت غرب، و نقطهٔ دوم سمت شرق را نشان میدهد. یعنی اگر طوری بایستیم که پای چپمان را روی نقطهٔ اول و پای راستمان را روی نقطهٔ دوم بگذاریم، روبرویمان شمال را نشان میدهد، و رو به خورشید (پشت سرمان) جنوب است.
از آنجا که جهت ظاهری حرکت خورشید در آسمان از شرق به غرب است، جهت حرکت سایهٔ خورشید بر روی زمین از غرب به شرق خواهد بود. یعنی در نیمکره شمالی سایهها ساعتگرد میچرخند.
هر چه از استوا دورتر بشویم، از دقت پاسخ در این روش کاسته میشود. یعنی در مناطق قطبی (عرض جغرافیایی بالاتر از ۶۰ درجه) استفاده از آن توصیه نمیشود.
در شبهای مهتابی هم از این روش میتوان استفاده کرد: به جای خورشید از ماه استفاده کنید.
روش دوم(دقیقتر): محل سایهٔ شاخص را زمانی پیش از ظهر علامت گذاری میکنیم. دایره یا کمانی به مرکز محل شاخص و به شعاع محل علامتگذاری شده میکشیم. سایه به تدریج که به سمت شرق میرود کوتاهتر میشود، در ظهر به کوتاهترین اندازهاش میرسد، و بعداز ظهر به تدریج بلندتر میگردد. هر گاه بعد از ظهر سایهٔ شاخص از روی کمان گذشت (یعنی سایهٔ شاخص هماندازهٔ پیش از ظهرش شد) آنجا را به عنوان نقطهٔ دوم علامتگذاری میکنیم. مانند روش پیشین، این نقطه سمت شرق و نقطهٔ پیشین سمت غرب را نشان میدهد.
در واقع هر دو نقطه سایهٔ همفاصله از شاخص، امتداد شرق-غرب را مشخص میکنند.
با اینکه روش پیشین نسبتاً دقیق است، این روش دقیقتر است؛ البته وقت بیشتری برای آن لازم است.
برای کشیدن کمان مثلاً طنابی(مانند بند کفش، نخ دندان) را انتخاب کنید. یک طرف طناب را به شاخص ببندید، و طرف دیگرش را به یک جسم تیز؛ به شکلی که وقتی طناب را میکشید دقیقاً به محل علامتگذاری شده برسد. نیمدایرهای روی زمین با جسم تیز رسم کنید.
وقتی سایهٔ شاخص به حداقل اندازهٔ خود میرسد(در ظهر شرعی)، این سایه سمت جنوب را نشان میدهد (بالای ۲۳٫۵ درجه).
جهتیابی با ساعت عقربهدار
ساعت مچی معمولی (آنالوگ، عقربهای) را به حالت افقی طوری در کف دست نگه میداریم که عقربهٔ ساعتشمار به سمت خورشید اشاره کند. در این حالت، نیمسازِ زاویهای که عقربهٔ ساعتشمار با عدد ۱۲ ساعت میسازد (زاویهٔ کوچکتر، نه بزرگتر)، جهت جنوب را نشان میدهد. یعنی مثلاً اگر چوبکبریتی را [به طور افقی] در نیمهٔ راه میان عقربهٔ ساعتشمار و عدد ۱۲ ساعت قرار دهید، به طور شمالی-جنوبی قرار گرفتهاست.
نکات
این که گفته شد عقربهٔ کوچک ساعت به سمت خورشید اشاره کند، یعنی اینکه اگر شاخصی [مثلاً چوبکبریت] ای که در مرکز ساعت قرار دهیم، سایهاش موازی با عقربهٔ ساعتشمار و در جهت مقابل آن باشد. یا اینکه سایهٔ عقربهٔ ساعتشمار درست در زیر خود عقربه قرار گیرد. یا مثلاً اگر چوبی ده-پانزده سانتیمتری را در زمین بهطور عمودی قرار دهیم، ساعت روی زمین به شکلی قرار گرفته باشد که عقربهٔ ساعتشمارش موازی با سایهٔ چوب باشد.
دلیل اینکه زاویه بین عقربهٔ ساعتشمار و ۱۲ را نصف میکنیم این است که: وقتی خوشید یک بار دور زمین میچرخد، ساعت ما دو دور میچرخد(دو تا ۱۲ ساعت). یعنی گرچه روز ۲۴ ساعت است (و یک دور کامل را در ۲۴ ساعت طی میکند)، ساعتهای ما یک دور کامل را در ۱۲ ساعت طی مینماید. اگر ساعت ۲۴ ساعتهای میداشتید، که دور آن به ۲۴ قسمت مساوی تقسیم شده بود، هر گاه عقربهٔ ساعتشمار را رو به خورشید میگرفتید عدد ۱۲ ساعت همیشه جهت جنوب را نشان میداد.
این روش وقتی سمت صحیح را نشان میدهد، که ساعت مورد نظر درست تنظیم شده باشد. یعنی اگر در بهار و تابستان ساعتها را نسبت به ساعت استاندارد یکساعت جلو میبرند، ما باید آن را تصحیح کنیم(ابتدا ساعتمان را یک ساعت عقب ببریم سپس روش را اِعمال کنیم؛ یا نیمساز عقربهٔ ساعتشمار را [به جای ۱۲] با ۱ حساب کنید). همچنین در همهٔ سطح یک کشور معمولاً ساعت یکسانی وجود دارد، که مثلاً در ایران حدود یک ساعت متغیر است (ایران تقریباً بین دو نصفالنهار قرار دارد؛ لذا ظهر شرعی در شرق و غرب ایران حدوداً یک ساعت فاصله دارد.) ساعت صحیح هر مکان همان ساعتی است که هنگام ظهر شرعی در آن در طول سال، اطراف ساعت ۱۲ ظهر است. در واقع برای تعیین دقیق جهتهای جغرافیایی ساعت باید طوری تنظیم باشد که هنگام ظهر شرعی ساعت ۱۲ را نشان دهد.
روش ساعت مچی تا ۲۴ درجه امکان خطا دارد. برای دقت بیشتر باید از آن در عرض جغرافیایی بین ۴۰ و ۶۰ درجه [شمالی یا جنوبی] استفاده شود؛ هر چند در عرض جغرافیایی ۲۳٫۵ تا ۶۶٫۵ درجه [شمالی یا جنوبی] نتیجهاش قابل قبول است.(البته در نیمکردهٔ جنوبی جهت شمال و جنوب برعکس است.) در واقع هر چه به استوا نزدیکتر شویم، از دقت این روش کاسته میشود. ضمناً هر چه زمان به کار بردن این روش به ظهر شرعی نزدیکتر باشد، نتیجهٔ آن دقیقتر خواهد بود.
اگر مطمئن نیستید کدام طرف شمال است و کدام طرف جنوب، به یاد بیاورید که خورشید از شرق بر میخیزد، در غرب مینشیند، و در ظهر سمت جنوب است.
توجه کنید که اگر این روش را در هنگام ظهر شرعی (یعنی ساعت ۱۲) اجرا کنیم، جهت عقربه ساعتشمار خود به سوی جنوب است. یعنی مانند همان روش «جهتیابی با سمت خورشید»، که گفتیم خورشید در ظهر شرعی به سمت جنوب است.
اگر از ساعت دیجیتال استفاده میکنید، میتوانید ساعت عقربهداری را روی یک کاغذ یا روی زمین بکشید (دور دایرهای از ۱ تا ۱۲ بنویسید، و عقربهٔ ساعتشمار را هم بکشید)، و سپس از روش بالا استفاده کنید.
حتی وقتی هوا آفتابی نیست و خورشید به راحتی دیده نمیشود هم گاه سایهٔ خوشید را میتوان دید. اگر یک چوبکبریت را عمود نگه دارید، سایهٔ آن برعکس جهت خورشید میافتد.
روشهای جهتیابی در شب
جهتیابی با ستارهٔ قطبی
از آنجا که ستارهها به محور ستاره قطبی در آسمان میچرخند، در نیمکرهٔ شمالی زمین ستارهٔ قطبی با تقریب بسیار خوبی (حدود ۰٫۷ درجه خطا) جهت شمال جغرافیایی (و نه شمال مغناطیسی) را نشان میدهد؛ یعنی اگر رو به آن بایستیم، رو به شمال خواهیم بود.
برای یافتن ستارهٔ قطبی روشهای مختلفی وجود دارد:
به وسیلهٔ مجموعه ستارگان «دبّ اکبر»: صورت فلکی دبّ اکبر شامل هفت ستارهاست که به شکل ملاقه قرار گرفتهاند: چهار ستاره آن تشکیل یک ذوزنقه را میدهند، و سه ستارهٔ دیگر مانند یک دنباله در ادامه ذوزنقه قرار گرفتهاند. هر گاه دو ستارهای که لبهٔ بیرونی ملاقه را تشکیل میدهند (دو ستارهٔ قاعده کوچک ذوزنقه؛ لبهٔ پیالهٔ ملاقه؛ محلی که آب از آنجا میریزد) را [با خطی فرضی] به هم وصل کنیم، و پنج برابر فاصله میان دو ستاره، به سمت جلو ادامه دهیم، به ستاره قطبی میرسیم.
به وسیلهٔ مجموعه ستارههای «ذاتالکرسی»: صورت فلکی ذاتالکرسی شامل پنج ستارهاست که به شکل W یا M قرار گرفتهاند. هرگاه (مطابق شکل) ستارهٔ وسط W (رأس زاویهٔ وسطی) را حدود پنج برابرِِ «فاصلهٔ آن نسبت به ستارههای اطراف» به سوی جلو ادامه دهیم، به ستارهٔ قطبی میرسیم.
نکات
صورتهای فلکی ذاتالکرسی و دبّ اکبر نسبت به ستارهٔ قطبی تقریباً روبهروی یکدیگر، و دور ستاره قطبی خلاف جهت عقربههای ساعت میچرخند. اگر یکی از آنها پشت کوه پنهان بود، با دیگری میتوان ستارهٔ قطبی را یافت. فاصلهٔ هر کدام از این دو صورت فلکی تا ستارهٔ قطبی تقریباً برابر است.
اگر برای یافتن ستارهها در آسمان از نقشه ستارهیاب (افلاکنما) استفاده میکنید، بهخاطر داشته باشید که ستارهیابها موقعیت ستارهها را در زمان، تاریخ و موقعیت جغرافیایی (طول و عرض جغرافیایی) خاصی نشان میدهند.
هر چه از استوا به سوی قطب شمال برویم، ستارهٔ قطبی در آسمان بالاتر (در ارتفاع بیشتر) دیده میشود. یعنی ستارهٔ قطبی در استوا (عرض جغرافیایی صفر درجه) تقریباً در افق دیده میشود، و در قطب شمال(عرض جغرافیایی ۹۰ درجه) تقریباً بالای سر (سرسو، سمتالرّأس، رأسالقدم) دیده میشود. بالاتر از عرض جغرافیایی ۷۰ درجه شمالی عملاً نمیتوان با ستارهٔ قطبی شمال را پیدا کرد.
جهتیابی با هلال ماه
اگر به دلیل وجود ابر یا درختان نمیتوانید ستارهها را ببینید، میتوانید از ماه برای جهتیابی استفاده کنید.
ماه به شکل هلال باریکی تولد مییابد، و در نیمههای ماه قمری به قرص کامل تبدیل میشود، و سپس در جهت مقابل هلالی میشود. در نیمهٔ اول ماههای قمری قسمت خارجی ماه (تحدب و کوژی ماه، برآمدگی و برجستگی ماه) مانند پیکانی جهت غرب را نشان میدهد. در نیمهٔ دوم ماههای قمری، تحدب ماه به سمت مشرق است.
اگر خطی از بالای هلال به پایین آن وصل کنیم و ادامه دهیم، در نیمهٔ اول ماه قمری شکل p و در نیمهٔ دوم شکل q خواهد داشت.
کره ماه در نیمهٔ اول ماههای قمری پیش از غروب آفتاب طلوع میکند، و در نیمهٔ دوم پس از غروب، تا پایان ماه که پس از نیمهشب طلوع مینماید.
پیدا کردن جنوب توسط ماه: اگر خطی فرضی میان دو نوک تیز هلال ماه رسم کرده و آن را تا زمین ادامه دهید، تقاطع امتداد این خط با افق، نقطه جنوب را [در نیمکرهٔ شمالی زمین] نشان میدهد.
این روش جهتیابی چندان دقیق نیست، ولی حداقل راهنمایی تقریبی را فراهم میسازد. در زمان قرص کامل نمیتوان از این روش استفاده کرد. وقتی ماه به صورت قرص کامل است، میتوان به کمک حرکت ظاهری ماه (که از مشرق به طرف مغرب است) جهتیابی کرد.
روشهای دیگر جهتیابی در شب
حرکت ظاهری ماه در آسمان از شرق به غرب است.
خوشه پروین: دستهای (حدود ده تا پانزده) ستاره، به شکل خوشه انگور، در یک جا مجتمع هستند که به آن مجموعه خوشه پروین میگویند. این ستارگان مانند خورشید از شرق به طرف غرب در حرکتند، ولی در همه حال دُمِ آنها به طرف مشرق است.
ستارگان بادبادکی: حدود هفت -هشت ستاره در آسمان وجود دارد که به شکل بادبادک یا علامت سوال میباشند. این ستارگان نیز از شرق به غرب حرکت میکنند، و در همه حال دنباله بادبادکی آنها بهطرف جنوب است.
کهکشان راه شیری تودهٔ عظیمی از انبوه ستارگان است که تقریباً از شمال شرقی به جنوب غربی امتداد یافتهاست. در شمال شرقی این راه باریک است، و هر چه به سمت جنوب غربی میرود، پهنتر میشود. هر چه به آخر شب نزدیکتر میشویم، قسمت پهن راه شیری به طرف مغرب منحرف میشود.
روشهای جهتیابی، قابل استفاده در روز و شب
جهتیابی با قبله
اگر جهت قبله و میزان انحراف آن از جنوب (یا دیگر جهتهای اصلی) را بدانیم، میتوانیم شمال را تشخیص دهیم. مثلاً اگر در تهران ۳۷ درجه از جنوب سمت به غرب متمایل شویم (یعنی حدوداً جنوب غربی)، به طرف قبله ایستادهایم. پس هرگاه در تهران جهت قبله را بدانیم، اگر ۳۷ درجه از سمت قبله در جهت عکس عقربههای ساعت بچرخیم، به طرف جنوب ایستادهایم، و اگر ۱۴۳ درجه (۳۷-۱۸۰) در جهت عقربههای ساعت بچرخیم، به طرف شمال ایستادهایم.
قبله را از راههای مختلفی میتوان یافت:
قبلهنما: دقیقترین روش تعیین قبله، بهوسیلهٔ قبلهنماست، که آن هم با یک قطبنما انجام میگیرد؛ و اگر ما قطبنما داشته باشیم، با آن قطب را مشخص میکنیم!
محراب مسجد: محراب مساجد به طرف قبلهاست. در نمازخانهها هم معمولاً جهت قبله مشخص شدهاست.
قبرستان: مرده را در قبر روی دست راست، به سمت قبله میخوابانند. پس اگر شما طوری ایستاده باشید که نوشتههای سنگ قبر را به درستی میخوانید، سمت چپتان قبلهاست.
دستشویی: از آنجا که قضای حاجت رو به قبله نباید باشد، معمولاً توالتها را عمود بر قبله میسازند.
جهتیابی با قطبنمای دستساز
اگر قطبنمایی به همراه نداشتید، ولی اتفاقاً یک سوزن یا میخ کوچک در جیبتان یافتید، این روش کمککار شما در ساخت یک قطبنما خواهد بود. البته احتمال استفاده از آن در شرایط واقعی کم است، ولی انجام آن کاری سرگرمکنندهاست.
با مالش دادن یک سوزن فقط در یک جهت به آهنربا -یا حتی احتمالاً چاقوی خودتان-، یا مالیدن آن فقط در یک جهت به پارچهٔ ابریشمی یا پنبهای، سوزنْ مغناطیسی یا قطبی میشود؛ مانند سوزن قطبنما. (مثلاً با ۳۰ بار مالش دادن سوزن به آهنربا از طرف خودتان به سمت بیرون، سوزن به اندازهٔ کافی خاصیت آهنربایی پیدا میکند. همچنین مالش سر سوزن از پایین به بالا بر پارچهٔ ابریشمی باعث میشود که سر سوزن نقطه شمال را نشان دهد). حتی میتوانید آنرا در یک جهت میان موهای سر خود بکشید. توجه کنید که همیشه فقط در یک جهت مالش دهید.
حال اگر آنرا روی یک چوبپنبه یا پوشال کوچک قرار دهید(سوزن را به چوبپنبه چسب بزنید، یا درون آن فرو کنید؛ یا در دو طرف سوزن چوبپنبههایی کوچک فرو کنید)، و روی آب (آب راکد یا ظرفی پر از آب) شناور نمایید، مانند یک قطبنما عمل میکند، و سر سوزن رو به شمال میچرخد. برای اینکه سمت شمال و جنوب سوزن را اشتباه نکنید، این نکته را در نظر بگیرید که -در نیمکرهٔ شمالی زمین- آن سمت قطبنما که تقریباً رو به خورشید و ماه است، سمت جنوب است، زیرا آنها در قسمت جنوبی آسمان قرار دارند. همچنین میتوانید سوزن را با یک آهنربا امتحان کنید، و سپس سمت شمال را با علامتی روی آن مشخص نمایید.
روش دیگر ساخت آهنربا این است که یک میله یا سوزن آهنی یا فولادی را در جهت میدان مغناطیسی زمین تراز کنیم، و سپس آنرا حرارت داده یا بر آن ضربه وارد کنیم. حال اگر این آهنربا را روی سطحی با اصطکاک کم قرار دهیم (روی یک تکه چوب کوچک در آب شناور سازید، یا مثلاً سوزن را با یک ریسمان غیرفلزی آویزان(معلق) نمایید) قطبنمای ما کار میکند؛ یعنی میله آنقدر میچرخد تا در راستای میدان مغناطیسی زمین (شمالی-جنوبی) قرار گیرد.
مغناطیسی کردن سوزن با باتری: اگر سیمی را دور سوزن بپیچانید و برای چند دقیقه سر سیم را به ته باتری وصل کنید، سوزن مغناطیسی میشود.
به دلیل کشش سطحی آب، میتوان سوزن را به تنهایی روی سطح آن شناور کرد. مثلاً میتوان سوزن را روی کاغذی گذاشت، و کاغذ را روی آب گذاشت. اگر کاغذ روی آب بماند که بهتر، و اگر کاغذ در آب فرو برود احتمالاً سوزن روی آب باقی میماند. اگر سوزن را با گریس یا روغنی غیرقابلحل در آب چرب کنید (مثلاً با مالش سوزن به موهای خود سوزن را چرب نمایید)، کار آسانتر خواهد شد. چرب بودن سوزن سبب میشود که سوزن روی سطح آب شناور بماند.
جهتیابی به کمک موقعیت خورشید در آسمان
۱- خورشید صبح تقریباً از سمت شرق طلوع میکند، و شب تقریباً در سمت غرب غروب میکند.
این مطلب فقط در اول بهار و پاییز صحیح است؛ یعنی در اولین روز بهار و پاییز خورشید دقیقاً از شرق طلوع و در غرب غروب میکند، ولی در زمانهای دیگر، محل طلوع و غروب خورشید نسبت به مشرق و مغرب مقداری انحراف دارد.

در تابستان طلوع و غروب خورشید شمالیتر از شرق و غرب است، و در زمستان جنوبیتر از شرق و غرب میباشد. در اول تابستان و زمستان، محل طلوع و غروب خورشید حداقل حدود ۲۳٫۵ درجه با محل دقیق شرق و غرب فاصله دارد، که این خطا به هیچ وجه قابل چشم پوشی نیست. در واقع از آنجا که موقعیت دقیق خورشید با توجه به فصل و عرض جغرافیایی متغیر است، این روش نسبتاً غیردقیق است.
۲- در نیمکرهٔ شمالی زمین، در زمان ظهر شرعی خورشید همیشه دقیقاً در جهت جنوب است و سایهٔ اجسام رو به شمال میافتد.
ظهر شرعی یا ظهر نجومی، دقیقاً هنگامی است که خورشید به بالاترین نقطه خود در آسمان میرسد. در این زمان، سایهٔ شاخص به حداقل خود در روز میرسد، و پس از آن دوباره افزایش مییابد؛ همان زمان اذان ظهر.
برای دانستن زمان ظهر شرعی میتوان به روزنامهها مراجعه کرد یا منتظر صدای اذان ظهر شد. ظهر شرعی حدوداً نیمه بین طلوع آفتاب و غروب آفتاب است.
۳- حرکت خورشید از شرق به غرب است؛ و این هم میتواند روشی برای یافتن جهتهای جغرافیایی باشد.
جهتیابی با سایهٔ چوب(شاخص)
شاخص، چوب یا میلهای صاف و راست است (مثلاً شاخه نسبتاً صافی از یک درخت به طول مثلاً یک متر) که به طور عمودی در زمینی مسطح و هموار و افقی(تراز و میزان) فرو شدهاست.
روش اول: نوک(انتهای) سایهٔ شاخص روی زمین را [مثلاً با یک سنگ] علامتگذاری میکنیم. مدتی (مثلاً ده-بیست دقیقه بعد، یا بیشتر) صبر میکنیم تا نوک سایه چند سانتیمتر جابهجا شود. حال محل جدید سایهٔ شاخص (که تغییر مکان دادهاست) را علامتگذاری مینماییم. حال اگر این دو نقطه را با خطی به هم وصل کنیم، جهت شرق-غرب را مشخص میکند. نقطهٔ علامتگذاری اول سمت غرب، و نقطهٔ دوم سمت شرق را نشان میدهد. یعنی اگر طوری بایستیم که پای چپمان را روی نقطهٔ اول و پای راستمان را روی نقطهٔ دوم بگذاریم، روبرویمان شمال را نشان میدهد، و رو به خورشید (پشت سرمان) جنوب است.
از آنجا که جهت ظاهری حرکت خورشید در آسمان از شرق به غرب است، جهت حرکت سایهٔ خورشید بر روی زمین از غرب به شرق خواهد بود. یعنی در نیمکره شمالی سایهها ساعتگرد میچرخند.
هر چه از استوا دورتر بشویم، از دقت پاسخ در این روش کاسته میشود. یعنی در مناطق قطبی (عرض جغرافیایی بالاتر از ۶۰ درجه) استفاده از آن توصیه نمیشود.
در شبهای مهتابی هم از این روش میتوان استفاده کرد: به جای خورشید از ماه استفاده کنید.
روش دوم(دقیقتر): محل سایهٔ شاخص را زمانی پیش از ظهر علامت گذاری میکنیم. دایره یا کمانی به مرکز محل شاخص و به شعاع محل علامتگذاری شده میکشیم. سایه به تدریج که به سمت شرق میرود کوتاهتر میشود، در ظهر به کوتاهترین اندازهاش میرسد، و بعداز ظهر به تدریج بلندتر میگردد. هر گاه بعد از ظهر سایهٔ شاخص از روی کمان گذشت (یعنی سایهٔ شاخص هماندازهٔ پیش از ظهرش شد) آنجا را به عنوان نقطهٔ دوم علامتگذاری میکنیم. مانند روش پیشین، این نقطه سمت شرق و نقطهٔ پیشین سمت غرب را نشان میدهد.
در واقع هر دو نقطه سایهٔ همفاصله از شاخص، امتداد شرق-غرب را مشخص میکنند.
با اینکه روش پیشین نسبتاً دقیق است، این روش دقیقتر است؛ البته وقت بیشتری برای آن لازم است.
برای کشیدن کمان مثلاً طنابی(مانند بند کفش، نخ دندان) را انتخاب کنید. یک طرف طناب را به شاخص ببندید، و طرف دیگرش را به یک جسم تیز؛ به شکلی که وقتی طناب را میکشید دقیقاً به محل علامتگذاری شده برسد. نیمدایرهای روی زمین با جسم تیز رسم کنید.
وقتی سایهٔ شاخص به حداقل اندازهٔ خود میرسد(در ظهر شرعی)، این سایه سمت جنوب را نشان میدهد (بالای ۲۳٫۵ درجه).
جهتیابی با ساعت عقربهدار
ساعت مچی معمولی (آنالوگ، عقربهای) را به حالت افقی طوری در کف دست نگه میداریم که عقربهٔ ساعتشمار به سمت خورشید اشاره کند. در این حالت، نیمسازِ زاویهای که عقربهٔ ساعتشمار با عدد ۱۲ ساعت میسازد (زاویهٔ کوچکتر، نه بزرگتر)، جهت جنوب را نشان میدهد. یعنی مثلاً اگر چوبکبریتی را [به طور افقی] در نیمهٔ راه میان عقربهٔ ساعتشمار و عدد ۱۲ ساعت قرار دهید، به طور شمالی-جنوبی قرار گرفتهاست.
نکات
این که گفته شد عقربهٔ کوچک ساعت به سمت خورشید اشاره کند، یعنی اینکه اگر شاخصی [مثلاً چوبکبریت] ای که در مرکز ساعت قرار دهیم، سایهاش موازی با عقربهٔ ساعتشمار و در جهت مقابل آن باشد. یا اینکه سایهٔ عقربهٔ ساعتشمار درست در زیر خود عقربه قرار گیرد. یا مثلاً اگر چوبی ده-پانزده سانتیمتری را در زمین بهطور عمودی قرار دهیم، ساعت روی زمین به شکلی قرار گرفته باشد که عقربهٔ ساعتشمارش موازی با سایهٔ چوب باشد.
دلیل اینکه زاویه بین عقربهٔ ساعتشمار و ۱۲ را نصف میکنیم این است که: وقتی خوشید یک بار دور زمین میچرخد، ساعت ما دو دور میچرخد(دو تا ۱۲ ساعت). یعنی گرچه روز ۲۴ ساعت است (و یک دور کامل را در ۲۴ ساعت طی میکند)، ساعتهای ما یک دور کامل را در ۱۲ ساعت طی مینماید. اگر ساعت ۲۴ ساعتهای میداشتید، که دور آن به ۲۴ قسمت مساوی تقسیم شده بود، هر گاه عقربهٔ ساعتشمار را رو به خورشید میگرفتید عدد ۱۲ ساعت همیشه جهت جنوب را نشان میداد.
این روش وقتی سمت صحیح را نشان میدهد، که ساعت مورد نظر درست تنظیم شده باشد. یعنی اگر در بهار و تابستان ساعتها را نسبت به ساعت استاندارد یکساعت جلو میبرند، ما باید آن را تصحیح کنیم(ابتدا ساعتمان را یک ساعت عقب ببریم سپس روش را اِعمال کنیم؛ یا نیمساز عقربهٔ ساعتشمار را [به جای ۱۲] با ۱ حساب کنید). همچنین در همهٔ سطح یک کشور معمولاً ساعت یکسانی وجود دارد، که مثلاً در ایران حدود یک ساعت متغیر است (ایران تقریباً بین دو نصفالنهار قرار دارد؛ لذا ظهر شرعی در شرق و غرب ایران حدوداً یک ساعت فاصله دارد.) ساعت صحیح هر مکان همان ساعتی است که هنگام ظهر شرعی در آن در طول سال، اطراف ساعت ۱۲ ظهر است. در واقع برای تعیین دقیق جهتهای جغرافیایی ساعت باید طوری تنظیم باشد که هنگام ظهر شرعی ساعت ۱۲ را نشان دهد.
روش ساعت مچی تا ۲۴ درجه امکان خطا دارد. برای دقت بیشتر باید از آن در عرض جغرافیایی بین ۴۰ و ۶۰ درجه [شمالی یا جنوبی] استفاده شود؛ هر چند در عرض جغرافیایی ۲۳٫۵ تا ۶۶٫۵ درجه [شمالی یا جنوبی] نتیجهاش قابل قبول است.(البته در نیمکردهٔ جنوبی جهت شمال و جنوب برعکس است.) در واقع هر چه به استوا نزدیکتر شویم، از دقت این روش کاسته میشود. ضمناً هر چه زمان به کار بردن این روش به ظهر شرعی نزدیکتر باشد، نتیجهٔ آن دقیقتر خواهد بود.
اگر مطمئن نیستید کدام طرف شمال است و کدام طرف جنوب، به یاد بیاورید که خورشید از شرق بر میخیزد، در غرب مینشیند، و در ظهر سمت جنوب است.
توجه کنید که اگر این روش را در هنگام ظهر شرعی (یعنی ساعت ۱۲) اجرا کنیم، جهت عقربه ساعتشمار خود به سوی جنوب است. یعنی مانند همان روش «جهتیابی با سمت خورشید»، که گفتیم خورشید در ظهر شرعی به سمت جنوب است.
اگر از ساعت دیجیتال استفاده میکنید، میتوانید ساعت عقربهداری را روی یک کاغذ یا روی زمین بکشید (دور دایرهای از ۱ تا ۱۲ بنویسید، و عقربهٔ ساعتشمار را هم بکشید)، و سپس از روش بالا استفاده کنید.
حتی وقتی هوا آفتابی نیست و خورشید به راحتی دیده نمیشود هم گاه سایهٔ خوشید را میتوان دید. اگر یک چوبکبریت را عمود نگه دارید، سایهٔ آن برعکس جهت خورشید میافتد.
روشهای جهتیابی در شب
جهتیابی با ستارهٔ قطبی
از آنجا که ستارهها به محور ستاره قطبی در آسمان میچرخند، در نیمکرهٔ شمالی زمین ستارهٔ قطبی با تقریب بسیار خوبی (حدود ۰٫۷ درجه خطا) جهت شمال جغرافیایی (و نه شمال مغناطیسی) را نشان میدهد؛ یعنی اگر رو به آن بایستیم، رو به شمال خواهیم بود.
برای یافتن ستارهٔ قطبی روشهای مختلفی وجود دارد:
به وسیلهٔ مجموعه ستارگان «دبّ اکبر»: صورت فلکی دبّ اکبر شامل هفت ستارهاست که به شکل ملاقه قرار گرفتهاند: چهار ستاره آن تشکیل یک ذوزنقه را میدهند، و سه ستارهٔ دیگر مانند یک دنباله در ادامه ذوزنقه قرار گرفتهاند. هر گاه دو ستارهای که لبهٔ بیرونی ملاقه را تشکیل میدهند (دو ستارهٔ قاعده کوچک ذوزنقه؛ لبهٔ پیالهٔ ملاقه؛ محلی که آب از آنجا میریزد) را [با خطی فرضی] به هم وصل کنیم، و پنج برابر فاصله میان دو ستاره، به سمت جلو ادامه دهیم، به ستاره قطبی میرسیم.
به وسیلهٔ مجموعه ستارههای «ذاتالکرسی»: صورت فلکی ذاتالکرسی شامل پنج ستارهاست که به شکل W یا M قرار گرفتهاند. هرگاه (مطابق شکل) ستارهٔ وسط W (رأس زاویهٔ وسطی) را حدود پنج برابرِِ «فاصلهٔ آن نسبت به ستارههای اطراف» به سوی جلو ادامه دهیم، به ستارهٔ قطبی میرسیم.
نکات
صورتهای فلکی ذاتالکرسی و دبّ اکبر نسبت به ستارهٔ قطبی تقریباً روبهروی یکدیگر، و دور ستاره قطبی خلاف جهت عقربههای ساعت میچرخند. اگر یکی از آنها پشت کوه پنهان بود، با دیگری میتوان ستارهٔ قطبی را یافت. فاصلهٔ هر کدام از این دو صورت فلکی تا ستارهٔ قطبی تقریباً برابر است.
اگر برای یافتن ستارهها در آسمان از نقشه ستارهیاب (افلاکنما) استفاده میکنید، بهخاطر داشته باشید که ستارهیابها موقعیت ستارهها را در زمان، تاریخ و موقعیت جغرافیایی (طول و عرض جغرافیایی) خاصی نشان میدهند.
هر چه از استوا به سوی قطب شمال برویم، ستارهٔ قطبی در آسمان بالاتر (در ارتفاع بیشتر) دیده میشود. یعنی ستارهٔ قطبی در استوا (عرض جغرافیایی صفر درجه) تقریباً در افق دیده میشود، و در قطب شمال(عرض جغرافیایی ۹۰ درجه) تقریباً بالای سر (سرسو، سمتالرّأس، رأسالقدم) دیده میشود. بالاتر از عرض جغرافیایی ۷۰ درجه شمالی عملاً نمیتوان با ستارهٔ قطبی شمال را پیدا کرد.
جهتیابی با هلال ماه
اگر به دلیل وجود ابر یا درختان نمیتوانید ستارهها را ببینید، میتوانید از ماه برای جهتیابی استفاده کنید.
ماه به شکل هلال باریکی تولد مییابد، و در نیمههای ماه قمری به قرص کامل تبدیل میشود، و سپس در جهت مقابل هلالی میشود. در نیمهٔ اول ماههای قمری قسمت خارجی ماه (تحدب و کوژی ماه، برآمدگی و برجستگی ماه) مانند پیکانی جهت غرب را نشان میدهد. در نیمهٔ دوم ماههای قمری، تحدب ماه به سمت مشرق است.
اگر خطی از بالای هلال به پایین آن وصل کنیم و ادامه دهیم، در نیمهٔ اول ماه قمری شکل p و در نیمهٔ دوم شکل q خواهد داشت.
کره ماه در نیمهٔ اول ماههای قمری پیش از غروب آفتاب طلوع میکند، و در نیمهٔ دوم پس از غروب، تا پایان ماه که پس از نیمهشب طلوع مینماید.
پیدا کردن جنوب توسط ماه: اگر خطی فرضی میان دو نوک تیز هلال ماه رسم کرده و آن را تا زمین ادامه دهید، تقاطع امتداد این خط با افق، نقطه جنوب را [در نیمکرهٔ شمالی زمین] نشان میدهد.
این روش جهتیابی چندان دقیق نیست، ولی حداقل راهنمایی تقریبی را فراهم میسازد. در زمان قرص کامل نمیتوان از این روش استفاده کرد. وقتی ماه به صورت قرص کامل است، میتوان به کمک حرکت ظاهری ماه (که از مشرق به طرف مغرب است) جهتیابی کرد.
روشهای دیگر جهتیابی در شب
حرکت ظاهری ماه در آسمان از شرق به غرب است.
خوشه پروین: دستهای (حدود ده تا پانزده) ستاره، به شکل خوشه انگور، در یک جا مجتمع هستند که به آن مجموعه خوشه پروین میگویند. این ستارگان مانند خورشید از شرق به طرف غرب در حرکتند، ولی در همه حال دُمِ آنها به طرف مشرق است.
ستارگان بادبادکی: حدود هفت -هشت ستاره در آسمان وجود دارد که به شکل بادبادک یا علامت سوال میباشند. این ستارگان نیز از شرق به غرب حرکت میکنند، و در همه حال دنباله بادبادکی آنها بهطرف جنوب است.
کهکشان راه شیری تودهٔ عظیمی از انبوه ستارگان است که تقریباً از شمال شرقی به جنوب غربی امتداد یافتهاست. در شمال شرقی این راه باریک است، و هر چه به سمت جنوب غربی میرود، پهنتر میشود. هر چه به آخر شب نزدیکتر میشویم، قسمت پهن راه شیری به طرف مغرب منحرف میشود.
روشهای جهتیابی، قابل استفاده در روز و شب
جهتیابی با قبله
اگر جهت قبله و میزان انحراف آن از جنوب (یا دیگر جهتهای اصلی) را بدانیم، میتوانیم شمال را تشخیص دهیم. مثلاً اگر در تهران ۳۷ درجه از جنوب سمت به غرب متمایل شویم (یعنی حدوداً جنوب غربی)، به طرف قبله ایستادهایم. پس هرگاه در تهران جهت قبله را بدانیم، اگر ۳۷ درجه از سمت قبله در جهت عکس عقربههای ساعت بچرخیم، به طرف جنوب ایستادهایم، و اگر ۱۴۳ درجه (۳۷-۱۸۰) در جهت عقربههای ساعت بچرخیم، به طرف شمال ایستادهایم.
قبله را از راههای مختلفی میتوان یافت:
قبلهنما: دقیقترین روش تعیین قبله، بهوسیلهٔ قبلهنماست، که آن هم با یک قطبنما انجام میگیرد؛ و اگر ما قطبنما داشته باشیم، با آن قطب را مشخص میکنیم!
محراب مسجد: محراب مساجد به طرف قبلهاست. در نمازخانهها هم معمولاً جهت قبله مشخص شدهاست.
قبرستان: مرده را در قبر روی دست راست، به سمت قبله میخوابانند. پس اگر شما طوری ایستاده باشید که نوشتههای سنگ قبر را به درستی میخوانید، سمت چپتان قبلهاست.
دستشویی: از آنجا که قضای حاجت رو به قبله نباید باشد، معمولاً توالتها را عمود بر قبله میسازند.
جهتیابی با قطبنمای دستساز
اگر قطبنمایی به همراه نداشتید، ولی اتفاقاً یک سوزن یا میخ کوچک در جیبتان یافتید، این روش کمککار شما در ساخت یک قطبنما خواهد بود. البته احتمال استفاده از آن در شرایط واقعی کم است، ولی انجام آن کاری سرگرمکنندهاست.
با مالش دادن یک سوزن فقط در یک جهت به آهنربا -یا حتی احتمالاً چاقوی خودتان-، یا مالیدن آن فقط در یک جهت به پارچهٔ ابریشمی یا پنبهای، سوزنْ مغناطیسی یا قطبی میشود؛ مانند سوزن قطبنما. (مثلاً با ۳۰ بار مالش دادن سوزن به آهنربا از طرف خودتان به سمت بیرون، سوزن به اندازهٔ کافی خاصیت آهنربایی پیدا میکند. همچنین مالش سر سوزن از پایین به بالا بر پارچهٔ ابریشمی باعث میشود که سر سوزن نقطه شمال را نشان دهد). حتی میتوانید آنرا در یک جهت میان موهای سر خود بکشید. توجه کنید که همیشه فقط در یک جهت مالش دهید.
حال اگر آنرا روی یک چوبپنبه یا پوشال کوچک قرار دهید(سوزن را به چوبپنبه چسب بزنید، یا درون آن فرو کنید؛ یا در دو طرف سوزن چوبپنبههایی کوچک فرو کنید)، و روی آب (آب راکد یا ظرفی پر از آب) شناور نمایید، مانند یک قطبنما عمل میکند، و سر سوزن رو به شمال میچرخد. برای اینکه سمت شمال و جنوب سوزن را اشتباه نکنید، این نکته را در نظر بگیرید که -در نیمکرهٔ شمالی زمین- آن سمت قطبنما که تقریباً رو به خورشید و ماه است، سمت جنوب است، زیرا آنها در قسمت جنوبی آسمان قرار دارند. همچنین میتوانید سوزن را با یک آهنربا امتحان کنید، و سپس سمت شمال را با علامتی روی آن مشخص نمایید.
روش دیگر ساخت آهنربا این است که یک میله یا سوزن آهنی یا فولادی را در جهت میدان مغناطیسی زمین تراز کنیم، و سپس آنرا حرارت داده یا بر آن ضربه وارد کنیم. حال اگر این آهنربا را روی سطحی با اصطکاک کم قرار دهیم (روی یک تکه چوب کوچک در آب شناور سازید، یا مثلاً سوزن را با یک ریسمان غیرفلزی آویزان(معلق) نمایید) قطبنمای ما کار میکند؛ یعنی میله آنقدر میچرخد تا در راستای میدان مغناطیسی زمین (شمالی-جنوبی) قرار گیرد.
مغناطیسی کردن سوزن با باتری: اگر سیمی را دور سوزن بپیچانید و برای چند دقیقه سر سیم را به ته باتری وصل کنید، سوزن مغناطیسی میشود.
به دلیل کشش سطحی آب، میتوان سوزن را به تنهایی روی سطح آن شناور کرد. مثلاً میتوان سوزن را روی کاغذی گذاشت، و کاغذ را روی آب گذاشت. اگر کاغذ روی آب بماند که بهتر، و اگر کاغذ در آب فرو برود احتمالاً سوزن روی آب باقی میماند. اگر سوزن را با گریس یا روغنی غیرقابلحل در آب چرب کنید (مثلاً با مالش سوزن به موهای خود سوزن را چرب نمایید)، کار آسانتر خواهد شد. چرب بودن سوزن سبب میشود که سوزن روی سطح آب شناور بماند.