دانلود
بارگیری و بارگذاری
بارگیری یا دانلود (به انگلیسی: 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 نشود. برای نمونه حلقهها را با ورودی بزرگتر از شرط خروج حلقه چک کنید یعنی حلقه اصلاً اجر نشود. تستی طراحی کنید که حلقه دقیقاً یکبار اجراء شود، تستی طراحی کنید که حلقه در یک بازه خاص اجراء شود و ....
۴. مدیریت خطای مطلوب : برسی اینکه اگر به یک متد یک ورودی نامعتبر وارد شود، نحوه آگاه سازی و نمایش مطلوب خطا برای کاربر چگونه باشد؟
۵. بررسی امنیت : سیستم را از این جهت که چگونه در برابر دسترسیهای غیرمجاز، هک، کرک و هر چیز دیگر که می تواند به آن آسیب برساند مورد بررسی قرار می دهد. در اینجا ما باید مکانهای از کد را که دادهها را اعتبارسنجی و مدیریت می کنند، دسترسی به منابع یا عملیات مهم و حیاتی را انجام می دهند را بررسی کنیم.
بارگیری یا دانلود (به انگلیسی: 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 نشود. برای نمونه حلقهها را با ورودی بزرگتر از شرط خروج حلقه چک کنید یعنی حلقه اصلاً اجر نشود. تستی طراحی کنید که حلقه دقیقاً یکبار اجراء شود، تستی طراحی کنید که حلقه در یک بازه خاص اجراء شود و ....
۴. مدیریت خطای مطلوب : برسی اینکه اگر به یک متد یک ورودی نامعتبر وارد شود، نحوه آگاه سازی و نمایش مطلوب خطا برای کاربر چگونه باشد؟
۵. بررسی امنیت : سیستم را از این جهت که چگونه در برابر دسترسیهای غیرمجاز، هک، کرک و هر چیز دیگر که می تواند به آن آسیب برساند مورد بررسی قرار می دهد. در اینجا ما باید مکانهای از کد را که دادهها را اعتبارسنجی و مدیریت می کنند، دسترسی به منابع یا عملیات مهم و حیاتی را انجام می دهند را بررسی کنیم.
شبکه اجتماعی
شبکهٔ اجتماعی ساختاری اجتماعی است که از گره هایی(که عموماً فردی یا سازمانی هستند) تشکیل شدهاست که توسط یک یا چند نوع خاص از وابستگی به هم متصل اند، برای مثال: قیمتها، الهامات، ایدهها و تبادلات مالی، دوستها، خویشاوندی، تجارت، لینکهای وب، سرایت بیماریها (اپیدمولوژی) یا مسیرهای هواپیمایی. ساختارهای حاصل اغلب بسیار پیچیده هستند.
تحلیل شبکههای اجتماعی روابط اجتماعی را با اصطلاحات رأس و یال مینگرد. رأسها بازیگران فردی درون شبکهها هستند و یالها روابط میان این بازیگران هستند.انواع زیادی از یالها میتواند میان رأسها وجود داشته باشد. نتایج تحقیقات مختلف بیانگر آن است که می توان از ظرفیت شبکههای اجتماعی در بسیاری از سطوح فردی و اجتماعی به منظور شناسایی مسائل و تعیین راه حل آنها، برقراری روابط اجتماعی، اداره امور تشکیلاتی، سیاستگذاری و رهنمون سازی افراد در مسیر دستیابی به اهداف استفاده نمود. به عنوان مثال، نتایج مطالعات در حوزه سیاستگذاری گردشگری نشان می دهد شبکههای اجتماعی به واسطه تاثیرگذاری روی متغیرهای رفتاری بر جذب گردشگران خارجی به مقاصد گوناگون تاثیرگذار هستند و می توان از این شبکه ها به منظور شکلگیری اعتماد و کاهش ریسک تصمیمگیری کاربران در انتخاب یک مقصد خاص گردشگری بهره گرفت.
در سادهترین شکل یک شبکهٔ اجتماعی نگاشتی از تمام یالهای مربوط، میان رأسهای مورد مطالعهاست. شبکهٔ اجتماعی هم چنین میتواند برای تشخیص موقعیت اجتماعی هر یک از بازیگران مورد استفاده قرار گیرد. این مفاهیم غالباً در یک نمودار شبکهٔ اجتماعی نشان داده میشوند که درآن، نقطهها رأسها هستند و خطها نشانگر یالها.
در ایران علیرغم اینکه عضویت در شبکههای اجتماعی جرم تلقی نمیشود، ولی به موجب فیلترینگ آنها از جانب حکومت، حضور در این وبگاهها چون از طریق دور زدن فیلترینگ میسر است، مصداق عمل مجرمانه است.
آنالیز شبکههای اجتماعی
آنالیز شبکههای اجتماعی(مرتبط با نظریه شبکهها) به عنوان یک تکنیک کلیدی در جامعه شناسی، انسان شناسی، جغرافیا، روانشناسی اجتماعی، جامعه شناسی زبان، علوم ارتباطات، علوم اطلاعات، مطالعات سازمانی، اقتصاد و زیست شناسی مدرن همانند یک موضوع محبوب در زمینهٔ تفکر ومطالعه پدیدار شدهاست.
بالغ بر یک قرن است که مردم، شبکهٔ اجتماعی مجازی را برای اشارههای ضمنی به مجموعه روابط پیچیده میان افراد درسیستمهای اجتماعی در تمامی مقیاسها از روابط بین فردی گرفته تا بینالمللی مورد استفاده قرار میدهند. در سال ۱۹۴۵ J. A. Barnes برای نخستین بار از اصطلاح قاعده مند برای مشخص کردن الگوهایی از رشتهها استفاده کرد که مفاهیم را مشخص میکنند و به صورت رایج توسط عموم و دانشمندان علوم اجتماعی مورد استفاده قرار میگیرد : گروههای محدود (مانند: قبایل و خانوادهها) و طبقات اجتماعی(مانند: جنسیّت و قومیت). دانشورانی چون : S.D. Berkowitz, Stephen Borgatti, Ronald Burt, Linton Freeman, Mark Granovetter, Peter Marsden, Nicholas Mullins, Anatol Rapoport, Stanley Wasserman, Barry Wellman, and Harrison White کاربرد شبکههای اجتماعی را به تفصیل بیان کردهاند.
آنالیز شبکههای اجتماعی از طریق احکام نظری و روشها و تحقیقهای مربوط به آن از یک صنعت ضمنی به معبری تحلیلی برای پارادایمها تغییر یافتهاست. برهان های تحلیلی از کل گرفته تا جزء؛ از ساختار گرفته تا روابط و افراد، از اخلاق گرفته تا رفتار همگی شبکههای سراسری را مورد بررسی قرار میدهند که در آنها، همهٔ رشتهها شامل روابط ویژهای در میان جمعیت ِ تعریف شدهاند و یا شبکههای فردی را مورد بررسی قرار میدهند که شامل رشتهها یی است که افراد مشخصی آنها را دارند از قبیل انجمنهای خصوصی.
گرایشهای تحلیلی متعددی آنالیز شبکههای اجتماعی را تمیز میدهند: هیچ فرضی وجود ندارد که گروهها، بلوکهای بنا کنندهٔ اجتماع هستند :: این معبر برای مطالعهٔ سیستمهای اجتماعی با محدودیت کمتر باز است از اجتماعات غیر محلی گرفته تا لینکهای درون وبگاهها.
آنالیز شبکههای اجتماعی علاوه بر سروکارداشتن با اشخاص (افراد، سازمانها، ایالات) به عنوان واحدهای گسستهٔ تحلیل، برروی چگونگی ساختار رشتهها که اشخاص و روابط میان آنها را تحت تاثیر قرار میدهد نیز تمرکز میکند.
برخلاف تحلیلهایی که بر این فرض استوارند که هنجارهای اجتماعی تعیین کنندهٔ رفتارها هستند، آنالیز شبکههای اجتماعی به بررسی وسعت تاثیرگذاری ساختار و ترکیب رشتهها بر هنجارها میپردازد.
شکل یک شبکهٔ اجتماعی به تعیین میزان سودمندی شبکه برای افراد آن شبکه کمک میکند. به طور جزئی شبکههای محکم برای اعضایشان نسبت به شبکههایی که تعداد زیادی اتصالات ضعیف برای افراد خارج از شبکهٔ اصلی دارند، کمتر مفید واقع میشوند. بیشتر شبکههای باز با اتصالات اجتماعی و رشتههای ضعیف، شانس بیشتری برای دسترسی به ایدهها و دست آوردهای جدید نسبت به شبکههای بسته با رشتههای طویل فراهم میآورد. به بیان دیگر گروهی از دوستان که تنها دارای ارتباط با یکدیگر هستند، اطلاعات و دست آوردهای یکسانی را به اشتراک میگذارند. اما گروهی از افراد که دارای ارتباط با بخشهای اجتماعی دیگر هستند شانس بیشتری برای دسترسی به محدودهٔ وسیعتری از اطلاعات دارند. افراد برای دستیابی به موفقیت بهتر است که با شبکههای گوناگونی ارتباط داشته باشند تا اینکه ارتباطات زیادی درون یک شبکه داشته باشند. به طور مشابه افراد میتوانند تأثیرگذاری و ایفای نقش به عنوان واسطه در برقراری ارتباط بین دو شبکه که به هم متصل نیستند را تمرین کنند.(این کار پر کردن سوراخهای ساختاری نامیده میشود.)
آنالیز شبکههای اجتماعی چشم انداز متناوبی را ایجاد میکند که در آن خواص افراد نسبت به ارتباطات و رشتههای میان آنها در شبکه از اهمیت کمتری برخوردار است. این معبر ایجاد شدهاست تا برای توضیح بسیاری از پدیدههای جهان واقعی مفید واقع شود، اما مجال کمتری برای نمایندگیهای فردی باقی میگذارد تا توانمندیهای فردیشان روی موفقیت تأثیرگذار باشد زیرا بخش زیادی از این توانمندیها درون ساختار شبکه باقی میماند.
شبکههای اجتماعی برای بررسی چگونگی تأثیرات متقابل میان تشکیلات، توصیف بسیاری از اتصالات غیررسمی که مجریان را به یکدیگر متصل میکند، نیز مورد استفاده قرار گرفتهاست و در این زمینهها نیز به خوبی برقراری ارتباطات فردی میان کارمندان در سازمانهای مختلف عمل میکند. شبکههای اجتماعی نقش کلیدی در موفقیتهای تجاری و پیشرفتهای کاری ایفا میکنند. شبکهها راههایی را برای شرکتها فراهم میکند که اطلاعات جمع آوری کنند، از رقابت بپرهیزند و حتی برای تنظیم قیمتها و سیاستها با هم تبانی کنند.
آشنایی با شبکههای اجتماعی اینترنتی
فضای مجازی مجال شکلگیری اجتماعات جدید از کاربران را فراهم میکند. از زمان تونیس (Tonnies) و تلاش او برای تعریف دو گونه تجمع انسانی یعنی «اجتماع» در مقابل «جامعه» (گزلشافت و گمنشافت) به بعد همه متفکران علوم اجتماعی و فرهنگی «رو در رو بودن»، «محدودیت تعداد»، و «ابتناء بر روابط عاطفی و نه روابط عقلانی را از خصائص بنیانی»اجتماع" عنوان کردهاند.
هر چند روابط کاربران فضای مجازی رابطهای با واسطهاست و نه رو در رو، بسیاری از مطالعه کنندگان اینترنت تمایل دارند از اصطلاح «اجتماع» برای اشاره به جمع کاربران استفاده کنند.
در این میان تلاشهای متعددی در حال انجام است تا حوزه و دامنه معنایی کاربردهای جدید این اصطلاح را برای اشاره به تجمعات کاربران فضای مجازی، روشن سازد. ازجمله میتوان به تلاشهای خانم شلینی ونچرلی اشاره کرد.
نظرات ونچرلی در سایت USINFO ارائه شدهاست. او به شبکهها و سازمانهای رسمی که به سامان بخشیدن به روابط و مقررات ارتباطاتی در فضای مجازی اشتغال دارند میپردازد و در ادامه به موضوع اجتماعات کاربران و خصوصیتهای آنها اشاره میکند.
شبکههای اجتماعی برپایه اینترنت از قبیل facebook.com و myspace.com در بین جوانان آمریکایی محبوبیت به سزایی کسب کردهاند. این شبکههای اجتماعی درعین حال که فضاهایی هستند که درآنها افراد دوستان جدیدی پیدا میکنند و یا دوستان قدیمی خود را در جریان تغییرات زندگی شان قرار میدهند، مکانهایی برای تبادل نظر هستند که در آنها جوانان عقاید و نظرات خود را با هم به اشتراک میگذارند.
این قابلیت که یک جوان بتواند با امثال خود در کشورهای دیگر جهان ارتباط برقرار کند باعث میشود تا این شبکهها به مکانی تبدیل شوند که در آنها ایدههای جدید معرفی میشوند و مورد بحث قرار میگیرند.
شبکههای اجتماعی اینترنتی در دنیا
استفاده از خدمات شبکههای اجتماعی، روزبهروز محبوبیت بیشتری پیدا میکند. هماکنون سایتهای شبکههای اجتماعی، بعد از پرتالهای بزرگی مثل یاهو یا اماسان موتورهای جستجو مثل گوگل، تبدیل به پراستفادهترین خدمت اینترنتی شدهاند.
خیلی از نهادهای مختلف جهانی و اینترنتی با اهداف گوناگون که مهمترین آنها تجاری و تبلیغاتی است، دست بهراهاندازی شبکههای اجتماعی زده یا درصدد خرید سهام مهمترین شبکههای اجتماعی دنیا هستند؛ مثل رقابت اخیر گوگل و مایکروسافت برسر سایت مایاسپیس و فیسبوک.
در رقابت مایاسپیس، پرکاربرترین سایت شبکه اجتماعی دنیا گوگل و در رقابت برسر فیسبوک، مایکروسافت برندهشد. ضمن اینکه یاهو هم بعد از راهاندازی نهچندان موفق «۳۶۰درجه»، به دنبال راهاندازی یک شبکه اجتماعی دیگر بهاسم «مش» است.
ناسا هم برای جذب جوانان علاقهمند به موضوعات هوافضا، یک شبکه اجتماعی را بر پایه استانداردهای نسل آینده وب و تنظیمات سایت خود راه اندازی کرد.
این شبکه اجتماعی جدید که مای ناسا نام دارد، بخشهای بسیار پیشرفتهای دارد که کاربران میتوانند از طریق آنها تصاویر و تفکرات خود را درباره موضوعات فضایی با سایر کاربران بهاشتراک بگذارند. مای ناسا یک نمونه بسیار اصلی از شبکههای اجتماعی است و یک محیط مجازی را میسازد که در آن کاربران میتوانند تمام موضوعات و مقولات مورد نظر و شخصی خود را جمعآوری کنند.
کاربران میتوانند در این شبکه اجتماعی جدید برای خود وبلاگ درست کنند و از وبلاگهایی نظیر وبلاگ یکی از مدیران ناسا که روایت بسیار شگفتانگیزی را از ماموریتهای فضایی خود نقل کردهاست، استفاده کنند.
شبکههای اجتماعی، بهخصوص آنهایی که کاربردهای معمولی و غیرتجاری دارند، مکانهایی در دنیای مجازی هستند که مردم خود را بهطور خلاصه معرفی میکنند و امکان برقراری ارتباط بین خود و همفکرانشان را در زمینههای مختلف مورد علاقه فراهم میکنند. البته در بعضی از این موارد مثل مایناسا سمت و سوی اصلی این علایق (فضا) مشخص است.
به نظر میرسد شبکههای اجتماعی در اینترنت، در آینده بیش از این هم اهمیت پیدا میکند. این شبکهها هماکنون هم روزبهروز محبوبتر میشوند. با شبکههای اجتماعی، دیگر افراد برای پیداکردن همفکران خود در موارد گوناگون تنها نیستند؛ یک دوست آرژانتینی برای تحلیل بازیهای بوکاجونیورز، یک دوست سوئدی برای صحبت در مورد فناوری اطلاعات، یک دوست فرانسوی برای صحبت در مورد فیلمهای سینمای مستقل یا یک دوست مصری برای بحث در مورد مسائل خاورمیانه.
مسلماً در دنیای حقیقی هیچگاه افراد علاقهمند، موضوعات موردعلاقه خود را به این گستردگی نمییافتند. این دلیل و شاید دلایل مشابه این، سرویسهای شبکههای اجتماعی را به یکی از مهمترین ارکان اینترنت در دو، سه سال اخیر تبدیل کردهاست.
گسترش شبکههای اجتماعی اینترنتی در ایران
در یک ساله اخیر وب سایت های که با نام شبکه اجتماعی در ایران فعالیت می کنن به طور روز افزونی در حال افزایش است تب فیسبوکی در ایران اوج گرفته و شبکه های اجتماعی زیادی که تا حدودی هم شبه به فیس بوک است خیلی زیاد شده تا یکسال قبل وقتی در گوگل کلمه شبکه اجتماعی را جستجو می کردیم به سختی در 5 صفح اول جستجو اثری از شبکه های اجتماعی بود ولی امروز وقتی کلمه شبکه اجتماعی را جستجو می کنی بالغ بر 21,800,000 نتایج جستجو نشان می دهد که نشانگر روشد بسیار چشمگیر آن در ایران است.
شبکههای اجتماعی اینترنتی در ایران
حدود ۴ سال پیش بود که مفهوم شبکههای اجتماعی بهطور گسترده با حضور اورکات در میان کاربران ایرانی رواج پیدا کرد و در مدت کوتاهی آنقدر سریع رشد کرد که پس از برزیل و آمریکا، ایران سومین کشور حاضر در اورکات شد.
اما درهمان زمان شایعاتی هم رواج پیدا کرد که نسبت به عضویت در این انجمن هشدار دادند. میگفتند که گوگل (گرداننده اورکات) از این طریق به اطلاعات شخصی، علایق و نظرات و ارتباطات خصوصی افراد دست پیدا میکند و ممکن است این کار باعث ازبینرفتن امنیت شخصی افراد شود.
چندی پیش دادگاهی در برزیل، از گوگل تقاضای اجرای محدودیتهایی در سرویس اورکات کرد تا گروههای نژادپرستانه از اورکات حذف شوند. البته گوگل از اجرای این تقاضا سرباز زدهاست.
گوگل اعلام کرده چون سرورهای گوگل که مرتبط با اورکات هستند، در آمریکا قرار دارند، کلیه امور مربوط به آن مطابق قوانین آمریکا بوده و نمیتوان قوانین برزیل یا سایر دولتها را در آن دخیل کرد اما گروههای خاصی را که بر خلاف قوانین داخلی اورکات بودهاند، شناسایی و بستهاست.
هرچند که یاهو ۳۶۰ هنوز مورد استفاده قرارمیگیرد، اما کاربران ایرانی به سراغ سایتهای شبکههای اجتماعی کمتر معروف و حتی شبکههای اجتماعی ایرانی میروند.
با نگاهی به تعداد کاربران ۲۴ شبکه اجتماعی پرطرفدار دنیا (جدول)، به آسانی میشود میزان تاثیرگذاری این شبکهها را درک کرد. این شبکهها مجموعاً بیش از یک میلیارد کاربر دارند و اگرچه تعامل زیادی بین کاربران آنها هست، اما بههرحال رقم فوقالعادهای است.
شبکهٔ اجتماعی ساختاری اجتماعی است که از گره هایی(که عموماً فردی یا سازمانی هستند) تشکیل شدهاست که توسط یک یا چند نوع خاص از وابستگی به هم متصل اند، برای مثال: قیمتها، الهامات، ایدهها و تبادلات مالی، دوستها، خویشاوندی، تجارت، لینکهای وب، سرایت بیماریها (اپیدمولوژی) یا مسیرهای هواپیمایی. ساختارهای حاصل اغلب بسیار پیچیده هستند.
تحلیل شبکههای اجتماعی روابط اجتماعی را با اصطلاحات رأس و یال مینگرد. رأسها بازیگران فردی درون شبکهها هستند و یالها روابط میان این بازیگران هستند.انواع زیادی از یالها میتواند میان رأسها وجود داشته باشد. نتایج تحقیقات مختلف بیانگر آن است که می توان از ظرفیت شبکههای اجتماعی در بسیاری از سطوح فردی و اجتماعی به منظور شناسایی مسائل و تعیین راه حل آنها، برقراری روابط اجتماعی، اداره امور تشکیلاتی، سیاستگذاری و رهنمون سازی افراد در مسیر دستیابی به اهداف استفاده نمود. به عنوان مثال، نتایج مطالعات در حوزه سیاستگذاری گردشگری نشان می دهد شبکههای اجتماعی به واسطه تاثیرگذاری روی متغیرهای رفتاری بر جذب گردشگران خارجی به مقاصد گوناگون تاثیرگذار هستند و می توان از این شبکه ها به منظور شکلگیری اعتماد و کاهش ریسک تصمیمگیری کاربران در انتخاب یک مقصد خاص گردشگری بهره گرفت.
در سادهترین شکل یک شبکهٔ اجتماعی نگاشتی از تمام یالهای مربوط، میان رأسهای مورد مطالعهاست. شبکهٔ اجتماعی هم چنین میتواند برای تشخیص موقعیت اجتماعی هر یک از بازیگران مورد استفاده قرار گیرد. این مفاهیم غالباً در یک نمودار شبکهٔ اجتماعی نشان داده میشوند که درآن، نقطهها رأسها هستند و خطها نشانگر یالها.
در ایران علیرغم اینکه عضویت در شبکههای اجتماعی جرم تلقی نمیشود، ولی به موجب فیلترینگ آنها از جانب حکومت، حضور در این وبگاهها چون از طریق دور زدن فیلترینگ میسر است، مصداق عمل مجرمانه است.
آنالیز شبکههای اجتماعی
آنالیز شبکههای اجتماعی(مرتبط با نظریه شبکهها) به عنوان یک تکنیک کلیدی در جامعه شناسی، انسان شناسی، جغرافیا، روانشناسی اجتماعی، جامعه شناسی زبان، علوم ارتباطات، علوم اطلاعات، مطالعات سازمانی، اقتصاد و زیست شناسی مدرن همانند یک موضوع محبوب در زمینهٔ تفکر ومطالعه پدیدار شدهاست.
بالغ بر یک قرن است که مردم، شبکهٔ اجتماعی مجازی را برای اشارههای ضمنی به مجموعه روابط پیچیده میان افراد درسیستمهای اجتماعی در تمامی مقیاسها از روابط بین فردی گرفته تا بینالمللی مورد استفاده قرار میدهند. در سال ۱۹۴۵ J. A. Barnes برای نخستین بار از اصطلاح قاعده مند برای مشخص کردن الگوهایی از رشتهها استفاده کرد که مفاهیم را مشخص میکنند و به صورت رایج توسط عموم و دانشمندان علوم اجتماعی مورد استفاده قرار میگیرد : گروههای محدود (مانند: قبایل و خانوادهها) و طبقات اجتماعی(مانند: جنسیّت و قومیت). دانشورانی چون : S.D. Berkowitz, Stephen Borgatti, Ronald Burt, Linton Freeman, Mark Granovetter, Peter Marsden, Nicholas Mullins, Anatol Rapoport, Stanley Wasserman, Barry Wellman, and Harrison White کاربرد شبکههای اجتماعی را به تفصیل بیان کردهاند.
آنالیز شبکههای اجتماعی از طریق احکام نظری و روشها و تحقیقهای مربوط به آن از یک صنعت ضمنی به معبری تحلیلی برای پارادایمها تغییر یافتهاست. برهان های تحلیلی از کل گرفته تا جزء؛ از ساختار گرفته تا روابط و افراد، از اخلاق گرفته تا رفتار همگی شبکههای سراسری را مورد بررسی قرار میدهند که در آنها، همهٔ رشتهها شامل روابط ویژهای در میان جمعیت ِ تعریف شدهاند و یا شبکههای فردی را مورد بررسی قرار میدهند که شامل رشتهها یی است که افراد مشخصی آنها را دارند از قبیل انجمنهای خصوصی.
گرایشهای تحلیلی متعددی آنالیز شبکههای اجتماعی را تمیز میدهند: هیچ فرضی وجود ندارد که گروهها، بلوکهای بنا کنندهٔ اجتماع هستند :: این معبر برای مطالعهٔ سیستمهای اجتماعی با محدودیت کمتر باز است از اجتماعات غیر محلی گرفته تا لینکهای درون وبگاهها.
آنالیز شبکههای اجتماعی علاوه بر سروکارداشتن با اشخاص (افراد، سازمانها، ایالات) به عنوان واحدهای گسستهٔ تحلیل، برروی چگونگی ساختار رشتهها که اشخاص و روابط میان آنها را تحت تاثیر قرار میدهد نیز تمرکز میکند.
برخلاف تحلیلهایی که بر این فرض استوارند که هنجارهای اجتماعی تعیین کنندهٔ رفتارها هستند، آنالیز شبکههای اجتماعی به بررسی وسعت تاثیرگذاری ساختار و ترکیب رشتهها بر هنجارها میپردازد.
شکل یک شبکهٔ اجتماعی به تعیین میزان سودمندی شبکه برای افراد آن شبکه کمک میکند. به طور جزئی شبکههای محکم برای اعضایشان نسبت به شبکههایی که تعداد زیادی اتصالات ضعیف برای افراد خارج از شبکهٔ اصلی دارند، کمتر مفید واقع میشوند. بیشتر شبکههای باز با اتصالات اجتماعی و رشتههای ضعیف، شانس بیشتری برای دسترسی به ایدهها و دست آوردهای جدید نسبت به شبکههای بسته با رشتههای طویل فراهم میآورد. به بیان دیگر گروهی از دوستان که تنها دارای ارتباط با یکدیگر هستند، اطلاعات و دست آوردهای یکسانی را به اشتراک میگذارند. اما گروهی از افراد که دارای ارتباط با بخشهای اجتماعی دیگر هستند شانس بیشتری برای دسترسی به محدودهٔ وسیعتری از اطلاعات دارند. افراد برای دستیابی به موفقیت بهتر است که با شبکههای گوناگونی ارتباط داشته باشند تا اینکه ارتباطات زیادی درون یک شبکه داشته باشند. به طور مشابه افراد میتوانند تأثیرگذاری و ایفای نقش به عنوان واسطه در برقراری ارتباط بین دو شبکه که به هم متصل نیستند را تمرین کنند.(این کار پر کردن سوراخهای ساختاری نامیده میشود.)
آنالیز شبکههای اجتماعی چشم انداز متناوبی را ایجاد میکند که در آن خواص افراد نسبت به ارتباطات و رشتههای میان آنها در شبکه از اهمیت کمتری برخوردار است. این معبر ایجاد شدهاست تا برای توضیح بسیاری از پدیدههای جهان واقعی مفید واقع شود، اما مجال کمتری برای نمایندگیهای فردی باقی میگذارد تا توانمندیهای فردیشان روی موفقیت تأثیرگذار باشد زیرا بخش زیادی از این توانمندیها درون ساختار شبکه باقی میماند.
شبکههای اجتماعی برای بررسی چگونگی تأثیرات متقابل میان تشکیلات، توصیف بسیاری از اتصالات غیررسمی که مجریان را به یکدیگر متصل میکند، نیز مورد استفاده قرار گرفتهاست و در این زمینهها نیز به خوبی برقراری ارتباطات فردی میان کارمندان در سازمانهای مختلف عمل میکند. شبکههای اجتماعی نقش کلیدی در موفقیتهای تجاری و پیشرفتهای کاری ایفا میکنند. شبکهها راههایی را برای شرکتها فراهم میکند که اطلاعات جمع آوری کنند، از رقابت بپرهیزند و حتی برای تنظیم قیمتها و سیاستها با هم تبانی کنند.
آشنایی با شبکههای اجتماعی اینترنتی
فضای مجازی مجال شکلگیری اجتماعات جدید از کاربران را فراهم میکند. از زمان تونیس (Tonnies) و تلاش او برای تعریف دو گونه تجمع انسانی یعنی «اجتماع» در مقابل «جامعه» (گزلشافت و گمنشافت) به بعد همه متفکران علوم اجتماعی و فرهنگی «رو در رو بودن»، «محدودیت تعداد»، و «ابتناء بر روابط عاطفی و نه روابط عقلانی را از خصائص بنیانی»اجتماع" عنوان کردهاند.
هر چند روابط کاربران فضای مجازی رابطهای با واسطهاست و نه رو در رو، بسیاری از مطالعه کنندگان اینترنت تمایل دارند از اصطلاح «اجتماع» برای اشاره به جمع کاربران استفاده کنند.
در این میان تلاشهای متعددی در حال انجام است تا حوزه و دامنه معنایی کاربردهای جدید این اصطلاح را برای اشاره به تجمعات کاربران فضای مجازی، روشن سازد. ازجمله میتوان به تلاشهای خانم شلینی ونچرلی اشاره کرد.
نظرات ونچرلی در سایت USINFO ارائه شدهاست. او به شبکهها و سازمانهای رسمی که به سامان بخشیدن به روابط و مقررات ارتباطاتی در فضای مجازی اشتغال دارند میپردازد و در ادامه به موضوع اجتماعات کاربران و خصوصیتهای آنها اشاره میکند.
شبکههای اجتماعی برپایه اینترنت از قبیل facebook.com و myspace.com در بین جوانان آمریکایی محبوبیت به سزایی کسب کردهاند. این شبکههای اجتماعی درعین حال که فضاهایی هستند که درآنها افراد دوستان جدیدی پیدا میکنند و یا دوستان قدیمی خود را در جریان تغییرات زندگی شان قرار میدهند، مکانهایی برای تبادل نظر هستند که در آنها جوانان عقاید و نظرات خود را با هم به اشتراک میگذارند.
این قابلیت که یک جوان بتواند با امثال خود در کشورهای دیگر جهان ارتباط برقرار کند باعث میشود تا این شبکهها به مکانی تبدیل شوند که در آنها ایدههای جدید معرفی میشوند و مورد بحث قرار میگیرند.
شبکههای اجتماعی اینترنتی در دنیا
استفاده از خدمات شبکههای اجتماعی، روزبهروز محبوبیت بیشتری پیدا میکند. هماکنون سایتهای شبکههای اجتماعی، بعد از پرتالهای بزرگی مثل یاهو یا اماسان موتورهای جستجو مثل گوگل، تبدیل به پراستفادهترین خدمت اینترنتی شدهاند.
خیلی از نهادهای مختلف جهانی و اینترنتی با اهداف گوناگون که مهمترین آنها تجاری و تبلیغاتی است، دست بهراهاندازی شبکههای اجتماعی زده یا درصدد خرید سهام مهمترین شبکههای اجتماعی دنیا هستند؛ مثل رقابت اخیر گوگل و مایکروسافت برسر سایت مایاسپیس و فیسبوک.
در رقابت مایاسپیس، پرکاربرترین سایت شبکه اجتماعی دنیا گوگل و در رقابت برسر فیسبوک، مایکروسافت برندهشد. ضمن اینکه یاهو هم بعد از راهاندازی نهچندان موفق «۳۶۰درجه»، به دنبال راهاندازی یک شبکه اجتماعی دیگر بهاسم «مش» است.
ناسا هم برای جذب جوانان علاقهمند به موضوعات هوافضا، یک شبکه اجتماعی را بر پایه استانداردهای نسل آینده وب و تنظیمات سایت خود راه اندازی کرد.
این شبکه اجتماعی جدید که مای ناسا نام دارد، بخشهای بسیار پیشرفتهای دارد که کاربران میتوانند از طریق آنها تصاویر و تفکرات خود را درباره موضوعات فضایی با سایر کاربران بهاشتراک بگذارند. مای ناسا یک نمونه بسیار اصلی از شبکههای اجتماعی است و یک محیط مجازی را میسازد که در آن کاربران میتوانند تمام موضوعات و مقولات مورد نظر و شخصی خود را جمعآوری کنند.
کاربران میتوانند در این شبکه اجتماعی جدید برای خود وبلاگ درست کنند و از وبلاگهایی نظیر وبلاگ یکی از مدیران ناسا که روایت بسیار شگفتانگیزی را از ماموریتهای فضایی خود نقل کردهاست، استفاده کنند.
شبکههای اجتماعی، بهخصوص آنهایی که کاربردهای معمولی و غیرتجاری دارند، مکانهایی در دنیای مجازی هستند که مردم خود را بهطور خلاصه معرفی میکنند و امکان برقراری ارتباط بین خود و همفکرانشان را در زمینههای مختلف مورد علاقه فراهم میکنند. البته در بعضی از این موارد مثل مایناسا سمت و سوی اصلی این علایق (فضا) مشخص است.
به نظر میرسد شبکههای اجتماعی در اینترنت، در آینده بیش از این هم اهمیت پیدا میکند. این شبکهها هماکنون هم روزبهروز محبوبتر میشوند. با شبکههای اجتماعی، دیگر افراد برای پیداکردن همفکران خود در موارد گوناگون تنها نیستند؛ یک دوست آرژانتینی برای تحلیل بازیهای بوکاجونیورز، یک دوست سوئدی برای صحبت در مورد فناوری اطلاعات، یک دوست فرانسوی برای صحبت در مورد فیلمهای سینمای مستقل یا یک دوست مصری برای بحث در مورد مسائل خاورمیانه.
مسلماً در دنیای حقیقی هیچگاه افراد علاقهمند، موضوعات موردعلاقه خود را به این گستردگی نمییافتند. این دلیل و شاید دلایل مشابه این، سرویسهای شبکههای اجتماعی را به یکی از مهمترین ارکان اینترنت در دو، سه سال اخیر تبدیل کردهاست.
گسترش شبکههای اجتماعی اینترنتی در ایران
در یک ساله اخیر وب سایت های که با نام شبکه اجتماعی در ایران فعالیت می کنن به طور روز افزونی در حال افزایش است تب فیسبوکی در ایران اوج گرفته و شبکه های اجتماعی زیادی که تا حدودی هم شبه به فیس بوک است خیلی زیاد شده تا یکسال قبل وقتی در گوگل کلمه شبکه اجتماعی را جستجو می کردیم به سختی در 5 صفح اول جستجو اثری از شبکه های اجتماعی بود ولی امروز وقتی کلمه شبکه اجتماعی را جستجو می کنی بالغ بر 21,800,000 نتایج جستجو نشان می دهد که نشانگر روشد بسیار چشمگیر آن در ایران است.
شبکههای اجتماعی اینترنتی در ایران
حدود ۴ سال پیش بود که مفهوم شبکههای اجتماعی بهطور گسترده با حضور اورکات در میان کاربران ایرانی رواج پیدا کرد و در مدت کوتاهی آنقدر سریع رشد کرد که پس از برزیل و آمریکا، ایران سومین کشور حاضر در اورکات شد.
اما درهمان زمان شایعاتی هم رواج پیدا کرد که نسبت به عضویت در این انجمن هشدار دادند. میگفتند که گوگل (گرداننده اورکات) از این طریق به اطلاعات شخصی، علایق و نظرات و ارتباطات خصوصی افراد دست پیدا میکند و ممکن است این کار باعث ازبینرفتن امنیت شخصی افراد شود.
چندی پیش دادگاهی در برزیل، از گوگل تقاضای اجرای محدودیتهایی در سرویس اورکات کرد تا گروههای نژادپرستانه از اورکات حذف شوند. البته گوگل از اجرای این تقاضا سرباز زدهاست.
گوگل اعلام کرده چون سرورهای گوگل که مرتبط با اورکات هستند، در آمریکا قرار دارند، کلیه امور مربوط به آن مطابق قوانین آمریکا بوده و نمیتوان قوانین برزیل یا سایر دولتها را در آن دخیل کرد اما گروههای خاصی را که بر خلاف قوانین داخلی اورکات بودهاند، شناسایی و بستهاست.
هرچند که یاهو ۳۶۰ هنوز مورد استفاده قرارمیگیرد، اما کاربران ایرانی به سراغ سایتهای شبکههای اجتماعی کمتر معروف و حتی شبکههای اجتماعی ایرانی میروند.
با نگاهی به تعداد کاربران ۲۴ شبکه اجتماعی پرطرفدار دنیا (جدول)، به آسانی میشود میزان تاثیرگذاری این شبکهها را درک کرد. این شبکهها مجموعاً بیش از یک میلیارد کاربر دارند و اگرچه تعامل زیادی بین کاربران آنها هست، اما بههرحال رقم فوقالعادهای است.
ساعت : 9:42 pm | نویسنده : admin
|
مطلب بعدی