بارگیری و بارگذاری

بارگیری یا دانلود (به انگلیسی: Download)، فرآیند برداشت داده‌های الکترونیکی از یک رایانه (معمولاً یک رایانه دور یا یک سرور) به رایانهٔ دیگر (معمولاً رایانه شما یا یک رایانهٔ محلی)، با مودم یا شبکه رایانه‌ای را گویند. همچنین فرستادن بلوکی از داده‌ها، مانند یک پرونده، با ساختار پست اسکریپت، به دستگاه مستقلی مانند چاپگر پست اسکریپت نیز بارگیری نامیده می‌شود. عمل وارون فرایند فوق را بارگذاری یا آپلود (به انگلیسی: Upload) گویند.






واژه‌های مصوب فرهنگستان برای دانلود و آپلود به ترتیب پایین‌گذاری و بالاگذاری هستند. در زبان اردو به این دو کنش به ترتیب «زیراثقال» و «زِبَراثقال» می‌گویند.






بارگیری

کاربرد نخست این واژه در زمینهٔ رایانه‌ها، از فعل دریافت کردن ریشه گرفته، به معنی گرفتن یک پرونده (یا بارگیری)، از یک رایانه، یک خدمات‌دهندهٔ وب، و یا سامانه‌ای همانند. این واژه در گویش خیابانی و فرهنگ عامیانه، مانند واژهٔ انگلیسی آن، دانلود (Download) گفته می‌شود.






بارگذاری

بارگذاری، یعنی ارسال کردن یک پرونده، از رایانه‌ای به رایانهٔ دیگر. این واژه در گویش خیابانی، مانند واژه انگلیسی آن، آپلود (Upload) گفته می‌شود.






نرم‌افزار

نرم‌افزار (به انگلیسی: Software) یا برنامه، مجموعه‌ای از دستورالعمل‌های دقیق و مرحله به مرحله است که هدف خاصی را دنبال می‌کنند.

ظاهراً، اولین بار جان توکی در سال ۱۹۵۸ این واژه را به‌این معنا به‌کار برده‌است. احتمالاً این واژه در مقابل سخت‌افزار (به انگلیسی: Hardware) به کار برده‌اند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) به‌کار می‌رفته‌است.
دو گروه کلی نرم‌افزارها

نرم‌افزارهای رایانه را می‌توان به دو دسته بزرگ تقسیم کرد:

نرم‌افزار سیستم (به انگلیسی: System software)
نرم‌افزار کاربردی (به انگلیسی: Application software)

می‌توان گفت نرم‌افزارهای کاربردی، برنامه‌های مورد استفاده کاربرند و نرم‌افزارهای سیستمی، مدیریت رایانه را برعهده دارند. مهم‌ترین نرم‌افزار سیستم، سیستم‌عامل است.






سیستم عامل

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

این ارتباط میان نرم‌افزار و سخت‌افزار توسط سیستم عامل انجام می‌شود. این تنها قسمتی از کار سیستم عامل است.
سیستم عامل خود یک برنامه نرم افزاری است با این تفاوت که چون تمام منابع و امکانات سخت افزاری در اختیار وی می باشد دارای ویژگی منحصر به فرد می باشد بنابراین آن را در رده نرم افزارها می خوانیم با این ویژگی که از اهمیت خاصی برخوردار است. به بیان دیگر سیستم عامل یک برنامه جامع است که اجازه در اختیار قراردادن منابع و امکانات سخت افزاری را برای نرم افزارها صادر می کند و این سیستم عامل است که مسئول صحت عملکرد سیستم و منابع آن است.
سیستم عامل شامل 4 بخش مهم است
1- مدیریت پردازش و پردازشگر
2- مدیریت حافظه
3- مدیریت دستگاههای ورودی و خروجی (I/O)
4- مدیریت فایل
سه گروه کلی نرم‌افزارهای معماری







از دیدگاه ساختاری (معماری) (architecture)، نرم‌افزارها به دسته‌های زیر تقسیم می‌شوند:

کاربر-بنیان یا Client Base
کارگزار-بنیان یا Server Base
کاربر کارگزار بنیان یا Client-Server Base

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






رقابت نرم‌افزاری

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





نرم‌افزار سیستم

نرم‌افزار سیستم به نرم‌افزاری در رایانه گفته می‌شود که به کارکرد سیستم رایانه یا کاربردهای سطح پایین (یا Low Level) رایانه مربوط باشد. این نرم‌افزارها به ساختار فیزیکی سخت‌افزار رایانه وابسته هستند و در نوشتن آن‌ها از زبان‌های سطح پائین مانند زبان اسمبلی استفاده می‌شود. سیستم‌عامل و درایورها از نرم‌افزارهای سیستم هستند. از جمله زبان هایی که برای نگارش نرم‌افزارهای سیستمی استفاده می‌شود، زبان برنامه نویسی C می‌باشد. کار کردن با سی برای برنامه نویسان راحت تر است و آنان این زبان را به اسمبلی ترجیح می‌دهند. اگر برای نگارش نرم‌افزار سیستمی مشکل محدودیت فضای سخت‌افزاری داشته باشیم بهتر است با زبان اسمبلی کار کنیم که حجم آن پایین تر است. نرم‌افزارهای سیستمی به سخت‌افزار وابسته اند.

در برابر نرم‌افزار سیستم، نرم‌افزار کاربردی قرار دارد که برای کاربردهای سطح بالا و غیرسیستمی رایانه است و معمولاً به زبان‌های سطح بالا نوشته می‌شود که از جزئیات سخت‌افزاری سیستم مستقل است.






نرم‌افزار کاربردی

نرم‌افزار کاربردی (به انگلیسی: Application software) عبارت است از نرم‌افزاری که با استفادهٔ مستقیم از منابع و قابلیت‌های رایانه کاری را مستقیماً برای کاربر انجام می‌دهد. باید توجه داشت که این عبارت در مقابل عبارت نرم‌افزار سیستمی معنی پیدا می‌کند.

نرم‌افزار سیستمی در مقابل در پس‌زمینه عمل می‌کند و خدماتی را فراهم می‌کند که دیگر نرم‌افزارها و یا سیستم‌عامل می‌توانند برای انجام کارهای خود از آن استفاده کنند. اما در عوض معمولاً مستقیماً با کاربر عادی در تماس نیست و خدماتی را به او ارایه نمی‌دهد.

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

بسیاری نرم‌افزارهای کاربردی، برای توسعه‌دهندگان ابزار رابط برنامه‌نویسی کاربردی هم فراهم می‌کنند تا بتوان از قابلیت‌های نرم‌افزار در نرم‌افزارهای جدید استفاده کرد. برای مثال نرم‌افزار ادوبی آکروبات هنگام نصب ای‌پی‌آی فراهم می‌کند که برنامه‌نویس می‌تواند با استفاده از آن توانایی‌های آکروبات را در برنامهٔ خود به کار گیرد.

برای عنوان نمونه‌های دیگر می‌توان به نرم‌افزارهای پردازش متن، برگه‌های گسترده (صفحات گسترده) و نرم‌افزارهای پخش نوا و نما اشاره کرد.






مهندسی نرم‌افزار

مهندسی نرم‌افزار (به انگلیسی: Software engineering) یعنی استفاده از اصول مهندسی بجا و مناسب برای تولید و ارائه محصول نرم‌افزاری با کیفیت که قابل اطمینان و با صرفه بوده و برروی ماشین‌های واقعی به طور کارآمدی عمل کند.

مهندسی نرم‌افزار یک روش سیستماتیک، منظم و دقیق برای ساخت و ارائه محصولی نرم‌افزاری با کیفیت است.

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

کاربردهای مهندسی نرم‌افزار دارای ارزش‌های اجتماعی و اقتصادی هستند، زیرا بهره‌وری مردم را بالا برده، چند و چون زندگی آنان را بهتر می‌کنند. مردم با بهره‌گیری از نرم‌افزار، توانایی انجام کارهایی را دارند که قبل از آن برای‌شان شدنی نبود. نمونه‌هایی از این دست نرم‌افزارها عبارت‌اند از: سامانه‌های توکار، نرم‌افزار اداری، بازی‌های رایانه‌ای و اینترنت.

فناوری‌ها و خدمات مهندسی نرم‌افزار به کاربران برای بهبود بهره‌وری و کیفیت یاری می‌رساند. نمونه‌هایی از زمینه‌های بهبود: پایگاه داده‌ها، زبان‌ها، کتابخانه‌ها، الگوها، فرایندها و ابزار.






مهم ترین شاخص مهندسی نرم‌افزار

مهم ترین شاخص در مهندسی نرم‌افزار تولید نرم‌افزار با کیفیت مناسب در جهت «نیازهای مشتری» است.






پیشینه مهندسی نرم‌افزار

اصطلاح مهندسی نرم‌افزار پس از سال ۱۹۶۸ میلادی شناخته شد. این اصطلاح طی نشست «مهندسی نرم‌افزار ناتو ۱۹۶۸» (که در گارمیش-پارتنکیرشن، آلمان برگزار شد) توسط ریاست نشست فریدریش ال باوئر معرفی شد و از آن پس به‌طور گسترده مورد استفاده قرار گرفت.

اصطلاح مهندسی‌نرم‌افزار عموماً به معانی مختلفی به‌کار می‌رود:

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






مهندسی نرم‌افزار عبارتست از:

کاربرد یک رویکرد سامانه‌شناسی، انتظام‌یافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرم‌افزار، که کاربرد مهندسی در نرم‌افزار است.
مطالعه روش‌های موجود در استاندارد IEEE







محدوده مهندسی نرم‌افزار و تمرکز آن

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

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

مهندسی نرم‌افزار همچنین با خصوصیات پروسه توسعه نرم‌افزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرم‌افزار، طول مدت توسعه نرم‌افزار و ریسک‌های توسعه نرم‌افزار درگیر است.






نیاز به مهندسی نرم‌افزار

نرم‌افزار عموماً از محصولات و موقعیت‌هایی شناخته می‌شود که قابلیت اطمینان زیادی از آن انتظار می‌رود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاه‌های انرژی هسته‌ای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامه‌هایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیده‌ترین ماشین‌های نوین قابل مقایسه هستند. به‌عنوان مثال، یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی حدود ده میلیون بخش دارد)، در حالی که نرم‌افزارِ هدایت چنین هواپیمایی می‌تواند تا ۴ میلیون خط کد داشته باشد.

با توجه به گسترش روزافزون دنیای رایانه امروزه بیش از هر زمان دیگری نیاز به متخصصان رایانه احساس می‌شود. متاسفانه این رشته در ایران بازار کار خوبی ندارد طبق آمارها ۶۳٫۲۷ درصد از فارغ‌التحصیلان در سال ۹۰ مشغول به کار در سایر مشاغل هستند. اما برای مهندسان سخت‌افزار هم امکان کار در شرکت‌های تولیدکننده قطعات و دستگاه‌ها و مراکز صنعتی – تولیدی بسیار فراهم است و از نظر سطح درآمدی هم با توجه به دانش و پشتکار شخصی در حد متوسط قرار دارند. به طور کلی این رشته در ایران با استقبال چندانی رو به رو نیست؛ این نیز حاکی از نبود برخی از زیرساخت‌ها در ایران هست.






تکنولوژی‌ها و روش‌های عملی

مهندسان نرم‌افزار طرفدار تکنولوژی‌ها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگار هستند. این بحث در سال‌های دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسان نرم‌افزار از تکنولوژی‌ها و روش‌های عملی بسیار متنوعی استفاده می‌کنند. کسانی که کار عملی می‌کنند از تکنولوژی‌های متنوعی استفاده می‌کنند: کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی می‌کنند از روش‌های عملی بسیار متنوعی استفاده می‌کنند تا تلاش‌هایشان را اجرا و هماهنگ کنند: برنامه‌نویسی در دسته‌های دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرم‌افزار بایستی رسیدن به ایده‌های جدید خارج از الگوهای طراحی شده قبلی باشد، که باید شفاف بوده و به‌خوبی مستند شده باشد.

با وجود رشد فزاینده اقتصادی و قابلیت تولید فزاینده‌ای که توسط نرم‌افزار ایجاد شده، هنوز هم بحث و جدل‌های ماندگار درباره کیفیت نرم‌افزار ادامه دارند.






ماهیت مهندسی نرم‌افزار

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

دیوان فعالیت‌های آماری آمریکا مهندسان نرم‌افزار را به عنوان زیرگروهی از «متخصصان رایانه»، با فرصت‌های شغلی‌ای مانند «دانشمند رایانه»، «برنامه نویس» و «مدیر شبکه» دسته بندی کرده‌است. BLS تمام مهندسان دیگر این شاخه علمی، که شامل مهندسان سخت‌افزار رایانه نیز هست، را به‌عنوان «مهندسان» دسته بندی می‌کند.






نرم‌افزار آزاد

نرم‌افزار آزاد (به انگلیسی: Free software) نرم‌افزاری است که به‌همراه کد منبع توزیع شده و با قوانینی منتشر می‌شود که آزادی استفاده، مطالعه، ویرایش و انتشار مجددِ کاربران را تضمین می‌کند. نرم‌افزارهای آزاد معمولاً با همکاری برنامه‌نویس‌های داوطلب به‌عنوان یک پروژه به‌وجود می‌آیند.

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

ریچارد استالمن در سال ۱۹۸۵ در زمانی که در حال آغاز پروژهٔ گنو و به‌وجود آوردن بنیاد نرم‌افزارهای آزاد بود، برای اولین بار از عبارت «نرم‌افزار آزاد» استفاده کرد. براساس تعریف بنیاد نرم‌افزارهای آزاد کاربران یک نرم‌افزارِ آزاد، آزاد هستند؛ چون به اجازه گرفتن نیازی ندارند؛ آن‌ها در انجام کارهای دل‌خواهشان (مانند حق نشر و کپی‌برداری) محدود نیستند؛ نیازی به موافقت با هیچ توافق‌نامه‌ای ندارند؛ و در همان ابتدا نیز با نداشتن کد منبع محدود نبوده‌اند.






تعریف

طبق تعریف نرم‌افزار آزاد توسط بنیاد نرم‌افزارهای آزاد، هر نرم‌افزاری که آزادی‌های زیر را برای کاربرانش فراهم کند به عنوان یک نرم‌افزار آزاد شناخته می‌شود:

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

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

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







تاریخچه

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

رفته‌رفته که صنعت رایانه پیشرفت کرد و سخت‌افزارها بیشتر استاندارد شدند و همینطور کامپایلرها و مفسرها پیشرفت کردند، زمینه برای رشد نرم‌افزارهای انحصاری فراهم شد. با چنین پیشرفت‌هایی، برنامه‌ها راحت‌تر از سخت‌افزار یک شرکت به سخت‌افزار شرکت رقیب پورت می‌شدند و راحت می‌شد یک نرم‌افزار را بر روی سخت‌افزارهای مختلفی از شرکت‌های مختلف اجرا کرد. بدین ترتیب یک نفر می‌توانست نرم‌افزاری بنویسد که مستقل از سخت‌افزار خاصی عمل کند و بر روی طیف وسیعی از آنها اجرا شود. علاوه بر آن، با استاندارد شدن سخت‌افزارها، تفاوت‌های ناچیزی که آنها در کارایی داشتند رفته رفته ناپدید شد. تولید کنندگان به این نتیجه رسیده بودند که باید به نرم‌افزار هم به چشم یک وسیله فروشی نگاه کنند. شرکتها شروع به فروش نرم‌افزارهای خود کردند و دست کاربران خود را برای تغییر در نرم‌افزارها و انتشار مجدد آنها بستند. به گونه ای که در سال ۱۹۶۸ شرکتی به نام ای‌دی‌آر (به انگلیسی: ADR) اولین نرم‌افزار دارای مجوز را عرضه کرد. در سال ۱۹۶۹، شرکت آی‌بی‌ام به خاطر اینکه به همراه سخت‌افزارهای خود، نرم‌افزارهای آزاد ارائه می‌کرد، توسط وزارت دادگستری ایالات متحده آمریکا به از بین بردن کسب و کار و ایجاد یک شرایط ضدرقابتی برای دیگر متهم شد. آی‌بی‌ام دیگر به همراه سخت‌افزارهای خود نرم‌افزار ارائه نکرد و بدین ترتیب نرم‌افزارها و سخت‌افزارها از یکدیگر جدا شدند و فاصله گرفتند.

در سال ۱۹۸۳، ریچارد استالمن از آزمایشگاه هوش مصنوعی و علوم رایانه ام‌آی‌تی، پروژه گنو را بنیان نهاد. او که از تغییر فرهنگ در صنعت رایانه و کاربرانش ناامید شده بود، قصد داشت سیستم‌عاملی به نام گنو را به صورت یک نرم‌افزار آزاد توسعه دهد. در ژانویه ۱۹۸۴ توسعه سیستم‌عامل گنو آغاز گشت و بنیاد نرم‌افزارهای آزاد در اکتبر ۱۹۸۵ بنیان نهاده شد. در سال ۱۹۸۹، اولین نسخه از اجازه‌نامه همگانی گنو منشتر شد. البته جی‌پی‌ال اولین پروانه نرم‌افزار آزاد نبود و قبل از آن پروانه‌های نرم‌افزار آزاد دیگری مانند پروانه بی‌اس‌دی در سال ۱۹۸۸ عرضه شده بودند. تا کنون پروانه‌های نرم‌افزار آزاد زیادی توسط افراد و شرکت‌های مختلف منتشر شده است که آز این میان می‌توان به پروانه ام‌آی‌تی، پروانه آپاچی، پروانه آی‌اس‌سی، پروانه همگانی موزیلا و ... اشاره کرد.

در سال ۱۹۹۷، اریک ریموند مقاله‌ای با نام کلیسای جامع و بازار را منتشر کرد و در آن به بررسی اصول نرم‌افزارهای آزاد و مزایای آنها پرداخت. این مقاله به شدت مورد توجه قرار گرفت و یکی از دلایلی بود که شرکت ارتباطات نت‌اسکیپ، کد منبع مرورگر اینترنتی خود را به صورت نرم‌افزار آزاد منتشر کرد. این کار باعث شد تا شرکت‌های دیگری هم به نرم‌افزارهای آزاد توجه نشان دهند. کدهای منبع نت‌اسکیپ، بعدها اساس توسعه مرورگر فایرفاکس و برنامه تاندربیرد قرار گرفت.






مسئله نام‌گذاری

در زبان انگلیسی، کلمه Free معانی متفاوتی همچون آزادی، رایگان بودن و ... دارد. عده‌ای بر این عقیده بودند که ممکن است این کلمه باعث کژفهمی شده و باعث شود مردم به نرم‌افزارهای آزاد، به چشم نرم‌افزارهای رایگان نگاه کنند. این در حالی است که یک نرم‌افزار آزاد، لزوماً رایگان نیست. آنها در سال ۱۹۹۸ کمپین دیگری به نام «نرم‌افزارهای متن‌باز» (به انگلیسی: Open Source) را تشکیل دادند تا با تاکید بیشتر بر روی مدل توسعه و مسائل تکنیکی، به جای مسائل فلسفی و اخلاقی، مردم و شرکت‌ها را هر چه بیشتر به استفاده از نرم‌افزار آزاد تشویق کنند. تقریباً هر دو مفهوم، اشاره به یک چیز دارند و یک نرم‌افزار متن‌باز، نرم‌افزار آزاد هم هست (و برعکس)، اما طرفداران ایده نرم‌افزارهای متن‌باز، آن را روشی برای توسعه نرم‌افزارهای بهتر معرفی می‌کنند و تاکید کمتری بر جنبش اجتماعی و فلسفه پشت این گونه نرم‌افزارها دارند. طبق گفته موسسه پیشگامان متن‌باز (که توسط طرفداران ایده نرم‌افزار متن‌باز بوجود آمده)، عبارت «نرم‌افزار آزاد» واژه ای قدیمی‌تر است و به گونه‌ای منعکس کننده نام بنیاد نرم‌افزارهای آزاد است، سازمانی که در سال ۱۹۸۵ برای محافظت و ترویج نرم‌افزارهای آزاد بوجود آمد؛ با اینکه بنیان‌گذاران ایده متن‌باز هم از توسعه و ترویج نرم‌افزارهای آزاد حمایت می‌کنند، اما در مورد چگونگی ترویج آنها با بنیاد نرم‌افزارهای آزاد موافق نیستند و اعتقاد دارند که آزادی نرم‌افزار در درجه اول یک امر عملی است تا ایدئولوژیکی.






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

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

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






مدل تجاری

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

برخی از توسعه‌دهندگان مستقل نرم‌افزار آزاد، کمک‌های مالی از طرف افراد داوطلب قبول می‌کنند. به عنوان مثال، سورس‌فورج امکاناتی دارد که یک کاربر داوطلب می‌تواند مبلغی پول را به یک پروژه نرم‌افزار آزاد اهدا کند.






مثالهایی از نرم‌افزارهای آزاد کاربردی

هستهٔ سیستم‌عامل گنو/لینوکس، داروین.
تعدادی از سیستم‌عامل‌های خانواده بی‌اس‌دی مانند فری‌بی‌اس‌دی, اپن‌بی‌اس‌دی, نت‌بی‌اس‌دی, دراگون‌فلی‌بی‌اس‌دی.
کامپایلر جی‌سی‌سی، کتابخانهٔ زبان برنامه‌نویسی سی
کامپایلر کلنگ
پایگاه‌داده‌های رابطه‌ای مانند: mysql، پست‌گر اس‌کیوال، برکلی دی‌بی
زبان‌های برنامه‌نویسی مانند تی‌سی‌ال، روبی، پایتون، پرل و پی‌اچ‌پی.
مرورگر وب فایرفاکس (Firefox)
اُپن آفیس (Open Office)
میزکار کی‌دی‌ای (KDE)
میز کار ال‌اکس‌دی‌ئی (LXDE)
میزکار اکس‌اف‌سی‌ئی (XFCE)
میزکار گنوم (Gnome)
برنامه‌های حروف چینی مانند تک، لاتک و فارسی تک
نرم‌افزارهای مدیریت محتوا مانند جوملا (!Joomla)، پی‌اچ‌پی-نیوک (PHP-Nuke)، پست نیوک (postnuke) و مامبو (mambo) ,وردپرس (wordpress), دروپال (drupal) , ....
نرم‌افزارهای ساخت انجمن (Forum) مانند پی‌اچ‌پی‌بی‌بی (phpbb)، اس‌ام‌اف (smf)، یاب (YaBB) و فروم (phorum)
ویرایشگرهای متن ویم و ایمکس
مجموعه اداری لیبره‌آفیس







برنامه‌نویسی

برنامه‌نویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرم‌افزار یا برنامهٔ رایانه‌ای گفته شود. با این همه برنامه‌نویسی تنها بخشی از فرایند توسعهٔ نرم‌افزار یا برنامه رایانه‌ای است. اهمیت، توجه و منابع اختصاص داده شده به برنامه‌نویسی، بسته به ویژگی‌های مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شده مهندسی نرم‌افزار متغیر است.

برنامه نویسی کامپیوتر (که اغلب به طور کوتاه برنامه نویسی نامیده می شود) فرآیند سوق دادن ساختار اصلی یک مسأله محاسباتی به برنامه ای قابل اجرا است. این کار مستلزم فعالیت هایی همچون تحلیل و درک مسأله است و عموما حل چنین مسایلی منجر می شود به ایجاد یک الگوریتم، بازبینی نیازمندی های الگوریتم که شامل صحت و میزان منابع مصرفی است، پیاده سازی(که معمولا به عنوان کدینگ از آن یاد می شود) این الگوریتم در یک زبان برنامه نویسی مقصد، تست کردن، اشکال زدایی، نگه داری کد منبع، پیاده سازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامه های کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده می شود. کد منبع به یک یا چند زبان برنامه نویسی(مانند JavaScript ،Smalltalk ،Python ،Java ،C# ،C++ ،C، و غیره) نوشته شده است.






تاریخچه

موضوع دستگاه‌هایی که به دنباله‌ای از دستورالعمل‌های از قبل تعریف شده عمل می‌کند بر می‌گردد به Greek Mythology.






برنامه نویسی مدرن

برنامه نویسی مدرن
اندازه گیری کاربرد زبان

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






اشکال زدایی

اشکال زدایی وظیفه بسیار مهمی در فرایند توسعه نرم‌افزار می‌باشد، زیرا یک برنامه غلط می‌تواند پیامدهای مهمی برای کاربر خود داشته باشد. بعضی از زبان‌ها بیشتر در معرض برخی اشتباهات می‌باشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبان‌های دیگر ندارند.






زبان برنامه‌نویسی

اجرا و عملی ساختن الگوریتم‌های انتزاعی وابسته به هم به‌وسیله تولید یک برنامه رایانه‌ای مشخص با ابزار زبان برنامه‌نویسی ممکن است.






نمونه یک برنامه

یک برنامهٔ ساده در زبان برنامه‌نویسیBasic که از ساده‌ترین زبان‌های برنامه‌نویسی است می‌تواند به شکل زیر باشد:

REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE
PRINT "HELLO NEW WORLD!"
END

سطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط درنظر گرفته نمی‌شود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامه‌نویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان می‌دهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع می‌دهد.

پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورات را تبدیل به فرامینی می‌کند که لایه زیرین، که ممکن است همان سخت‌افزار باشد، می‌تواند آنها را اجرا کند.






پارادایم‌ها

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







وارسی مدل
در علوم کامپیوتر، وارسی مدل به این مسئله اشاره دارد که آیا مدل یک سیستم یک نیازمندی خاص را پشتیبانی می‌کند یا خیر. بررسی امکان بروز بن بست، مسابقه و حالت‌های خاصی که سیستم را از کار می‌اندازد، وظیفهٔ فرایند وارسی مدل نرم‌افزار است. به طور خلاصه، وارسی مدل تکنیکی است برای تائید صحت عملکرد یک سیستم که دارای حالت‌های محدود(en:Finate-state machine) است. این روش برای اطمینان حاصل کردن از صحت عملکرد نیازمندی‌ها و طراحی یک سیستم بلادرنگ و نهفته به کار می‌رود. این شیوهٔ صحت سنجی، تمامی حالت‌های ممکن سیستم را کاوش می‌کند و کلیهٔ سناریوهای ممکن را به روش نظاممند امتحان می‌کند.






روش‌های وارسی مدل

در وارسی مدل کلیهٔ حالت‌ها و انتقال‌های مدل ریاضی مورد بررسی قرار می‌گیرد. با استفاده از یک روش هوشمندانه با دامنهٔ خاص، می‌توان تمامی حالت‌ها را با کاهش زمان محاسبه طی انجام یک عملیات، بررسی کرد. شیوه‌های پیاده سازی شامل شمارش فضای حالت‌ها، شمارش فضای حالت‌های نمادین، تفسیر انتزاعی، شبیه سازی نمادین و پالایش انتزاعی است. ویژگی‌هایی که اغلب مورد صحت سنجی قرار می‌گیرند، به صورت منطق‌های زمانی مثل منطق زمانی خطی (LTL) و یا منطق محاسبات درختی (CTL) توصیف می‌شوند.






مزایا و کاربردها

این شیوه به نسبت سایر روش‌ها مثل وارسی اثبات، از سرعت بالایی برخوردار است.
با استفاده از مثال نقضی که در گزارش وارسی تولید می‌گردد، علت عدم ارضای ویژگی مورد انتظار در سیستم را می‌توان کشف نمود.
این روش، صحت سنجی پاره‌ای را میسر می‌کند. به بیانی دیگر می‌توان هر ویژگی به طور مجزا وارسی گردد.
در هر مرحله از توسعهٔ تولید نرم¬افزار (طراحی، پیاده سازی و...) می¬توان از این روش بهره برد.
کشف خطاهایی که در الگوریتم‌های پیچیده نظیر پروتکل‌های ارتباطی و الگوریتم‌های جمع آوری زباله ممکن است رخ دهند و تشخیص آن‌ها در فاز طراحی مشکل است؛ با استفاده از این روش امکان پذیر است.
از جمله ویژگی‌های سیستمی که در وارسی مدل می‌توان از صحت عملکرد آن‌ها در مرحلهٔ پیاده سازی سیستم اطمینان حاصل نمود، عبارتند از:
کشف بروز بن بست در برنامه‌های همروند.
وارسی مشخصات زمانی؛ برای مثال بررسی بروز بن بست بعد از گذشت یک ساعت از راه اندازی مجدد سیستم.

تفاوت وارسی مدل با تست نرم‌افزار

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







تست نرم‌افزار

اهداف تست نگرش ما در تست نرم افزا ر تست: اجراي یک برنامه با هدف پیدا کردن خطا تست خوب: احتمال پیدا کردن خطاهاي کشف نشده توسط ارزیابی زیاد است. تست موفق: که حداقل یک خطاي کشف نشده را بیابد تست فقط وجود خطا را نشان می دهد و نه عدم وجود آن را. پیدا نشدن خطا در تست به معناي بدون خطا بودن برنامه نیست. اصول تست تست با توجه به نیازمندیهاي کاربر برنامه ریزي قبل از اجرا (test plan) نوشتن برنامه تست قانون پارتو %80 خطاهاي کشف نشده در 20 % کد است تست باید از اجزاي کوچک شروع شود ممکن نیست (exhaustive) تست کامل براي موثر بودن باید توسط شخصثالث بیطرف انجام شود معیارهاي تست پذیر بودن نرم افزار ١. قابلیت اجرا Operability هرچه نرم افزار بهتر کار کند و در محیط هاي بیشتري قابل اجرا باشد، n بهتر قابل ارزیابی است ٢. مشاهده پذیري Observability قابلیت مشاهده نتایج ارزیابی ٣. کنترل پذیري Controlability قابلیت اجراي تستهاي خودکار (مثل امکان اجراي خودکار تست هاي واحد توسط jUnit براي زبان جاوا) ۴. تجزیه پذیري Decomposability ارزیابی می تواند هدفمند تر شود ۵. سادگی Simplicity کاهش پیچیدگی معماري و منطق برنامه ۶. پایداري Stability براي ارزیابی تغییرات کمی بخواهد ٧. درك پذیري Understandability قابلیت درك طراحی و وابستگیهاي بین اجزا سطوح مختلف تست • تست واحد(Unit testing ) • تست یکپارچه سازي(Integration testing ) • تست یکپارچه سازي افزایشی • تست یکپارچه سازي • تست سیستم(System testing ) • تست پذیرش(Acceptance testing ) • تست آلفا • تست بتا تست واحد . پایین ترین سطح تست است micro level هر کد تست واحد، یک قطعه کد یا یک تابع (متد) خاص را تست می کند. این تست نیاز به دانش در مورد طراحی و نحوه عملکرد داخلی تابع یا قطعه کد دارد. توسط برنامه نویس (و نه تست کننده) انجام می شود. تست یکپارچه سازي افزایشی با افزوده شدن قابلیت جدید به نرم افزار، مجددا نرم افزار تست می شود. هدف این تست، بررسی درستی نرم افزار پس از افزوده شدن امکان جدید است. امکانات نرم افزار باید از هم استقلال داشته باشند تا بتوان پیش از تکمیل کل نرم افزار و به صورت افزایشی نرم افزار را تست کرد. توسط برنامه نویس یا تیم تست انجام می شود تست یکپارچه سازي تست نرم افزار حاصل از کنار هم قرار گرفتن قطعات مختلف آن به منظور بررسی درستی عملکرد نرم افزار یکپارچه شده قطعات مختلف شامل قطعه کدها (ماژول هایی از کد برنامه هاي مجزا که در کنار هم برنامه اصلی را تشکیل می دهند برنامه هاي مشتري-کارگزار عمل کننده در یک شبکه پس از تست واحد انجام می شود تست سیستم به منظور بررسی عملکرد نرم افزار بر روي پلتفرم هاي مختلف انجام می شود و نرم افزارهاي OS پلتفرم: سخت افزار + نرم افزار (شامل کاربردي مورد نیاز برنامه) به منظور اطمینان از اینکه برنامه با مولفه هاي دیگر محیط اجرایش به خوبی کار می کند به منظور اطمینان از اینکه نرم افزار ارائه شده در محیط مورد نظر قابل استفاده است. مثالی از مشکل حاصل از انجام ندادن تست سیستم

نرم افزار بازي شیر شاه دیزنی Disney’s Lion King Game

در پاییز سال 1994 شرکت دیزنی اولین CD بازي خود تحت عنوان شیر شاه Lion King که بر اساس کارتونی به همین نام ساخته شده بود را وارد بازار کرد. بسیاري از شرکتهاي دیگر تا آن زمان اقدام به ساخت بازیهاي رایانه اي کرده بودند اما این اولین بار بود که شرکت دیزنی وارد این تجارت شده بود. دیزنی براي فروش این بازي دست به تبلیغات گسترده اي زد و در نتیجه این محصول با فروش بسیار بالایی مواجه شد. اما اتفاقات پس از آن تبدیل به کابوسی براي این شرکت شد. در 26 دسامبر، روز پس از کریسمس تلفن هاي بخش پشتیبانی مشتریان شرکت دیزنی شروع کرد به زنگ زدن و زنگ زدن و زنگ زدن! متصدیان پاسخگویی به تماس ها با خیل عظیمی از والدین عصبانی با بچه هاي گریان مواجه شدند که ادعا می کرند نرم افزار مزبور کار نمی کند. این خبر به سرعت در مطبوعات و تلویزیون نیز پخش شد و کریسمس آن سال را براي بسیاري از پرسنل دیزنی تلخ کرد. تست علت چه بود؟ پس از بررسی مشخص شد که دیزنی نرم افزار خود را بر روي بسیاري از مدل هاي PCتست نکرده بود و در نتیجه تنها بر روي سیستمهایی کار می کرد که برنامه نویسان دیزنی روي آن سیستم ها نرم افزار خود را توسعه داده بودند و نه دستگاههاي متداولی که عموم مردم از آن استفاده می کردند. تست پذیرش به منظور بررسی اینکه نرم افزار نیازهاي مشتري را برآورده می کند، انجام می شود بعد از تست سیستم انجام می شود. شامل: تست آلفا: تست آلفا در سایت توسعه دهنده نرم افزار و در اغلب موارد n توسط کارمندان داخلی و در بعضی از موارد توسط مشتري تعدادي از کاربرانش که به محل دعوت می شوند انجام می گیرد. تست بتا: در تست بتا نسخه هایی از نرم افزار در اختیار تعدادي از کاربران قرار می گیرد تا در بازه اي با آن کار کنند و خطاها را گزارش دهند. روشهاي ارزیابی روش جعبه سفید دانستن نحوه کار داخلی برنامه امکان تایید نحوه عمل هر تکه کد و مسیر اجرا مراحل اولیه ارزیابی روش جعبه سیاه دانستن عمل مورد انتظار و مطلوب امکان تایید کاري که سیستم باید انجام دهد مراحل انتهایی ارزیابی استرتژی تست استراتژی تست نرم‌افزار یک توصیف رسمی از این است که نرم‌افزار چگونه تست خواهد شد. هدف استراتژی تست تعریف همه مراحل برای فرایند تست نرم‌افزار است که شامل برنامه ریزی آزمایش، طراحی ابزار آرمایش، اجرای آزمایش و جمع آوری و ارزیابی داده‌های بدست آمده باشد.

==استراتژی جعبه سیاه==این آزمایش جایگزین آزمایش جعبه سفید نمی‌باشد بلکه مکمل آن است.وخطاهایی متفاوت باآن راتست میکند.

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

در یک استراتژی آزمایش جعبه سیاه ما عموماً موارد زیر را مورد بررسی و آزمایش قرار می دهیم:

۱. بررسی اینکه سیستم نیازمندهای عملیاتی و غیر عملیاتی را تامین می‌کند یا نه.

۲. اعتبارسنجی ورودیها

۳. بررسی مقادیر مرزی برای متغیرها: به یک متغیر مقداری کمتر از حداقل مقداری که می تواند قبول کند یا بیشتر از حداکثر مقداری که می تواند قبول کند می دهیم و سیستم را در این شرایط تست می کنیم.

۴. بررسی خروج‌های سیستم: یک مجموعه از ورودهای صحیح با خروج‌های مربوط به آن را تهیه می کنیم و سپس ورودها را به سیستم وارد می کنیم و خروج‌های که توسط سیستم داده می‌شود را با خروجی‌های واقعی مقایسه می کنیم.

۵. بررسی رفتار سیستم در برابر پردازش ورودها و پرس و جوهای بزرگ و سنگین

برای موارد بالا و مواردی دیگری که ذکر نشد روشهای مختلف تست در استراتژی جعبه سیاه وجود دارد که عبارتند از:

en:Functional testing

en:Stress testing

en:Recovery Testing

en:Volume testing

User Acceptance testinge

en:System testing

en:Sanity or Smoke testing

en:Load testing

en:Usability testing

en:Exploratory testing

Ad-hoc Testing

en:Alpha testing

en:Beta testing

آیا می توان در استراتژی جعبه سیاه، از این مطمئن شد که سیستم به طور کامل تست شده است؟ خیر، هرگز در این استراتژی نمی توان مطمئن شد که سیستم به طور کامل تست شده است.






استراتژی جعبه سفید

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

در یک استراتژی آزمایش جعبه سفید ما عموماً موارد زیر را مورد توجه و بررسی قرار می دهیم:

۱. بررسی سطر به سطر کد (Code coverage): در این حالت باید سیستم را به گونه ای اجراء و بررسی کنیم که مطمئن شویم سطر به سطر کد برنامه حداقل یکبار اجراء شده است.

۲. بررسی همه انشعاب‌ها در کد برنامه (branch) : در کد برنامه باید تمام عبارت‌های شرطی ( if elseها و Switch case ها) را تک به تک مورد بررسی قرار داد. به این صورت که در یک عبارت if else هم فسمت if و هم قسمت else هر کدام بصورت مجزا یکبار اجراء شوند.

۳. بررسی همه حلقه‌ها در برنامه : حلقه‌ها در نرم‌افزار نقش اساسی دارند، چون می تونند با اشتباه جزئی مقدار زیادی از منابع را مصرف کرد برای مثال شرط خروج از حلقه به اشتباه هیچ وقت True نشود. برای نمونه حلقه‌ها را با ورودی بزرگتر از شرط خروج حلقه چک کنید یعنی حلقه اصلاً اجر نشود. تستی طراحی کنید که حلقه دقیقاً یکبار اجراء شود، تستی طراحی کنید که حلقه در یک بازه خاص اجراء شود و ....

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

۵. بررسی امنیت : سیستم را از این جهت که چگونه در برابر دسترسی‌های غیرمجاز، هک، کرک و هر چیز دیگر که می تواند به آن آسیب برساند مورد بررسی قرار می دهد. در اینجا ما باید مکانهای از کد را که داده‌ها را اعتبارسنجی و مدیریت می کنند، دسترسی به منابع یا عملیات مهم و حیاتی را انجام می دهند را بررسی کنیم.
9:59 pm
حجت بن حسن (مهدی)

بنابر اعتقاد شیعیانِ دوازده‌امامی، حجت بن حسن فرزند حسن بن علی عسکری (امام یازدهم شیعیان) و دوازدهمین و آخرین امام و همان مهدی موعود است. همچون پیامبر اسلام نامش محمد و کنیه اش ابوالقاسم است. همچنین «امام زمان»، «صاحب الزمان»، «ولی عصر»، «قائم آل محمد» و «مهدی موعود» از القاب اوست.






پس از مرگ حسن عسکری (امام یازدهم شیعیان) در سال ۲۶۰ هجری و سن ۲۸ سالگی، از آنجا که حسن عسکری برخلاف سایر امامان شیعه —که در زمان حیاتشان جانشین بعدی را تعیین کرده بودند— بطور علنی جانشینی برای خود برجای نگذاشته بود، بحران فکری و اعتقادی بزرگی در میان پیروان امام شیعه بوجود آمد. در این دوران که به «سال‌های حیرت» موسوم است، شیعیان به فرقه‌های متعددی منشعب شدند. عده‌ای از شیعیان اعتقاد داشتند که از حسن عسکری فرزندی باقی نمانده‌ است یا این فرزند در گذشته‌است؛ بسیاری از شیعیان امامت جعفر برادر حسن عسکری را پذیرفتند و گروه‌هایی نیز متوجه فرزندان و نوادگان امامان نهم و دهم شیعه شدند. اما اصحابی از حسن عسکری چنین گفتند که «وی پسری داشته که جانشینی مشروع برای امامت است». طبق گفتهٔ عثمان بن سعید، این پسر مخفی نگاه داشته شده بود، چرا که ترس آن می‌رفت که توسط دولت دستگیر شود و به قتل برسد. دیدگاه این گروه که در ابتدا دیدگاه اقلیت شیعه بود، به‌مرور به دیدگاه تمامی شیعیان امامی تبدیل شد که شیعیان دوازده امامی فعلی‌اند.

از دیدگاه تاریخی، باور به دوازده امام و اینکه امام دوازدهم همان مهدی موعود است بطور تدریجی در میان شیعیان تکامل یافت. به نظر می‌رسد مدتی طول کشید تا این نظریه به صورتبندی نهایی خود برسد و پس از آن هم توجیه ها و تبیین های دینی گسترده‌ای در موردش ارائه شد. شیعیان با دو رویکرد حدیثی و کلامی به تبیین نظریهٔ غیبت برخاستند. کلینی (و. ۳۲۹ ه.ق. / ۹۴۱ م.) در احادیث باب غیبت کتاب اصول کافی —که در خلال دوره سفرا (موسوم به غیبت صغری) گرد آورد— به موضوع غیبت و علت آن پرداخت. به‌خصوص نعمانی در کتاب الغیبه به تبیین نظریه غیبت از طریق احادیث پرداخت و او برای نخستین بار اصطلاحات «غیبت صغری» و «غیبت کبری» را به کار برد. پس از وی ابن بابویه (و.۹۹۱-۹۹۲) در کتاب کمال الدین در خصوص گردآوری احادیث مربوط به امام دوازدهم و غیبت وی کوشید. از دیگر سو، متخصصان علم کلام از جمله شیخ مفید (و. ۴۱۳ ه.ق. / ۱۰۲۳ م.) و شاگردانش بخصوص سید مرتضی (۱۰۴۴-۱۰۴۵) به تدوین نظریات کلامی امامت جهت تبیین ضرورت وجود امام زنده در شرایط غیبت پرداختند.

در باور کنونی شیعه دوازده امامی، حجت بن حسن در نیمهٔ شعبان سال ۲۵۵ یا ۲۵۶ ه.ق. در سامرا به دنیا آمد؛ او در پنج سالگی و پس از مرگ پدرش به امامت رسید. پس از مرگ حسن عسکری، مهدی تنها از طریق چهار سفیر یا نائب با شیعیان تماس می‌گرفت. البته بررسی‌های تاریخی نشان می‌دهد که از آغاز تعداد وکلا محدود به چهار تن نبوده و اصطلاح نیابتِ خاص در قرن‌های چهارم و پنجم هجری توسط علمای شیعه مانند شیخ طوسی و برای تبیین غیبت صغری ایجاد شده‌است. پس از یک دوره هفتاد ساله (موسوم به غیبت صغری) و با مرگ علی بن محمد سمری، چهارمین نائب امام دوازدهم شیعه، بار دیگر حیرت شیعیان را فراگرفت. آنها در نهایت در سده پنجم به تبیینی عقلی در کلام شیعه از غیبت امام دست یافتند. به باور شیعیان، پس از دوران سفرا، شیعیان با مهدی در ارتباط نیستند و این دوران را اصطلاحاً غیبت کبری می‌نامند. پس از پایان دورهٔ غیبت، وی با عنوان مهدی قیام خواهد کرد و او کسی خواهد بود که از طریق وی حق و عدالت بار دیگر به پیروزی خواهد رسید.

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




منبع‌شناسی

به نوشته جاسم حسین احادیث مربوط به غیبت مهدی قائم را بسیاری از گروه های شیعه گردآوری کرده اند. پیش از سال ۲۶۰ ه./۸۷۴ م. در آثار سه مذهب واقفیه، زیدیه جارودیه و امامیه موجود است. از واقفیه، انماطی ابراهیم بن صالح کوفی از اصحاب امام محمد باقر کتابی به نام «الغیبه» نوشت. علی بن حسین طائی طاطاری و حسن بن محمد بن سماعه هر یک کتابی به نام «کتاب الغیبه» نوشتند و امام موسی کاظم را به عنوان امام غائب معرفی کردند. از زیدیه ابوسعید عباد بن یعقوب رواجینی عصفری (و. ۲۵۰ ه./۸۶۴ م.) در کتابی به نام «ابوسعید عصفری» احادیثی در خصوص غیبت، ائمه دوازده گانه و ختم ائمه به دوازده می آورد بی آنکه نام آنها را برشمرد. از امامیه علی بن مهزیار اهوازی (وکیل امام نهم و دهم) (وفات حدود ۲۵۰ تا ۲۶۰ ق.)، دو کتاب به نام های «کتاب الملاحم» و «کتاب القائم» نوشت که هر دو درباره غیبت امام و قیام او با شمشیر مطالبی دارد. حسن بن محبوب سراد (م. ۲۲۴ ه./ ۸۳۸ م.) کتاب «المشیخه» را در موضوع غیبت می نویسد. فضل بن شاذان نیسابوری (۲۶۰ ه./ ۸۷۳ م.) کتاب «الغیبه» را نوشت که ظاهراً مطالب آن از کتاب «المشیخه» نقل شده است. وی که دو ماه پیش از امام یازدهم می میرد، امام دوازدهم را قائم می داند. به نوشته پوناوالا منابع پیش از دوران موسوم به غیبت کبری بسیار پراکنده و ناکافی‌اند و مشکلی که پژوهشگران در هنگام بررسی این منابع با آن مواجه می‌شوند، میزان تاریخی بودن این منابع است.

در خلال دوره سفارت موسوم به غیبت صغری (۲۶۰-۳۲۹ ه./۸۷۴-۹۴۱ م.) فقها و مبلغان بر اساس اطلاعات کتب پیشین و فعالیت های سازمان وکالت نوشته اند که در کتب تاریخی این دوره یافت نمی‌شود. ابراهیم بن اسحاق نهاوندی (م. ۲۸۶ ه./۸۹۹ م.) که مدعی نیابت امام دوازدهم بود کتابی در موضوع غیبت نوشت. عبدالله بن جعفر حمیری(م. بعد از ۲۹۳ ه./ ۹۰۵ م.) که خود کارگزار امامان دهم و یازدهم و نواب اول و دوم بود کتاب «الغیبه و الحیره» را نوشت. ابن بابویه (پدر شیخ صدوق) (م. ۳۲۹ ه. / ۹۴۰ م.) کتاب «الامامه و التبصره من الحیره» و کلینی (م. ۳۲۹ ه. / ۹۴۰ م.) بخش عمده ای از کتاب حجت اصول کافی را به غیبت اختصاص داد.

از سال (۳۲۹ ه./۹۴۱ م.) با پایان سفارت و آغاز دوره موسوم به غیبت کبری چندین اثر برای تبیین غیبت و علت طولانی شدن ان نگاشته شد. به گفته جاسم حسین پنج اثر در این زمان نگاشته شد که اساس عقاید بعدی امامیه درباره غیبت را تشکیل می دهد. نخستین کتاب الغیبه نعمانی توسط ابوعبدالله محمد بن جعفر نعمانی (م.۳۶۰ ق.) با استفاده از آثار فوق‌الذکر بدون توجه به اعتقادات نویسندگان آن آثار تدوین شده است. دومین اثر کمال‌الدین و تمام‌النعمة است که توسط شیخ صدوق (۳۰۶ تا ۳۸۱ ه.ق./ ۹۲۳ تا ۹۹۱ م.) بر اساس اصول اربعمائه گردآوری شده است و با توجه به جایگاه پدرش، علی بن بابویه، اطلاعات معتبری از دوران وکلا و ارتباط مخفی آنها با امام غایب از طریق چهار سفیر ارائه می دهد. سومین مورد «الفصول العشرة فی الغیبة» توسط شیخ مفید (و. ۴۱۳ ه.ق. / ۱۰۲۲ م.) نوشته شد و اطلاعات تاریخی در مورد دوران غیبت و پانزده دیدگاه پدیدار شده در میان امامیه در دوران غیبت و از میان رفتن همه آنها جز اثنی عشریه بیان می کند. همچنین در کتاب الارشاد به سبک کلینی و نعمانی به نقل احادیث و توجیه طولانی شدن عمر امام غایب می پردازد. چهارمین اثر توسط سید مرتضی (۳۵۵ - ۴۳۶ ه.ق /۱۰۴۴-۱۰۴۵ م.) شاگرد شیخ مفید با عنوان «مسئلة وجیزة فی الغیبة» نوشت. این اثر و کتاب دیگری با نام «البرهان علی صحة طول عمر الامام الزمان» تألیف محمد بن علی کراجکی (م. ۴۴۹ ق./ ۱۰۵۷ م.) فاقد اطلاعات تاریخی هستند. پنجمین اثر الغیبة نوشته شیخ طوسی (۳۸۵-۴۶۰ ق. / ۱۰۶۷ م.) بر مبنای کتابی به نام «الاخبار الوکالة الاربعة» نوشته احمد بن نوح بصری اطلاعات تاریخی معتبری از فعالیت های مخفی سفرا ارائه می دهد و نیز به شیوه حدیثی و عقلی اثبات می کند امام دوازدهم همان مهدی قائم است که باید در غیبت به سر برد و سایر ادعاها در خصوص غیبت دیگر افراد نظیر علی بن ابیطالب، محمد بن حنفیه و موسی کاظم مردود است. این کتاب مأخذ اصلی نویسندگان بعدی شیعه امامی و بخصوص بحار الانوار محمدباقر مجلسی (۱۰۳۷-۱۱۱۰ ق.) بوده است.

به نوشته جاسم حسین منابع غیرشیعه بر کتاب «المسترشد» اثر ابوالقاسم بلخی معتزلی (م. حدود ۳۰۱ ق./ ۹۱۳ م.) اتکا دارد که معتقد است حسن عسکری بی وارث از دنیا رفت و ظاهراً اطلاعات خود در خصوص دسته بندی شیعه پس از سال ۲۶۰ را از حسن بن موسی نوبختی (و. حدود ۳۰۰ ه.ق.) گرفته است. این کتاب مبنای اطلاعات المغنی عبدالجبار معتزلی (م. ۴۱۵ ق. / ۱۰۲۴ م.) و ابوالحسن اشعری (م. ۳۲۴ ق./ ۹۳۵ م.) قرار گرفت و کتاب اشعری مرجع سایر کتاب های اهل سنت نظیر ابن حزم (م. ۴۵۶ ق. / ۱۰۳۷ م.) و شهرستانی (م. ۵۴۸ ق. / ۱۱۵۳ م.) درباره دسته بندی های شیعه بوده است.

بیان موضوع در منابع تاریخ عمومی مسلمانان متفاوت است. محمد بن جریر طبری (۲۲۴ - ۳۱۰ ق./ ۹۲۲ م.) که معاصر دوران غیبت بود در تاریخ طبری اشاره ای به موضوع امام دوازدهم و فعالیت های شیعیان امامی نمی‌کند در حالی که به فعالیت های سایر گروه های شیعه نظیر اسماعیلیه می پردازد و حتی کاربرد حدیث مهدی قائم توسط این گروه ها در کسب قدرت را پی می گیرد. جاسم حسین علت ذکر نشدن فعالیت های امامیه در این کتاب را مخفیانه بودن آن می داند. مسعودی (حدود ۲۸۳ – ۳۴۶ ق. / ۸۹۶ - ۹۵۷ م.) در مروج‌الذهب، التنبیه و الاشراف و نیز اثبات و الوصیه که به وی منسوب است به فشارها و سخت گیری های عباسیان علیه امامان شیعه که منجر به وقوع غیبت شد می پردازد. ابن اثیر (۵۵۵ - ۶۳۰ه ق / ۱۲۳۲ م.) در الکامل فی التاریخ به اختلافات میان وکلای امام در دوران غیبت و تأثیر غلو در بروز آن می پردازد. به عقیده جاسم حسین ممکن است وی اطلاعات خود را از کتاب «تاریخ الامامیه» اثر یحیی بن ابی طی (م ۶۳۰ ق. / م.۱۲۳۲) گرفته باشد.

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




پیشینه اعتقاد شیعه به مهدی و قائم

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

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

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

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

اما به نوشته جاسم حسین منشأ دیدگاه مهدی به عنوان منجی در احادیث پیامبر بوده است که توسط بیست و شش نفر از صحابه و در کتاب های حدیث اهل سنت، زیدیه و امامیه نقل شده است. وی ضعیف بودن احادیث را رد می کند و می گوید این احادیث در زمان امویان نیز رواج داشته و در کتاب سلیم بن قیس منسوب به سلیم بن قیس هلالی (م. حدود 80-90 ق./ 699- 708 م.) هم آورده شده است. از سوی دیگر مورخان و متکلمان شیعه نظیر سید مرتضی عسکری و محمدحسین طباطبایی با تأکید بر اشتراک ادیان مختلف در خصوص کلیت موضوع نوید به آمدن مهدی و برپایی دین و برقراری عدل در زمین، این موضوع را از مشترکات ادیان الهی و ناشی از منشأ فطری ادیان می دانند. این گروه نخستین اشاره به مهدی را در احادیث پیامبر اسلام که از طرق شیعه و سنی روایت شده ذکر می کنند برمی شمارند و وجود وی را از ضروریات تحقق وعده های اسلام و قرآن در برپایی عدل و قسط در زمین می دانند.





شرایط محیطی امامیه در سده های سوم و چهارم

شرایط محیطی در دوران آخرین امامان شیعه

از زمان حکومت متوکل عباسی (۲۳۲- ۲۴۷ ه. ق. / ۸۴۷ - ۸۶۱ م.) سیاست مدارای مأمون (۱۹۸- ۲۱۸ ه. ق. / ۸۱۳ - ۸۳۳ م.) و خلفای پس از وی با شیعیان یکباره به کنار گذشته شد. در دوران متوکل به دستور او حرم حسین بن علی تخریب شد و امام دهم شیعه، هادی، از مدینه به سامرا فراخوانده شد تا تحت نظارت خلیفه باشد. متوکل از هیچ وسیله ممکن در آزار رساندن و بی احترامی به وی دریغ نمی‌کرد. گزارش‌ها حاکی از آن است که فشار شدیدی بر امامان در سامرا می‌آمد و شیعیان در عراق و حجاز در شرایط اسف باری زندگی می‌کردند. منتصر، پسر و جانشین متوکل این سیاست‌ها را برداشت و در نتیجه امام هادی آزادی بیشتری پیدا کرد. سیاست‌های متوکل در زمان مستعین (۸۶۲ - ۸۶۶ م.) هم ادامه یافت. احتمالاً در این زمان بود که امام دهم شیعه عثمان بن سعید را به نمایندگی خود در عراق برگزید (که البته این نمایندگی در زمان امام یازدهم حسن عسکری نیز تایید شد).در دوران آخرین امامان شیعه، شبکه‌ای از وکلا شکل گرفته بود؛ البته این شبکه بیشتر از آنکه به مانند سایر شبکه‌های علوی آن زمان (اسماعیلیه، زیدیه، نوادگان حسن بن علی) به قصد برپایی قیام تشکیل شده باشد، کار گردآوری وجوهات دینی مانند خمس و زکات را انجام می‌داد. شرایط سیاسی و مذهبی سال‌های آخر امامت حسن عسکری و نخستین دهه‌های پس از مرگ او —همزمان با خلافت معتمد عباسی (۲۵۶ -۲۷۹ ه. ق. /۸۷۶-۸۹۲ م.)— بسیار پرچالش بود. این دوران به جهت سیاسی، مصادف بود با عصر ضعف خلافت عباسیان؛ بدین صورت آنان از اعمال مؤثر حاکمیت خود جز در بخش محدودی از سرزمین عراق ناتوان بودند. در این دوره، افراد مختلف در جای‌جای قلمرو عباسیان قیام کرده‌بودند و سرزمین مسلمانان دچار تجزیه سیاسی شده‌بود. معتمد عباسی، حسن عسکری را —که رقیبی بالقوه برای خلافت به شمار می‌رفت— در سامرا تحت نظارت و مراقبت قرار داده و او را حتی از ملاقات با پیروانش نیز بازداشته بود.



شرایط محیطی در سال‌های آغازین غیبت کبری

سال‌های آغازین موسوم به غیبت کبری، همزمان با دورانی بود که به «قرن شیعه» معروف است. در سال ۳۳۴ ه. ق. /۹۴۵ م. بنی‌عباس تحت سلطهٔ حکومت شیعهٔ آل‌بویه درآمد؛ آل بویه با اینکه احتمالاً در آغاز زیدی بودند، هنگامی که به حکومت رسیدند به شیعهٔ دوازده امامی گرایش یافتند؛ آل‌بویه چون از نسل پیامبر مسلمانان نبودند باید امامی زیدی از نسل پیامبر را برای اطاعت کامل از او به امامت می‌رساندند. بنابراین احتمالاً به همین دلیل بود آنان پس از رسیدن به حکومت، به شیعه دوازده امامی متمایل شدند و ایدهٔ یک امام غائب از نظر سیاسی برای بوییان مطلوبتر بود.همزمان با آل‌بویه، حکمرانان شیعه فاطمی در مصر و شمال آفریقا، خاندان بنی حمدان در شمال عراق و سوریه و ادریسیان بر بخش‌هایی از شمال آفریقا حکمرانی می‌کردند.

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





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




فرقه های امامیه در دوران حیرت

با درگذشت حسن عسکری(و. ۲۶۰ ه.ق. /۸۷۴ م.)، امام یازدهم شیعه، سردرگمی بزرگی برای نیم قرن در بین شیعیان پدید آمد که نویسندگان شیعه از آن تحت عنوان «دوران حیرت» نام می‌برند. در این دوران، انشقاق در بین شیعیان شدت یافت و جنبش‌های رقیب مانند اسماعیلیه نیز استفادهٔ کافی از این موقعیت نمودند. تبلیغات در این دوران به حدی بود که بسیاری از شیعیان و بسیاری از بزرگان شیعهٔ امامی، مذهب خود را ترک نمودند. شیعه امامی به فرق متعدد منشعب شد. مسعودی (و. ۳۴۶ ه.ق. /۹۵۷ م.) در کتاب مروج‌الذهب تعداد این فرقه‌ها را بیست فرقه شمرده‌است و حسن ابن موسی نوبختی (و. حدود ۳۰۰ ه.ق.) در کتاب فرق الشیعه، از چهارده فرقه با ذکر جزئیات اعتقادی آنها نام می‌برد.

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

این فرقه‌ها را به پنج دسته کلی تقسیم می‌شوند؛ به جز آخرین دسته، سایر فرقه‌های منشعب شده تا صد سال پس از فوت حسن عسکری از میان رفتند:

واقفیه بر حسن عسکری: کسانی که مرگ حسن عسکری را باور نداشته و او را به عنوان «مهدی آل محمد» زنده می‌پنداشتند و به نام «واقفیه»، یعنی کسانی که بر امامت حسن عسکری توقف کرده‌اند، شناخته می‌شدند.
جعفریه: کسانی که پس از مرگ حسن عسکری، به برادر او جعفر بن علی الهادی ( ۲۲۶ تا ۲۷۱ ق.) گرویده و به دلیل آنکه فرزند حسن عسکری را ندیده بودند، به امامت جعفر گردن نهادند که دسته ای از آنان وی را جانشین امام دهم شیعه (هادی) و دسته ای دیگر او را به عنوان امام دوازدهم می شناختند. به این گروه «جعفریه» می‌گفتند.
محمدیه: عده ای که پس از انکار امامت حسن عسکری، به امامت اولین فرزند هادی محمد (حدود ۲۲۸ تا ۲۵۲ ق.) که در زمان حیات پدرش درگذشته بود، گرویدند. به اینان «محمدیه» گفتند.
ختم امامت: شمار دیگری بر این باور بودند که همان‌گونه که پس از محمد (پیامبر مسلمانان) دیگر پیامبری نخواهد آمد، پس از مرگ حسن عسکری نیز امامی وجود نخواهد داشت.
قطعیه: این گروه که خود چندین شاخه بودند، به امامت فرزندی که خود برای حسن عسکری قائل بودند اعتقاد داشتند. این جریانی همان جریانی بود که به تدریج به شیعه دوازده امامی فعلی تبدیل گشت.

دوره‌ای که باعث ایجاد این ابهام شد، در دوران خلافت معتمد عباسی (خلافت: ۲۵۶ تا ۲۷۹ ق. / ۸۷۰ تا ۸۹۲ م) شروع شد و تا زمان خلیفه عباسی مقتدر (خلافت: ۲۹۵ تا ۳۲۰ ق. / ۹۰۸ تا ۹۳۲ م) ادامه یافت.
ساعت : 9:59 pm | نویسنده : admin | مطلب بعدی
ظهور | next page | next page