ارسالها: 175
#1
Posted: 6 Nov 2012 00:39
درود
یک تاپیک میخواستم با موضوع کامپیوتر مهندسی نرم افزار | Computer Software Engineering که در ان مسائل مربوط به این رشته درسها و مقالات ، پروژه ها و ... قرار داده میشه
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#2
Posted: 11 Nov 2012 18:51
تکنولوژی مهندسی نرم افزار
مهندسی نرمافزار پیشهای است که به یاری دانش رایانه و دیگر فناوریها و روشها به آفریدن و نگاهداری نرمافزار رایانهای میپردازد.
مسائل اصلی مهندسی نرمافزار تولید نرمافزار بر اساس موارد زیر است:
الزام های تعیین شده
در زمان تعیین شده
در محدودهٔ بودجه پیشبینی شده
مهندسی نرمافزار طراحی، برنامه نویسی، توسعه، مستندسازی و نگهداری نرمافزار با بکارگرفتن روشهای فنی و عملی از علوم کامپیوتر، مدیریت پروژه، مهندسی، محدوده کاربرد، طراحی رابط، مدیریت تجهیزات دیجیتال و سایر زمینهها است.
کاربردهای مهندسی نرمافزار دارای ارزشهای اجتماعی و اقتصادی هستند، زیرا بهرهوری مردم را بالا برده، چند و چون زندگی آنان را بهتر میکنند. مردم با بهرهگیری از نرمافزار، توانایی انجام کارهایی را دارند که قبل از آن برایشان شدنی نبود. نمونههای از این دست نرمافزارها عبارتاند از: سامانههای توکار، نرمافزار اداری، بازیهای رایانهای، و اینترنت.
فناوریها و خدمات مهندسی نرمافزار به کاربران برای بهبود بهرهوری و کیفیت یاری میرساند. نمونههایی از زمینههای بهبود: پایگاه دادهها، زبانها، کتابخانهها، الگوها، فرآیندها و ابزار.
پیشینه مهندسی نرمافزار
اصطلاح مهندسی نرمافزار بعد از سال ۱۹۶۸ شناخته شد. این اصطلاح طی کنفرانس «مهندسی نرمافزار ناتو ۱۹۶۸» (که در گارمیش آلمان برگزار شد) توسط ریاست کنفرانس F.L. Bauer معرفی شد و از آن پس بطور گسترده مورد استفاده قرار گرفت.
اصطلاح مهندسینرمافزار عموماً به معانی مختلفی به کار میرود:
بهعنوان یک اصطلاح غیر رسمی امروزی برای محدوده وسیع فعالیتهایی که قبلا برنامهنویسی و تحلیل سیستمها نامیده میشد.
بهعنوان یک اصطلاح جامع برای تمامی جنبههای عملی برنامهنویسی کامپیوتر، در مقابل تئوری برنامه نویسی کامپیوتر، که علوم کامپیوتر نامیده میشود.
بهعنوان اصطلاح مجسم کننده طرفداری از یک رویکرد خاص نسبت به برنامهنویسی کامپیوتر که اصرار میکند، مهندسی نرمافزار، بجای انکه هنر یا مهارت باشد، باید بهعنوان یک رشته عملی مهندسی تلقی شود و از جمع کردن و تدوین روشهای عملی توصیه شده به شکل متدولوژیهای مهندسی نرمافزار طرفداری میکند.
مهندسی نرمافزار عبارتست از : الف) کاربرد یک رویکرد سیستماتیک، انتظام یافته، قابل سنجش نسبت به توسعه، عملکرد و نگهداری نرمافزار، که کاربرد مهندسی در نرمافزار است و ب) مطالعه روشهای موجود در استاندارد IEEE
محدوده مهندسی نرمافزار و تمرکز آن
مهندسی نرمافزار به مفهوم توسعه و بازبینی یک سیستم نرمافزاری مربوط میباشد. این رشته علمی با شناسایی، تعریف، فهمیدن و بازبینی خصوصیات مورد نیاز نرمافزار حاصل سر و کار دارد. این خصوصیات نرمافزاری ممکن است شامل: پاسخگویی به نیازها، اطمینانپذیری، قابلیت نگهداری، در دسترس بودن، آزمونپذیری، استفاده آسان، قابلیت حمل و سایر خصوصیات باشد.
مهندسی نرمافزار ضمن اشاره به خصوصیات فوق، مشخصات معین طراحی و فنیای را آماده میکند که اگر بدرستی پیادهسازی شود، نرمافزاری را تولید خواهد کرد که میتواند بررسی شود که آیا این نیازمندیها را تامین میکند یا خیر.
مهندسی نرمافزار همچنین با خصوصیات پروسه توسعه نرمافزاری در ارتباط است. در این رابطه، با خصوصیاتی مانند هزینه توسعه نرمافزار، طول مدت توسعه نرمافزار و ریسکهای توسعه نرمافزار درگیر است.
نیاز به مهندسی نرمافزار
نرمافزار عموماً از محصولات و موقعیتهایی شناخته میشود که قابلیت اطمینان زیادی از آن انتظار میرود، حتی در شرایط طاقت فرسا، مانند نظارت و کنترل نیروگاههای انرژِی هستهای، یا هدایت یک هواپیمای مسافربری در هوا، چنین برنامههایی شامل هزاران خط کد هستند، که از نظر پیچیدگی با پیچیدهترین ماشینهای مدرن قابل مقایسهاند. بهعنوان مثال یک هواپیمای مسافربری چند میلیون قطعه فیزیکی دارد (و یک شاتل فضایی خدود ده میلیون بخش دارد)، در حالی که نرمافزار هدایت چنین هواپیمایی میتواند تا ۴ میلیون خط کد داشته باشد.
تکنولوژیها و روشهای عملی
مهندسین نرمافزار طرفدار تکنولوژیها و روشهای عملی بسیار متفاوت و مختلفی هستند، که با هم ناسازگارند. این بحث در سالهای دهه ۶۰ میلادی شروع شد و ممکن است برای همیشه ادامه پیدا کند. مهندسین نرمافزار از تکنولوژیها و روشهای عملی بسیار متنوعی استفاده میکنند. کسانی که کار عملی میکنند از تکنولوژیهای متنوعی استفاده میکنند : کامپایلرها، منابع کد، پردازشگرهای متن. کسانی که کار عملی میکنند از روشهای عملی بسیار متنوعی استفاده میکنند تا تلاشهایشان را اجرا و هماهنگ کنند : برنامه نویسی در دستههای دونفری، بازبینی کد، و جلسات روزانه. هدف هر مهندس نرمافزار بایستی رسیدن به ایدههای جدید خارج از مدلهای طراحی شده قبلی باشد، که باید شفاف بوده و بخوبی مستند شده باشد.
با وجود رشد فزاینده اقتصادی و قابلیت تولید فزایندهای که توسط نرمافزار ایجاد شده، هنوز هم بحث و جدلهای ماندگار درباره کیفیت نرمافزار ادامه دارند.
ماهیت مهندسی نرمافزار
دیوید پارناس گفتهاست که مهندسی نرمافزار یک شکل از مهندسی است. استیو مککانل گفتهاست که هنوز اینطور نیست، ولی مهندسی نرمافزار باید یک شکل از مهندسی بشود. دونالد کنوت گفتهاست که برنامه نویسی یک هنر است.
دیوان فعالیتهای آماری آمریکا مهندسان نرمافزار را به عنوان زیرگروهی از «متخصصین کامپیوتر»، با فرصتهای شغلیای مانند «دانشمند کامپیوتر»، «برنامه نویس» و «مدیر شبکه» دسته بندی کردهاست. BLS تمام مهندسین دیگر این شاخه علمی، که شامل مهندسین سختافزار کامپیوتر نیز هست، را بهعنوان «مهندسین» دسته بندی میکند.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ویرایش شده توسط: Persian_Empire
ارسالها: 175
#3
Posted: 11 Nov 2012 19:20
نرمافزار
نرم افزار، مجموعه از دستور العمل های دقیق و مرحله به مرحله است که هدف خاصی را دنبال می کند.
نرمافزار یا برنامه (به انگلیسی: Software). ظاهراً، اولین بار جان تاکی در سال ۱۹۵۸ این واژه را بهاین معنا بهکار بردهاست. احتمالاً این واژه در مقابل سختافزار (به انگلیسی: Hardware) به کار برده اند که بسیار پیش از پیدایش رایانه (به معنای اسباب و اشیاء) بهکار میرفتهاست. اگرچه «نرمافزار رایانهای» و «برنامه رایانهای» یک معنی دارند و اصطلاح برنامه (به انگلیسی: program) به است.
دو گروه کلی نرم افزارها
نرمافزارهای رایانه را به دو دسته بزرگ میتوان تقسیم بندی کرد:
نرمافزار سیستم (به انگلیسی: System Sotfware)
نرمافزار کاربردی (به انگلیسی: Application Software)
می توان گفت نرمافزار کاربردی برنامه های مورد استفاده ی کاربرند و نرمافزار سیستم مدیریت رایانه را برعهده دارند. مهم ترین نرم افزار سیستم،سیستم عامل است.
سه گروه کلی نرم افزارهای معماری
از لحاظ معماری نرم افزار ها به دسته های زیر تقسیم می شوند:
Client Base
Server Base
Client-Server Base
امروزه واژه نرمافزار را در معنانی جز معنی برنامه رایانهای نیز بهکار میبرند. مثلاً در فن مدیریت برای اشاره به روشها و دانش فنی (در مقابل وسائل و تجهیزات و نیروی انسانی). نرم افزارها انواع گوناگونی دارند که مهم ترین دسته بندی آنها دسته ی تجاری و آزاد است.به خصوص با رویکردهای طرح های گنو و لینوکس معنای عمیق تری به نرم افزارهای آزاد داده شده تا آنجا که برخی نرم افزار ها را نمود فرهنگ می دانند.نرم افزار ها را برنامه نویسان تدوین کرده و انتشار می دهند .این برنامه نویسان ممکن است در یک شرکت مشغول کار باشند یا در خانه برنامه نویسی کنند مانند برنامه نویسان برخی نرم افزارهای لینوکس. امروزه بیشتر کاربران تنها با ظاهر گرافیکی این برنامه ها کار می کنند و اقدامات بسیاری از آنها از دید کاربر پنهان می ماند به عبارتی هر نرم افزار مجموعی از کدهایی است که از الگوریتمی خاص پشتیبانی می کنند این کدها خود با کدهای گرافیکی آمیخته شده و بسیاری از اقدامات برنامه به دور از چشم کاربر عادی رخ می دهد. برنامه ها با کد هایی نوشته می شوند که بعداً یک خواننده کد آن را در رایانه کاربر اجرا میکند.
رقابت نرمافزاری
در حال حاضر نرمافزارهای کامپیوتری فراوان را میتوان در بازار یافت که به طور جدی به رقابت خود برای بقا ادامه میدهند. از مسائل قابل ذکر در این مورد میتوان به خرید سهام شرکتهای نرمافزاری کوچک و بزرگ توسط شرکتهای دیگر اشاره نمود. همچنان که شرکت بزرگ گوگل به خرید سهام شرکتهای بزرگ همچنان ادامه میدهد، در مدت کمی توانسته بسیاری از شرکتها را تحت سلطه خود درآورد.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#4
Posted: 11 Nov 2012 20:05
فرآیند تولید نرمافزار
فرآیند تولید نرم افزار که با عنوان «چرخه حیات تولید نرم افزار» نیز شناخته میشود، ساختاری است که روی توسعه و تولید محصولات نرم افزاری اعمال میشود. عبارتهای مشابهی چون «چرخه حیات نرم افزار» و «فرآیند نرم افزار» در این رابطه استفاده میشود. مدلهای گوناگونی نظیر فرآیندهای(خاص) وجود دارند که هر کدام خط مشی مختص(آن فرآیندها) برای انجام کارها و فعالیتهای متنوع در طول فرآیندها را مشخص میکنند. برخی عنوان میکنند که «طرح(مدل) چرخه حیات» یک عبارت بسیار عمومی است و «فرآیند تولید نرم افزار» خیلی عبارت اختصاصی تری است. برای مثال خیلی از فرآیندهای تولید نرم افزار ویژهای هستند که خود زیر مجموعه چرخه حیات حلزونی به شمار میروند.
فعالیتهای تولید نرم افزار
برنامه ریزی (امکان سنجی)
از مهمترین کارها در تولید نرم افزار استخراج نیازمندیها یا تحلیل نیازمندیهای آن سیستم است. مشتریان عمومی معمولا تصور مفهومی، انتزاعی و مبهمی از نتیجه نهایی خواسته هایشان دارند و نمیدانند به درستی نرم افزار مورد نظرشان چه کاری باید انجام بدهد. در این مرحله نیازمندیهای ناتمام، پیچیده و مبهم، و حتی متضاد توسط مهندسان نرم افزار ماهر و مجرب شناسایی میشوند.در این برهه تکه نرم افزارهای آماده و تجربه شده وفعال ممکن است برای پایین آوردن ریسک(ومشکلات) نیازمندیها کمک می کنند. اول نیازمندیهای عمومی از کاربران جمع آوری می شد، و دامنه توسعه و تولید نرم افزار که باید تولید شود شناسایی و تحلیل می شود، و مستندات بصورت شفاف نوشته می شود.معمولا به این مستند، مستنددامنه یا محدوده سیستم اطلاق می شود.
برخی قابلیت ها ممکن است در ابتدای پروژه به خاطر مسائل مالی یا نیازمندیهای غیر شفاف و نامشخص خارج از محدوده پروژه باشند.اگر تولید و توسعه نرم افزار برون سپاری شود(به شرکت های خارجی محول شود)، این مستندات به عنوان مستندات قانونی و حقوقی در نظر گرفته می شود بنابراین در صورت اتفاق هرگونه دعوای حقوقی یا ابهام در مورد تعهدات داده شده به کاربر، این مسائل قابل شفاف سازی خواهد بود.
پیاده سازی، آزمایش و تست و مستند سازی
پیاده سازی آن قسمت از فرآیند تولید نرم افزار به شمار می رود که مهندسان نرم افزار در دنیای واقعی تمام کد های پروژه را می نویسند و به قول معروف برنامه نویسی می کنند.
تست و آزمون نرم افزار بخش لاینفک و مهم از فرآیند تولید نرم افزار است . این قسمت از فرآیند ها کمک می کند تا مشکلات سیستم بصورت سریع شناسایی شوند.
مستند سازی در تمام مراحل پروژه همچون : طراحی داخلی نرم افزار برای تعیین اهداف سیستم، نگهداری آینده و ارتقاء و بهبودی سیستم هرچند پروژه پایان یافته باشد انجام می شود.همچنین ممکن است این مستند سازی شامل نوشتن ساختار تکه های برنامه ظاهربرنامه کاربردی داخلی و خارجی هم باشند.این مطلب خیلی مهم است که همه چیز پروژه مستند سازی شود.
استقرار و نگهداری سیستم
استقرار و تحویل سیستم پس از اینکه تست مناسب و درخوری را گذراند و برای انتشار، فروش یا هرنوع توزیع برای محیط کار نهایی تایید شد انجام خواهد شد.
آموزش نرم افزار و پشتیبانی خیلی مهم است و خیلی از تولید کنندگان و توسعه دهندگان نرم افزارها اهمیت آن را درک نمی کنند.مهم نیست که چقدر زمان و برنامه ریزی توسط تیم تولید و توسعه نرم افزار برای ایجاد نرم افزار مصرف کرده اند اگر در آخر کار کاربری در سازمان نباشد تا آن نرم افزار را استفاده کند.مردم معمولا در برابر تغییرات مقاومت نشان می دهند و از ماجراجویی در محیط ناآشنا اجتناب می کنند، برای همین در فاز استقرار، این خیلی مهم است کلاسهای آموزشی برای کاربران جدید نرم افزار گذاشته شود.
نگهداری و ارتقاء نرم افزاری برای پوشش، مسائل پوشش داده نشده یا نیازمندیهای جدیدممکن است مدت خیلی زیادی حتی بیشتر از زمان اولیه تولید نرم افزار، زمان بگیرد. این مرحله ممکن است نیاز باشد تا کد های برنامه نویسی جدیدی که در طراحی اصلی برنامه نیز دیده نشده اضافه شود تا مسائل و مشکلات دیده نشده حل شوند یا ممکن است کاربر درخواست عملیات اصلی دیگری بکند و برنامه نویسی های جدیدی برای برآورده کردن نیازهای جدید انجام گیرد.اگر هزینه کار فاز نگهداری از ۲۵ درصد هزینه فاز قبلی (پیاده سازی)بیشتر باشد، این احتمال وجود دارد که کیفیت کلی فاز قبلی خیلی ضعیف بوده باشد.در این صورت مدیران پروژه باید گزینه ی ایجاد مجدد سیستم (یا بخشی از سیستم) را قبل از اینکه هزینه های نگهداری غیر قابل کنترل شود را مطرح کنند.
مدلهای تولید نرم افزار
مدل آبشاری
مدل آبشار فرآیند ها را به گونه ای نشان می دهد، که کجا تولید کنندگان نرم افزار(برنامه نویسان) فازهای زیر را به ترتیب انجام دهند:
شناسایی نیازمندیها (تحلیل نیازها- امکان سنجی)
طراحی نرم افزار
ایجاد و یکپارچه سازی
تست (یا تایید سیستم)
استقرار(یا نصب سیستم)
نگهداری سیستم
در سختگیرانه ترین حالت آبشاری، بعد از اینکه هر فاز کاملا پایان پذیرفت، به مرحله بعدی می رویم. بازبینی که اجازه ایجاد تغییرات در سیستم را بدهد( که ممکن است شامل تغییرات فرآیندهای کنترل رسمی باشد) فقط قبل از رفتن به مرحله بعد امکان پذیر است .همچنین بازبینی ممکن است جهت اطمینان از پایان قطعی این فاز (مرحله) بکار گرفته شود . فازی که معیارهای تکمیل آن کامل شده، معمولا با عنوان دروازه اطلاق می شود که نشان می دهد پروژه از فاز فعلی به فاز بعدی منتقل شده است .مدل آبشاری از بازبینی و تجدید نظر فازهای قبلی که کامل شده اند، ممانعت به عمل می آورد.این عدم انعطاف پذیری در مدل آبشاری محض، دست مایه انتقاد، پشتیبانی کنندگان مدلهای انعطاف پذیر است .
مدل حلزونی
خصوصیت کلیدی مدل حلزونی مدیریت ریسک در تمام مراحل چرخه تولید نرم افزار است . در سال ۱۹۸۸ میلادی بری بوهم به صورت رسمی مدل حلزونی فرآیند تولید نرم افزار را منتشر کرد، که ترکیبی از بعضی کلیدهای تایید شده متدولوژی مدل آبشاری و نمونه سازی سریع است، اما احساس می شود مدل ارائه شده تاکید در ناحیه های کلیدی(مدل آبشاری) را با متدهای دیگری همچون بررسی دقیق و تحلیل دائمی ریسک ها، سیستم های خاص مناسب برای سیستم های پیچیده و بزرگ، کوتاه تر کرده است .
مدل حلزونی این روش را با چهار نمودار که نشان دهند فعالیت های زیر است، به تصویر می کشد که فرآیند ها در چند مرحله تکرار انجام می شود :
تدوین و فرموله کردن برنامه ریزی خوب است برای : شناسایی اهداف سیستم، قسمت های انتخاب شده جهت پیاده سازی برنامه، محدودیت های واضح و مشخص پروژه.
تحلیل ریسک و مشکلات سیستم : ارزیابی تحلیلی برنامه های انتخاب شده، جهت مشخص کردن چگونگی شناسایی و از بین بردن ریسک ها.
پیاده سازی پروژه : پیاده سازی تولید نرم افزار و تایید کارایی سیستم .
مدل حلزونی مبتنی بر ریسک، بر اختیارانتخاب گزینه ها و محدودیت ها در سفارشها برای پشتیبانی استفاده مجدد نرم افزار و اینکه کیفیت نرم افزار می تواند در ادغام اهداف ویژه در تولید نرم افزار کمک می کند، تاکید می کند.
به هر حال مدل حلزونی شرایط محدود کننده زیر را دارا می باشد :
مدل حلزونی تحلیل ریسک ها را تاکید می کند و بنابراین کاربران باید این تحلیل را قبول کنند و فکری برایش بکنند(این مطالب را در نظر داشته باشند ).این مسئله نیازمند اعتماد متقابل و همچنین تمایل به هزینه کردن برای رفع ایرادات، درهنگام تولید نرم افزار است . و این دلیل استفاده شدن این مدل تولید نرم افزار پروژه های بزرگ است .
درصورتیکه در هنگام پیاده سازی تحلیل ریسک ها تاثیر منفی روی سود پروژه زیاد باشد نبایستی از مدل حلزونی استفاده گردد.
تولید و توسعه دهندگان نرم افزار بصورت فعال حواسشان به ریسکهای قابل حل خواهد بود و به دقت آنهارا در مدل حلزونی تحلیل می کنند.
مرحله اول تدوین و فرموله کردن یک برنامه برای رسیدن به اهداف با این محدودیتها، و پس از آن تلاش برای پیدا کردن و حذف تمام خطرات بالقوه(ریسک های بالقوه)از طریق تجزیه و تحلیل دقیق و در صورت لزوم، با ساخت نمونه اولیه است.اگر برخی ریسکها قابل حل نبودند در این صورت مشتریان باید تصمیم بگیرند که آیا می خواهند انجام پروژه را خاتمه دهند یا از ریسک های مورد نظر چشم پوشی کنند و به هر ترتیب ادامه دهند. در نهایت، نتایج ارزیابی شده و طراحی مرحله بعدی آغاز می شود. در حالت کلی یک مدل تکاملی است که به صورت مجموعه ای از نسخه های افزایشی توسعه میابد و همچنین در طی تکرار های اولیه ممکن است یک مدل کاغذی یا یک نمونه اولیه باشد ولی در طول تکرار های بعدی هر بار نسخه کاملتری از سیستم تولید میشود و این مدل به 3 تا 6 نواحی کاری تقسیم میشود
روش تکراری و افزایشی
روشی تکراری تولید نرم افزار اجازه ی ایجاد که پروژه در ابتدا از بخشهای کوچک شروع شود و به مرور زمان سیستم رشد کند تا کمک کند در این درگیری مشکلات مهم پیدا شوند قبل از اینکه فرضیات اشتباه باعث خراب شدن سیستم شوند. مدل تکرار فرآیند ها بوسیله تولید کنندگان نرم افزارهای تجاری انتخاب و استفاده می شود چون این مدل اجازه می دهد تا نیازهای کاربرانی که در زمان طراحی دقیقا نمی دانند چگونه نیازمندیهایشان از سیستم را معرفی کنند بصورت بالقوه برآورده شود.
روش تولید و توسعه چابک
روش مدل چابک تولید نرم افزار روش تکراری را بعنوان پایه کار استفاده می کند اما طرفداری نظریه سبکتر و محبوبیت بیشتر از روش سنتی است .مدل چابک از بازخوردها به جای برنامه ریزی بعنوان مکانیزم اصلی کنترل پروژه استفاده می کند.بازخورد ها بوسیله تست و آزمونهای مرتب و انتشار پیاپی و در بازههای کوتاه زمانی نرم افزارهای در حال تکامل تولید می شوند.
مدلهای متنوعی از فرآیند چابک برای تولید نرم افزار استفاه می شود:
مدل ایکس پی (روش خیلی سریع)
در مدل تولید نرم افزار برنامه نویسی خیلی سریع (ایکس پی) در فازهای خیلی کوچک (یا مداوم) انجام و با فرآیندهای دسته ای قدیمی تر تطبیق داده می شوند.فاز اول(که عمدا کامل نشده ) در طول مراحل ممکن است به جای اینکه ماهها و سالها در مدل آبشاری طول بکشد تا کامل شود، یک روز یا یک هفته وقت بگیرد.ابتدا یک تست خودکار برای ایجاد اهداف اساسی تولید نرم افزار نوشته می شود.سپس برنامه نویسی انجام می گیرد(توسط دوبرنامه نویس) که وقتی تمام تست ها را پشت سر گذاشته و دیگر هیچ تستی مورد نیازی به فکر برنامه نویسان نرسد کامل می شود.کار طراحی و معماری سیستم بعد از اینکه نه تستی وجود دارد و نه برنامه نویسی شده انجام می شود(خودشان را نشان میدهد). طراحی توسط برنامه نویسان انجام می شود.(فقط مشخصات نهایی و ترکیب طراحی و کد در تمام فرآیندها در روش چابک مشترک هستند)عملیات اصلی ناقص سیستم برای کاربران( برخی از کاربران) نصب یا نمایش داده می شوند (توسط حداقل یکی از افراد تیم تولید کنندگان و برنامه نویسان ).دراینجاتمام عوامل پروژه دوباره شروع به نوشتن تست برای قسمت های مهم سیستم خواهند کرد.
مدل اسکرام
اسکرام یک روش چابک، تکراری و افزایشی برای مدیریت پروژه است که معمولا در مدل تولید نرم افزار چابک به عنوان نوعی متدولوژی توسعه نرم افزار دیده می شود. با اینکه روش اسکرام در واقع برای مدیریت محصولات تولید و توسعه پروژه های پیشنهاد شده بود، استفاده آن در مدیریت پروژه های تولید نرم افزار متمرکز شد و همچنین امکان دارد جهت مدیریت تیم نگهداری نرم افزار یا مدیریت پروژه های یا برنامه های عمومی مدیریت خط مشی ها استفاده شود.
مدلهای بهبود سازی
مدل سی ام ام آی (CMMI) مدل تکامل قابلیت یکپارچه سازی
مدل تکامل قابلیت یکپارچه سازی یا مدل سی ام ام آی (CMMI) یکی از مدلهای پیشنهادی و تکنیک های پیشتاز است . ارزیابی سازمان های مستقل و رتبه بندی در مورد کیفیت چگونگی تعریف فرآیندهای آن سازمانها را دنبال می کند، نه بر کیفیت خود فرآیندها یا نرم افزار تهیه شده است. مدل CMMI جایگزین CMM شده است.
ایزو ۹۰۰۰
ایزو ۹۰۰۰ یک استاندارد رسمی سازماندهی فرآینده ساخت محصولات و روشی برای مدیریت و نظارت پیشرفت کارهاست .در اصل این استاندارد برای بخش تولید وساخت(صنعتی) ایجاد شد.ایزو ۹۰۰۰ همچنین برای فرآیند تولید نرم افزار نیز به خوبی استفاده شده.مانند مدل CMMI مدرک ایزو ۹۰۰۰ هیچ تضمینی راجع به کیفیت نتایج نهایی ندارد و فقط فرآیندهای کاری را فرموله و قالب استاندارد رسمی می دهد.
ایزو ۱۵۵۰۴
ایزو ۱۵۵۰۴، که با عنوان فرآیند تشخیص و تعیین بهبود قابلیت نرم افزار (S.P.I.C.E)نیز شناخته می شود، "چارچوبی برای ارزیابی فرآیندهای نرم افزار " است.این استاندارد تنظیمات قالب روشنی برای مقایسه فرآیند ها به شمار می رود . S.P.I.C.E خیلی شبیه CMMI استفاده می شود.فرآیند های این مدل برای مدیریت، کنترل، راهنمایی و نظارت تولید نرم افزار است . این مدل جهت سنجش سازماندهی تولید و توسعه یا تیم پروژه بصورت واقعی در طول مدت تولید نرم افزار استفاده می شود. تجزیه و تحلیل این اطلاعات برای شناسایی نقاط صعف و حرکت به سمت بهبودی پروژه استفاه می شود.همچنین برای تشخیص نقاط قوت پروژه که می تواند برای سازمان یا تیم پروژه ادامه پیدا کند یا برای امور مشترک یکپارچه شود.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#5
Posted: 11 Nov 2012 20:29
توسعه نرمافزار
توسعه نرمافزار برگردان نیاز کاربران یا مشتریان درقالب یک محصول نرمافزاری است.
توسعه نرمافزار از مرحله طرح یک راه حل مفهومی برای مساله خواسته شده (امکانسنجی) آغاز شده، پس از دریافت خواستهها و تحلیل سیستم طراحی صورت گرفته و در نهایت این طراحی با کمک ابزارهای پیادهسازی تبدیل به یک سیستم واقعی میشود. هدف این فرآیند آن است که از یک سو برآورده ساختن نیازهای کاربران و از سوی دیگر کیفیت مناسب عملکرد سیستم تضمین گردد و بنابراین بایستی حاوی مکانیسمهایی برای اعتبارسنجی یعنی خروجی مطابق با خواستهها (Validation) و وارسیپذیری یعنی صحت عملکرد خروجی (Verification) باشد. فرآیند توسعه ضمن دادن آزادی به تحلیلگر باید تضمین کند که زمانبندی اجرای پروژه رعایت میشود.
توسعه نرمافزار ارتباط تنگاتنگی با مهندسی نرمافزار دارد و از دید بسیاری این دو مفاهیمی تقریبا یکسان هستند.
در سالهای اخیر با رشد نیاز به تولید نرمافزارهای تجاری توسعه نرمافزار به بحثی مهم تبدیل شده است و روشهای گوناگونی در قالبهای مختلف برای تولید نرمافزارها بر مبنای نیازهای کاربران، مشخصات کلی سیستم، شرایط مدیریتی و اقتصادی، زمان بندی و سطح کیفی به وجود آمده اند.
اغلب توسعه نرمافزار Software Development با برنامه نویسی Programming یکسان فرض شده اند در حالیکه توسعه نرمافزار بر خلاف برنامه نویسی با تولید تجاری نرمافزار، استفاده بهینه از بخشهای در دسترس تولید شده و همچنین روشهای مدیریت، افزایش سرعت و افزایش کیفیت پروژههای نرمافزاری سر و کار دارد.
کیت توسعه نرمافزار
کیت توسعهٔ نرمافزار یا SDK مجموعه توابع و کتابخانههای کامپایل شدهای که تولیدکنندگان نرمافزار برای آسان کردن برنامهنویسی برای محیط یا سکوی خاصی فراهم میکنند و در اختیار برنامهنویسان کاربردی قرار میدهند.
نمونهها
Microsoft Windows SDK
Xcode
Android SDK
گسترش نرمافزار به تمامی فعالیتهایی که یک نرمافزار را برای استفاده آماده میکند اطلاق میشود.
معماری نرمافزار
معماری نرمافزار یعنی ساختار و سازمان یک سیستم نرمافزاری که به منظور پشتیبانی از عملیات مشخص، بر روی سازماندهی اجزاء متمرکز میباشد. در واقع اجزاء را در حوزههای مرتبط به هم گروه بندی میکند. دیگر حوزههای مرتبط به هم، بر روی تبادل و تعامل با این حوزه متمرکز میشوند.
معماری نرمافزار از کلیدیترین بخشهای تولید نرمافزار مخصوصا نوع تجاری آن است که البته در سالهای اخیر با ایجاد مدلهای کلاسیک تولید نرمافزار به نرمافزارهای عظیم تر محدود شده است.
معماری نرمافزار در واقع انتخاب یک ساختار کلی برای پیاده سازی یک پروژه نرمافزاری بر مبنای مجموعه ای از نیازهای کاربری و تجاری یک سیستم نرمافزاری است تا هم بتوان کاربردهای مورد نظر را پیاده سازی کرد و هم بتوان کیفیت نرمافزار، تولید آن و نگهداری آن را نیز بهینه کرد و سرعت بخشید. به عبارتی دیگر: معماری نرم افزار یک برنامه یا سیستم محاسباتی، ساختار یا ساختارهای آن سیستم محاسباتی است که خصوصیات قابل رویت از بیرون، عناصر و ارتباطات بین آنها را نشان می دهد.
تحلیل سامانهها
تحلیل سیستمها یا تحلیل سامانهها یا آنالیز سیستم (به انگلیسی: system analysis) یک نگرش جامع به مسئله یا مشکل است. تحلیل سیستم یکی از ابعاد دوگانه نگرش سیستمی است و در آن بهمنظور شناسایی پدیدهها، ابتدا آن را به اجزاء کوچکتر تقسیم میکنند و پس از بررسی، تجزیه و تحلیل و رفع مشکل هر یک از اجزاء، مشکل سیستم کل را حل میکنند.
یک مهندس تحلیل سیستمها با استفاده از دانش سیستم و یا نظریه سیستمی بجای یک دید محدود و بسته به یک دیدگاه جامع و کلنگرانه میرسد. بسیاری از مشکلات صنعتی و اداری و حتی اقتصادی تنها با کمک نگرش سیستمی قابل تجزیه و تحلیل هستند.
تحلیل نیازمندیها در مهندسی سیستمها و مهندسی نرمافزار، تحلیل و تعیین نیازها یا شرایط لازم برای انجام یک پروژه نو را دربرمیگیرد. تحلیل سیستماتیک نیازمندیها را مهندسی نیازمندیها میگویند.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#6
Posted: 11 Nov 2012 21:06
تست نرمافزار
تست نرمافزار یا آزمایش نرمافزار تحقیق برروی کیفیت یک محصول یا سرویس نرمافزاری و ارایه اطلاعات ناشی از آن به مشتریها است. این تحقیق جستجوی نرمافزار مزبور برای یافتن خطاها را نیز دربرمیگیرد ولی به آن محدود نمیشود.
تستها یک سری از سوال و جوابهایی هستند که نرمافزار را با آن امتحان میکنیم در حالی که از برنامه انتظار داریم با توجه به ورودیهایی که با استفاده از سوالات وارد میکنیم، جوابهای صحیحی را به عنوان خروجی به دست دهد.
آزمایش نرمافزار حیطه وسیعی از فعالیتهای مربوط به تولید برنامههای رایانهای را دربرمیگیرد که از آزمایش کردن کد برنامه توسط برنامهنویس گرفته تا نشان دادن عملکرد درست یک سیستم اطلاعاتی بزرگ به مشتری و ارزیابی نرمافزار در حین رانش یک شبکه مرکزی کاربردی را دربرمیگیرد.
آزمایش نرمافزار از وظایف توسعه دهندگان نرمافزار است و نه از وظایف تحویل گیرندگان آن.
میتوان قبل از نوشتن خود برنامه تستهای برنامه را انجام داد. به این روش en:Test Driven Development میگویند.
سازمانها یا شرکتهای که نرم افزارها را توسعه می دهند، محصولی به نام نرم افزار تولید می کنند. ولی چه عامل یا عواملی باعث می شوند که یک نرم افزار از نرم افزار مشابه دیگر متمایز و برجسته شود؟ عواملی متعددی را می توان نام برد که باعث این برتری و تمایز شود اما یکی از این عوامل می تواند کیفیت محصول نهایی باشد که به بازار عرضه خواهد شد. اما برای رسیدن به این نقطه تمایز و برتری باید چگونه عملکرد و اندیشید؟ یگ پاسخ به این سوال می تواند تست نرم افزار و نحوه انجام آن باشد. تنها پارامتری که در اینجا به صورت گذرا به آن اشاره خواهیم کرد و در انتها به بررسی روش تست و آزمایش نرم افزار در XP خواهیم پرداخت. (هدف ما بررسی دقیق تست نرم افزار نمی باشد و فقط آشنایی با بعضی واژهها و کلمات کلیدی آن می باشد.)
تست فقط می تواند وجود خطاها را نشان دهد ولی نمی تواند عدم وجود خطا را تضمین نماید.
"نرم افزار خوب نرم افزاری است که مشتری را خوشحال کند و زمانی مشتری خوشحال خواهد شد که تمام نیازمندیهای که در نظر دارد برآورده شود". پس ما به عنوان توسعه دهنده نرم افزار باید مطمئن شویم که مشتری خود را خوشحال خواهیم کرد، فرآیند و شیوه رسیدن به این اطمینان خاطر یعنی هدف تست نرم افزار. تست نرم افزار به طور رسمی، جزئی از بازبینی و اعتبارسنجی نرم افزار می باشد، که این دو واژه به صورت زیر تعریف و با هم مقایسه می شوند.
وارسی: "آیا محصول درستی را می سازیم؟" اعتبارسنجی: "آیا محصول را به درستی می سازیم؟"
وارسی بررسی میکند که آیا نرم افزار از مشخصاتش پیروی میکند یا خیر. اعتبارسنجی باید تضمین کند که نرم افزار انتظارات مشتری را برآورده می سازد یا نه. توجه کنید که آنچه در مشخصات می آید ممکن است دقیقا خواستههای مشتری را برآورده نسازد.
استراتژی تست
استراتژی تست نرم افزار یک توصیف رسمی از این است که نرم افزار چگونه تست خواهد شد. هدف استراتژی تست تعریف همه مراحل برای فرآیند تست نرم افزار است که شامل برنامه ریزی آزمایش، طراحی ابزار آرمایش، اجرای آزمایش و جمع آوری و ارزیابی دادههای بدست آمده باشد.
استراتژی جعبه سیاه
استراتژی جعبه سیاه این آزمایش جایگزین آزمایش جعبه سفید نمیباشد بلکه مکمل آن است.وخطاهایی متفاوت باآن راتست میکند.
شما نرم افزاری را که به آن نیاز داشتید را تهیه می کنید و بر روی سیستم خود نصب می کنید، شما در اکثر موارد بعد از نصب برنامه فقط یک نسخه اجرایی آنرا در سیستم خود خواهید داشت، و هیچ دسترسی به سورس کد و منابع دیگر برنامه نخواهید داشت. سیستم نرم افزاری موجود برای شما مانند یک جعبه سیاه است که شما نمی توانید دورن آنرا مشاهده کنید و به آن دسترسی داشته باشید. استراتژی جعبه سیاه دقیقا از این دیدگاه برنامه را مورد آزمایش قرار می دهد، یعنی با این پیش فرض که شما هیچ اطلاعاتی از کد و طراحی داخلی برنامه ندارید. حالا هیچ اطلاعاتی از کد و طراحی برنامه در اختیار ما نیست، پس چگونه می توان به صحت کارکرد برنامه پی برد؟ جواب خیلی ساده است، با تمرکز بر ورودیها و خروجی ها، برای اینکار آزمایش کننده نرم افزار به مستندات نرم افزار مراجعه میکند تا مشخص کند که سیستم در مقابل یک عمل خاص چه پاسخی را باید بدهد. سپس دادههای را برای هر کدام از عملیات انتخاب میکند و رفتار سیستم را در مقابل آن دادهها با رفتار واقعی سیستم که در مستندات وجود دارد مقایسه و بررسی می کند.
در یک استراتژی آزمایش جعبه سیاه ما عموما موارد زیر را مورد بررسی و آزمایش قرار می دهیم:
۱. بررسی اینکه سیستم نیازمندهای عملیاتی و غیر عملیاتی را تامین میکند یا نه.
۲. اعتبارسنجی ورودیها
۳. بررسی مقادیر مرزی برای متغیرها: به یک متغیر مقداری کمتر از حداقل مقداری که می تواند قبول کند یا بیشتر از حداکثر مقداری که می تواند قبول کند می دهیم و سیستم را در این شرایط تست می کنیم.
۴. بررسی خروجهای سیستم: یک مجموعه از ورودهای صحیح با خروجهای مربوط به آن را تهیه می کنیم و سپس ورودها را به سیستم وارد می کنیم و خروجهای که توسط سیستم داده میشود را با خروجیهای واقعی مقایسه می کنیم.
۵. بررسی رفتار سیستم در برابر پردازش ورودها و پرس و جوهای بزرگ و سنگین
برای موارد بالا و مواردی دیگری که ذکر نشد روشهای مختلف تست در استراتژی جعبه سیاه وجود دارد که عبارتند از:
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
آیا می توان در استراتژی جعبه سیاه، از این مطمئن شد که سیستم به طور کامل تست شده است؟ خیر، هرگز در این استراتژی نمی توان مطمئن شد که سیستم به طور کامل تست شده است. برای نمونه با چه احتمالی کاربر می تواند ورودهای را انتخاب کند تا شرط زیر چک شود.
if ("name=="Lee" && employeeNumber=="1234" && employmentStatus=="RecentlyTerminatedForCause) {
send Lee a check for $1,000,000;
}
پس همیشه در این استراتژی مسیرهای خواهند بود که تست نمی شوند و همیشه سیستم با دادههای ورودی محدود می توانند تست شوند.
استراتژی جعبه سفید
حال تصور کنید که شما خود یک توسعه دهنده نرم افزار هستید، پس شما می توانید به سورس، طراحی و منابع دیگر نرم افزار دسترسی داشته باشید. در این حالت سیستم را می توان به یک جعبه شیشه ای (جعبه سفید) تشبیه کرد که شما می توانید براحتی محتویات داخل و نحوه عملکرد آنرا مشاهده کنید. آزمایش جعبه سفید نیز دقیقاً از دیدگاه توسعه دهنده نرم افزار را مورد آزمایش قرار می دهد یعنی با این فرض که شما به منطق داخلی و ساختار کد برنامه دسترسی و احاطه دارید و می دانید که سیستم چگونه پیاده سازی شده است. شما با دانستن این موارد می توانید مشخص کنید که آیا اعمال داخلی بر طبق مشخصهها نجام میشود و یا نه.
در یک استراتژی آزمایش جعبه سفید ما عموما موارد زیر را مورد توجه و بررسی قرار می دهیم:
۱. بررسی سطر به سطر کد (Code coverage): در این حالت باید سیستم را به گونه ای اجراء و بررسی کنیم که مطمئن شویم سطر به سطر کد برنامه حداقل یکبار اجراء شده است.
۲. بررسی همه انشعابها در کد برنامه (branch) : در کد برنامه باید تمام عبارتهای شرطی ( if elseها و Switch case ها) را تک به تک مورد بررسی قرار داد. به این صورت که در یک عبارت if else هم فسمت if و هم قسمت else هر کدام بصورت مجزا یکبار اجراء شوند.
۳. بررسی همه حلقهها در برنامه : حلقهها در نرم افزار نقش اساسی دارند، چون می تونند با اشتباه جزئی مقدار زیادی از منابع را مصرف کرد برای مثال شرط خروج از حلقه به اشتباه هیچ وقت True نشود. برای نمونه حلقهها را با ورودی بزرگتر از شرط خروج حلقه چک کنید یعنی حلقه اصلا اجر نشود. تستی طراحی کنید که حلقه دقیقاً یکبار اجراء شود، تستی طراحی کنید که حلقه در یک بازه خاص اجراء شود و ....
۴. مدیریت خطای مطلوب : برسی اینکه اگر به یک متد یک ورودی نامعتبر وارد شود، نحوه آگاه سازی و نمایش مطلوب خطا برای کاربر چگونه باشد؟
۵. بررسی امنیت : سیستم را از این جهت که چگونه در برابر دسترسیهای غیرمجاز، هک، کرک و هر چیز دیگر که می تواند به آن آسیب برساند مورد بررسی قرار می دهد. در اینجا ما باید مکانهای از کد را که دادهها را اعتبارسنجی و مدیریت می کنند، دسترسی به منابع یا عملیات مهم و حیاتی را انجام می دهند را بررسی کنیم.
۶. برای موارد بالا و مواردی دیگری که ذکر نشد روشهای مختلف تست در استراتژی جعبه سفید وجود دارد که عبارتند از:
Basis Path Testing, Equivalence Partitioning/Boundary Value Analysis, Method Coverage, Statement Coverage, Branch Coverage, Condition Coverage, Data Flow Testing, Flow Graphs Revisited, ….
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#7
Posted: 11 Nov 2012 21:22
وارسی مدل نرمافزار
وارسی مدل نرم افزار چیست؟
در علوم کامپیوتر، وارسی مدل نرم افزار به این مسئله اشاره دارد که آیا مدل یک سیستم یک نیازمندی خاص را پشتیبانی می کند یا خیر. بررسی امکان بروز بن بست، مسابقه و حالت های خاصی که سیستم را از کار می اندازد، وظیفه ی فرآیند وارسی مدل نرم افزار است. به طور خلاصه، وارسی مدل تکنیکی است برای تائید صحت عملکرد یک سیستم که دارای حالت های محدود(en:Finate-state machine) است. این روش برای اطمینان حاصل کردن از صحت عملکرد نیازمندی ها و طراحی یک سیستم بلادرنگ و نهفته به کار می رود. این شیوه ی صحت سنجی، تمامی حالت های ممکن سیستم را کاوش می کند و کلیه ی سناریو های ممکن را به روش نظاممند امتحان می کند.
روش های وارسی مدل
در وارسی مدل کلیه ی حالت ها و انتقال های مدل ریاضی مورد بررسی قرار می گیرد. با استفاده از یک روش هوشمندانه با دامنه ی خاص، می توان تمامی حالت ها را با کاهش زمان محاسبه طی انجام یک عملیات، بررسی کرد. شیوه های پیاده سازی شامل شمارش فضای حالت ها، شمارش فضای حالت های نمادین، تفسیر انتزاعی ، شبیه سازی نمادین و پالایش انتزاعی است. ویژگی هایی که اغلب مورد صحت سنجی قرار می گیرند، به صورت منطق های زمانی مثل منطق زمانی خطی (LTL) و یا منطق محاسبات درختی (CTL) توصیف می شوند.
مزایا و کاربردها
- این شیوه به نسبت سایر روش ها مثل وارسی اثبات، از سرعت بالایی برخوردار است.
- با استفاده از مثال نقضی که در گزارش وارسی تولید می گردد، علت عدم ارضای ویژگی مورد انتظار در سیستم را می توان کشف نمود.
- این روش، صحت سنجی پاره ای را میسر می کند. به بیانی دیگر می توان هر ویژگی به طور مجزا وارسی گردد.
- در هر مرحله از توسعه ی تولید نرم¬افزار(طراحی، پیاده سازی و ...) می¬توان از این روش بهره برد.
- کشف خطاهایی که در الگوریتم های پیچیده نظیر پروتکل های ارتباطی و الگوریتم های جمع آوری زباله ممکن است رخ دهند و تشخیص آن ها در فاز طراحی مشکل است؛ با استفاده از این روش امکان پذیر است.
- از جمله ویژگی های سیستمی که در وارسی مدل می توان از صحت عملکرد آن ها در مرحله ی پیاده سازی سیستم اطمینان حاصل نمود، عبارتند از:
- کشف بروز بن بست در برنامه های همروند .
- وارسی مشخصات زمانی؛ برای مثال بررسی بروز بن بست بعد از گذشت یک ساعت از راه اندازی مجدد سیستم.
تفاوت وارسی مدل با تست نرم افزار
در وارسی مدل تمامی برنامه بررسی میشود مگر آن که یک عیب پیدا شود.اما در تست نرمافزار بر حسب مجموعه ی ورودی، در آن واحد فقط و فقط یک مسیر اجرا و وارسی می شود.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#8
Posted: 11 Nov 2012 21:36
مهندسی معکوس
مهندسی معکوس (به انگلیسی: Reverse Engineering) به علمی گفته میشود که از پاسخ به سوال میرسند و در واقع فرآیند کشف اصول تکنولوژیکی یک دستگاه، شیئ یا یک سیستم میباشد که از طریق تجزیه و تحلیل ساختار و عملکرد آن حاصل میشود. در اکثر مواقع موضوع مورد بررسی یک دستگاه مکانیکی، الکتریکی، برنامه نرم افزاری یا یک ماده بیولوژیکی یا شیمیایی میباشد که بدون داشتن دانش قبلی و تنها با جداسازی اجزا و تجزیه و تحلیل شیوه عملکرد آن، سعی در ایجاد یک نمونه جدید از آن میگردد. مهندسی معکوس به طور عمده در استفادههای تجاری و نظامی به کار میرود و هدف آن استنباط پارامترهای طراحی یک محصول موجود بدون داشتن دانش کافی در زمینه تولید آن محصول و فقط با پیمودن فرآیند معکوس و به کارگیری تکنیکهای مشابه میباشد.
دلایل استفاده از مهندسی معکوس
نوسازی نرم افزار: مهندسی معکوس به صورت کلی برای درک وضعیت موجود برنامه مورد نیاز است. این عمل به منظور برآورد درست کوشش های مورد نیاز برای مهاجرت اطلاعات سیستم به یک وضعیت دلخواه است.
نگهداری نرم افزار: مهندسی معکوس نرم افزار می تواند مستندات لازم را برای درک وضعیت فعلی نرم افزار سیستم فراهم کند.
آنالیز محصول : برای بررسی اینکه یک محصول چه گونه کار می کند،از چه اجزایی تشکیل شده،برآورد هزینه ها و مشخص کردن حقوق مالکیت بالقوه.
بازبینی امنیتی
بدست آوردن اطلاعات حساس به کمک دیس اسمبل و تجزیه و تحلیل طراحی اجزای سیستم
حذف محافظ کپی، دور زدن محدودیت های دسترسی.
ایجاد کپی های بدون مجوز / تایید نشده.
اهداف علمی / آموزشی.
مهندسی معکوس در حوزه نرم افزار
در عمل دو نوع عمده از مهندسی معکوس وجود دارد. در حالت اول، سورس کد برای برنامه وجود دارد، اما سطوح بالاتری از جنبه های این برنامه، شاید مستندات ضعیف یا مستنداتی که دیگر اعتبار ندارد، مشاهده می شوند.در حالت دوم ، سورس کدی برای برنامه موجود نیست و هرگونه تلاشی در جهت استخراج یک سورس کد ممکن برای نرم افزار به عنوان مهندسی معکوس در نظر گرفته شده است.بسیاری از مردم با استفاده دوم از این اصطلاح آشنا هستند. مهندسی معکوس نرم افزار برای جلوگیری از نقض کپی رایت می تواند از تکنیک طراحی اتاق پاک استفاده کند.
مهندسی معکوس کد(سورس کد)
این فرایند برخی مواقع مهندسی معکوس کد یا(Reverse Code Engineering) نامیده می شود.به عنوان یک مثال، دیکامپایل کردن باینری برای پلتفرم جاوا از طریق برنامه JAD می تواند انجام شود. یک مثال از گروهی که مهندسی معکوس نرم افزار را برای لذت بردن ( و انتشار کدهای ثبت ) انجام می دهند CORE هست که مخفف "چالش مهندسی معکوس" است.مهندسی معکوس نرم افزار در قانون کپی رایت ایالات متحده در صورت استفاده منصفانه محافظت می شود. برنامه Samba که به سیستم های غیر مایکروسافت ویندوز اجازه می دهد به اشتراک فایل با سیستم های ویندوزی بپردازند یک مثال کلاسیک از مهندسی معکوس نرم افزار هست. به این خاطر پروژه Samba باید به مهندسی معکوس اطلاعات منتشر نشده در مورد چگونگی به اشتراک گذاری فایل ویندوز می پرداخت، تا که کامپیوتر های غیر ویندوزی بتوانند آنرا شبیه سازی کنند.پروژه Wine همین کار را برای API ویندوز و OpenOffice.org این کار را برای فرمت فایل های مایکروسافت آفیس انجام می دهد.
تکنیک های مهندسی معکوس نرم افزار
مهندسی معکوس نرم افزار از روش های گوناگونی می تواند بدست آید. سه گروه اصلی مهندسی معکوس نرم افزار عبارتند از:
1-تجزیه و تحلیل از طریق مشاهده تبادل اطلاعات - شایع ترین در مهندسی معکوس پروتکل- که شامل استفاده از آنالیزورهای درگاه باس و اطلاعات انتقالی شبکه است.الگوی رفتاری درگاه باس یا شبکه بعدا می تواند مورد تجزیه و تحلیل قرار گیرد. به منظور تولید یک اجرای مستقل که آن رفتار را تقلید می کند. این امر به ویژه برای مهندسی معکوس درایور های دستگاه مفید است.برخی مواقع مهندسی معکوس بر روی سیستم های بسته به وسیله ابزارهایی که عمدا توسط تولید کننده معرفی شده بسیار کمک کننده است. در مایکروسافت ویندوز دیباگر سطح پایین مانند SoftICE طرفداران بسیاری دارند.
2-تولید فایل اسمبل برنامه به وسیله دیس اسمبلر: به معنی خواندن کدهای خام زبان ماشین و درک این اطلاعات با اصطلاحات خواص دیس اسمبلر. این عمل بر روی تمام برنامه های کامپیوتری می تواند اعمال شود اما درک آن ممکن است مدتی زمان بر باشد، مخصوصا برای کسانی که با زبان ماشین آشنا نیستند.
3-دستیابی به سورس کد با استفاده از یک دیکامپایل کننده، فرایندی که تلاش می کند سورس کد را در بعضی زبان های سطح بالا برای برنامه ای که فقط در حالت بایت کد یا کدهای ماشین است فراهم کند.
طراحی اتاق پاک
طراحی اتاق پاک (همچنین به عنوان روش دیوار چینی شناخته می شود) روش کپی کردن یک طراحی به کمک مهندسی معکوس و سپس بازآفرینی آن بدون نقض کپی رایت و اسرار تجاری در ارتباط با طرح اصلی است.طراحی اتاق پاک به عنوان دفاع در برابر نقض قوانین کپی رایت و اسرار تجاری مفید است به این دلیل که به اختراع مستقل متکی است.
به طور معمول، طراحی اتاق پاک با داشتن شخصی که سیستم را برای طراحی دوباره بررسی می کند، انجام می گیرد و آن شخص مشخصات و خصوصیات سیستم مد نظر را می نویسد. این خصوصیات سپس به کمک یک وکیل بررسی می شود تا اطمینان حاصل شود که هیچ مورد کپی رایت را شامل نمی شود. این خصوصیات سپس توسط یک تیم بدون هیچ ارتباطی با تحلیلگر اصلی اجرا می شود.
یک مثال معروف این است که محصولات داده کلمبیا برای اولین بار یک کپی از کامپیوتر های IBM را از طریق اجرای اتاق پاک BIOS آن ساخت.ReactOS یک سیستم عامل منبع باز است که از اتاق پاک مهندسی معکوس اجزای ویندوز ساخته شده است.
مهندسی معکوس در سهبعدی سازی
مهندسی معکوس سهبعدی سازی، هنر تبدیل ابر نقاط به مدل سهبعدی CAD میباشد. ابر نقاط مجموعه سهبعدی از نقاط است که خصوصیات سطح خارجی یک شیئ را توصیف میکنند. این نقاط از آنالیز محیط پیرامون شیئ و جمعآوری اطلاعات از شکل ظاهری آن به کمک یک اسکنر سهبعدی به دست میآیند. تکنولوژی به کار رفته در جمع آوری اطلاعات از سطح شکل، در دو نوع تماسی و بدون تماس میباشد. در حالت تماسی از دستگاههای (CMM (Coordinate Measuring Machine و در حالت بدون تماس از لیزر و نور ساخت یافته استفاده میشود.
در فرآیند مهندسی معکوس، ابتدا بر روی نقاط، یک مش سهگوش ایجاد میشود. این مش، توپولوژی اصلی مدل نهایی را ارائه میدهد. در مرحله بعد از تقسیم مش به نواحی کوچکتر و یا روشهای دیگر، یک سطح ساده تخمینزده میشود. این سطوح تا جایی که از زیبایی و سازگاری آنها اطمینان حاصل شود، پیراسته شده و به هم متصل میشوند و در نهایت مدل اصلی را ایجاد میکنند.
محیط کاری (Digitized Shape Editor (DSE در آغاز چرخه مهندسی معکوس CATIA قرار دارد. این محیط به عنوان یک ابزار قدرتمند برای خواندن، وارد کردن، اعمال فرآیندهای مختلف بر روی ابر نقاط و تولید مش مورد استفاده قرار میگیرد. خروجی این محیط میتواند در محیطهای Quick Surface Reconstruction، Digital Mock-Up و یا Surface Machining به کار رود و یا به صورت فرمتهای مختلف تبدیل شود.
محیط کاری (Quick Surface Reconstruction (QSR برای بازسازی سریع و آسان سطوح از روی دادههای خروجی ابر نقاط مورد استفاده قرار میگیرد. این محیط با توجه به نوع شکل ورودی، چندین روش مختلف برای بازسازی سطوح ارائه میدهد.
مهندسی معکوس طراحی به کمک عکس
از عمده کاربردهای مهندسی معکوس، طراحی یک مدل سه بعدی با استفاده از عکس و یا تصویر سه نما میباشد. محیط کاری FreeStyle Sketch Tracer (FSK) بخشی از مجموعه طراحی سطوح CATIA شما را قادر میسازد تا طرحها، عکسها و یا هر نوع ترسیمه دوبعدی را وارد کرده و موقیعت و مقیاس آن را در فضای سه بعدی تعیین کنید. سپس میتوانید از سایر محیطهای طراحی سطوح یعنی Freestyle، Generative Shape Design و Imagine & Shape برای ترسیم المانهای هندسی بر روی این طرحها استفاده نموده و در نهایت مدل سه بعدی مورد نظر را ایجاد نمایید.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#9
Posted: 11 Nov 2012 21:44
برنامهنویسی
برنامهنویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرآیند توسعهٔ نرم افزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شده مهندسی نرمافزار متغیر است.
برنامهنویسی کامپیوتر (که اغلب در انگلیسی programming یا coding گفته میشود) فرآیند نوشتن، اشکال زدایی(debug) و نگهداری کد منبع (source code) برنامه کامپیوتر میباشد. این کد منبع با یک زبان برنامه نویسی نوشته شده است. این کد منبع ممکن است تغییر داده شده یک کد قبلی و یا یک کد کاملا جدید باشد. هدف برنامه نویسی ساختن یک برنامه میباشد که یک رفتار خواسته شده را به نمایش بگذارد.
اندازه گیری کاربرد زبان
تعیین اینکه محبوبترین زبان برنامه نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبانها در کاربردهای خاصی محبوب است و بعضی دیگر مرتبا در نوشتن کاربردهای گوناگون استفاده میشود. روشهای اندازه گیری محبوبیت زبان شامل موارد زیر میباشد : شمردن تعداد آگهیهای اشتغال و توجه به یک زبان، تعداد کتابهای آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان
اشکال زدایی
اشکال زدایی وظیفه بسیار مهمی در فرآیند توسعه نرمافزار میباشد، زیرا یک برنامه غلط میتواند پیامدهای مهمی برای کاربر خود داشته باشد. بعضی از زبانها بیشتر در معرض برخی اشتباهات میباشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبانهای دیگر ندارند.
زبان برنامهنویسی
اجرا و عملی ساختن الگوریتمهای انتزاعی وابسته به هم بهوسیله تولید یک برنامه رایانهای مشخص با ابزار زبان برنامهنویسی ممکن است.
نمونه یک برنامه
یک برنامهٔ ساده در زبان برنامهنویسی 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) دستورات را تبدیل به فرامینی میکند که لایه زیرین، که ممکن است همان سختافزار باشد، میتواند آنها را اجرا کند.
پارادایمها
زبانهای برنامهنویسی گوناگون براساس قابلیتهای درنظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبانهای مختلف متفاوت است. علاوه بر اینها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شدهاند که پارادایم یا الگو نام دارند.
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|
ارسالها: 175
#10
Posted: 11 Nov 2012 22:17
چارت درسی
نام درس - تعداد واحد - پیشنیاز - همنیاز
دروس عمومی :
معارف اسلامی 2 <> 2 واحد
انقلاب اسلامی و ریشه های آن <> 2 واحد
تاریخ اسلام <> 2 واحد
متون اسلامی ( آموزش عربی ) <> 2 واحد
تربیت بدنی 2 <> 1 واحد
دروس پایه :
آمار و احتمالات مهندسی <> 2 واحد <> آمار و احتمالات 1
ریاضی مهندسی <> 2 واحد <> معادلات دیفرانسیل
معادلات دیفرانسیل <> 2 واحد <> ریاضی عمومی
ریاضی گسسته <> 2 واحد <> ریاضی عمومی
دروس اصلی :
زبان ماشین و اسمبلی <> 2 واحد
زبان تخصصی نرم افزار <> 3 واحد
طراحی الگوریتم <> 3 واحد
شیوه ارائه مطلب <> 2 واحد
برنامه سازی سیستم <> 3 واحد <> زبان ماشین و اسمبلی
مهندسی نرم افزار <> 3 واحد
آز مهندسی نرم افزار <> 1 واحد <> مهندسی نرم افزار
معماری کامپیوتر <> 2 واحد <> زبان ماشین، مدار منطقی
آز معماری کامپیوتر <> 1 واحد <> معماری کامپیوتر
دروس تخصصی اجباری :
هوش مصنوعی <> 3 واحد <> طراحی الگوریتم
شبیه سازی کامپیوتر <> 3 واحد <> مهندسی نرم افزار
گرافیک کامپیوتری ( 1 ) <> 3 واحد
مهندسی اینترنت <> 3 واحد
مباحث ویژه <> 3 واحد
پروژه نرم افزار <> 3 واحد
کارآموزی <> 3 واحد
دروس تخصصی اختیاری :
سیستم عامل شبکه <> 2 واحد
کارگاه سیستم عامل شبکه <> 2 واحد <> سیستم عامل شبکه
نصب و راه اندازی شبکه <> 2 واحد <> سیستم عامل شبکه
طراحی صفحات وب <> 3 واحد <> مهندسی اینترنت
سیستمهای خبره <> 3 واحد <> هوش مصنوعی
طراحی زبانهای برنامه نویسی <> 3 واحد <> برنامه سازی سیستم، طراحی الگوریتم
گرافیک کامپیوتری ( 2 ) <> 3 واحد <> گرافیک کامپیوتر ( 1 )
ایجاد بانکهای اطلاعاتی <> 3 واحد
طراحی سیستمهای شی گرا <> 3 واحد
اصول برنامه نویسی توصیفی <> 3 واحد <> طراحی زبانهای برنامه نویسی
برنامه نویسی همروند <> 3 واحد <> طراحی زبانهای برنامه نویسی
از مجموع دروس تخصصی اختیاری، باید 12 واحد گذرانده شود
به کوروش به آرش به جمشید قسم
به نقش و نگار تخت جمشید قسم
که ایران همی قلب و خون من است
گرفته ز جان از وجود من است
بخوانید این جمله در گوش باد
چو ایران نباشد تن من مباد
|================|
--=( We Love IRAN )=--
|================|