جزوه تایپ شده میدان ها و امواج
استاد سهیل آزادی نیا خلاصه کتاب دانشگاه علمی کاربردی استاد ملکپور دانشگاه صنعتی شریف کاردانی کارشناسی ارشد غلامدانشگاه سراسری آزاد دانلود
«)) ؟» : «؟»
-؛ ؟ ؟ ً ؟ ؛ ؟ ؟ ()، ؟ :« () شدید و این دقیقاً چیزی است که مشتریان ما، بدون شوخی حاضرند بهخاطر آن آدم بکشند.» ما در خدمت یکی از موفقترین سازندگان بازی در دنیا هستیم.در چند سال اخیر، از نسخههای قبلی نمونهی نمایشی بازی طراحیشده توسط او، بیش از 50 میلیون عدد به فروش رسید و میلیونها دلار درآمد داشت.پرسیدم: «بنابراین این نسخه چه زمانی به بازار عرضه میشود؟» شانه بالا انداخت و گفت: «حدوداً 5 ماه دیگر، و هنوز کارهای زیادی باقی است.» او مسئولیت راه اندازی بازی و عملکرد هوش مصنوعی را در جزوه میدان ها و امواج با بیش از سه میلیون ردیف کد به عهده داشت. پرسیدم: « آیا شما از تکنیکهای مهندسی نرم افزار استفاده میکنید؟».انتظار داشتم بخندد و سر تکان دهد.لحظهای مکث کرد و کمی فکر کرد.بعد آهسته سرش را تکان داد و گفت: « بله البته، بر حسب نیاز از آنها استفاده میکنیم.» کنجکاوانه پرسیدم: « در چه مواردی؟» پاسخ داد: « مشکل ما اغلب تبدیل و تغییر مقررات موردنظر طراحان است.» حرفش را قطع کردم و پرسیدم : « طراحان؟»
– « منظورم کسانی است که به طراحی داستان، شخصیتها و هرآنچه که یک بازی را محبوب و پرطرفدار میکند، میپردازند.ما با استفاده از دادههای موردنظر طراحان، مجموعهای از مقررات را تعریف میکنیم و با استفاده از آنها به ساخت بازی میپردازیم.»
_«بعد از مشخص کردن مقررات چه میکنید؟»
شانهای بالا انداخت و گفت: «با گسترش و انطباق ساختار نسخهی قبلی میدان ها و امواج ، محصول جدیدی تولید میکنیم؛ مطابق مقررات کدها را ایجاد میکنیم و آنها را با طرحهای روزانه آزمایش میکنیم و همچنین بسیاری از پیشنهادات ارائه شده در کتاب شما را نیز به کار میگیریم.»
_با تعجب پرسیدم: «شما کتاب مرا میشناسید؟»

میدان ها و امواج
_«البته،در مدرسه از آن استفاده میکردم؛ کتاب بسیار جالبی است.»
_«من با برخی از همکاران شما صحبت کردهام، و آنها در مورد کتاب من کمی مردد هستند.»
_اخمی کرد و گفت: «ببینید ، ما یک سازمان فناوری اطلاعات یا یک شرکت هوافضا نیستیم ، بنابراین باید بنا به تقاضای مشتری، به تغییر و ارتقای نرم افزار مربوطه بپردازیم.اما نتیجهی نهایی همان است- ما نیاز داریم محصولی با کیفیت بالا تولید کنیم و تنها راه انجام این کار به شیوهای قابل تکرار، تغییر زیرمجموعه تکنیکهای مهندسی نرم افزار خودمان است.»
_« و زیرمجموعهی شما چطور طی سالها تغییر میکند؟»
_با کمی مکث و تأمل پاسخ داد: « مطمئناً بازیها بزرگتر و پیچیدهتر میشوند و با افزایش رقابتها سرعت توسعهی ما نیز بیشتر خواهد شد.به تدریج خود بازیها نیز ما را مجبور میکنند تا نظام و مقررات را کمی بیشتر ارتقا دهیم.اگر این کار را نکنیم، بیچاره میشویم.»
_نرم افزار کامپیوتری همچنان به عنوان مهمترین فناوری در جهان شناخته می شود.و همچنین نمونهی برجستهای از محصولاتی است که ناخواسته تولید شدهاند؛ 60 سال پیش، کسی پیشبینی نمیکرد که نرم افزار، به عنوان فناوری ضروری در تجارت، علم و مهندسی محسوب خواهد شد؛همچنین اینکه نرم افزار، طراحی فناوریهای جدید(مثل مهندسی ژنتیک و فناوری نانو)، گسترش فناوریهای موجود(مثل ارتباطات از راه دور)، و و ایجاد تحولات اساسی در فناوریهای قدیمیتر(مثل رسانهها) را ممکن میسازد و اینکه نرم افزار، عامل تعیین کنندهای در انقلاب کامپیوتری خواهد شد و مصرف کنندگان میتوانند از طریق تلفن همراه خود به جزوه میدان ها و امواج برنامههای نرم افزاری بپردازند؛ کسی پیش بینی نمیکرد که نرم افزار، تدریجاً از یک محصول به یک سرویس ارائه دهندهی خدمات تبدیل خواهد شد؛ چنانکه شرکتهای نرم افزاری، بر حسب نیاز، از طریق مرورگر وب عملکردی به موقع ارائه می دهند؛همچنین اینکه یک شرکت نرم افزاری از همهی شرکتهای دوره صنعتی بزرگتر و تأثیرگذارتر خواهد شد؛ یا اینکه یک شبکهی گستردهی نرم افزار میدان ها و امواج، همه چیز را از تحقیقات کتابخانهای گرفته تا خرید کاربران، گفتمان سیاسی و عادات قرار گذاشتن بزرگسالان جوان(و نه چندان جوان) متحول میکند. با افزایش اهمیت نرم افزار، جامعهی نرم افزار دائماً سعی در توسعهی فناوری هایی دارد که منجر به سهولت، سرعت و کاهش هزینهی ساخت و پشتیبانی از برنامه های کامپیوتری باکیفیت میشود. برخی از این فناوریها در یک حوزهی خاص (برای مثال طراحی و اجرای وب سایت) و سایر فناوریها روی یک تکنولوژی خاص ( مثل سیستمهای شیء گرا یا برنامهنویسی جنبه گرا) تمرکز میکنند؛ همچنین برخی از آنها عملکردی جامع و همهجانبه دارند (به عنوان مثال سیستم عاملهایی مثل Linux). با این حال هنوز نتوانستهایم یک فناوری نرم افزاری طراحی کنیم که تمام این جوانب را پوشش دهد و احتمالاً در آیندهی نزدیک نیز خبری از آن نخواهد بود.اما همچنان شغل، آسایش و راحتی، امنیت، سرگرمی، تصمیمات و بسیاری از جنبههای زندگی مردم در گرو نرم افزارهای کامپیوتری است؛ بنابراین این مسائل از اهمیت بالایی برخوردارند. این کتاب چارچوبی برای سازندگان نرم افزارهای کامپیوتری-افرادی که از این مسائل سر در میآورند، ارائه میکند. این چارچوب شامل یک فرایند ، مجموعهای از روش ها وابزارها است که مهندسی نرم افزار نامیده میشود. برای ساخت یکنرم افزار که پاسخگوی چالش های قرن بیست و یکم باشد، باید به چند نکته دقت کنید:
• نرم افزار، عملاً در هر جنبه از زندگی ما تعبیه شده است.تعداد افراد علاقهمند به ویژگی ها و عملکردهای ارائه شده توسط یک برنامهی خاص رشد چشمگیری داشته است.برای درک مشکلات موجود، باید قبل از ایجاد یک راهحل نرم افزاری، به صورت یکپارچه تلاش شود.
• هر ساله، مقررات موردنیاز در فناوری اطلاعات توسط افراد، مشاغل و دولتها پیچیدهتر می شود. امروزه افراد زیادی، مشغول به طراحی برنامههای کامپیوتری هستند. نرم افزار پیچیده ای که زمانی در یک محیط کامپیوتری مستقل و قابل پیش بینی پیاده سازی شد، امروزه در همه زمینهها، از لوازم الکترونیکی مصرفی گرفته تا ابزارهای پزشکی و خودروهای اتوماتیک به اجرا در آمده است.طراحی، به یک فغالیت اساسی تبدیل شده است.
• افراد، مشاغل و دولتها روز به جزوه میدان ها و امواج بیشتر در تصمیمگیریهای هدفمندانه، فعالیتهای روزانه و نظارتهای خود، به نرم افزارها تکیه میکنند.در صورت بروز اختلال در این نرم افزارها، مردم و شرکت های بزرگ می توانند متحمل مشکلاتی از آسیبهای جزئی گرفته تا عواقب فاجعه بار شوند.بنابراین نرم افزارها باید از کیفیت بالایی برخوردار باشند.
• چنانچه ارزش درک شدهی یک برنامه خاص افزایش یابد، احتمالاً تعداد کاربران و دوام آن نیز بیشتر میشود و متعاقباً تقاضا برای سازگاری و ارتقای آن نیز بیشتر خواهد شد.نرم افزار باید قابل نگهداری و تعمیر باشد.
با توجه تمام نکات فوق، نرم افزار در هر شکل و میدان ها و امواج کاربرد، باید مهندسی شود؛ این مسئله ما را به مبحث مهندسی نرم افزار در این کتاب سوق میدهد.
ماهیت نرم افزار
امروزه، نرم افزار به دو منظور؛ یعنی هم به عنوان یک محصول و هم ابزاری جهت ارائهی یک محصول، به کار میرود.به عنوان یک محصول، ظرفیت کامپیوتری موجود در سخت افزار کامپیوتر، یا به طور گستردهتر، شبکهای از کامپیوترهای قابل دسترسی با سخت افزار داخلی را محقق میسازد.نرم افزار در تلفن همراه، صفحهی نمایش کامپیوتر، کامپیوتر مرکزی یا خودروهای اتوماتیک، به عنوان انتقال دهندهی اطلاعات، به تولید، مدیریت، به دست آوردن، اصلاح، نمایش یا انتقال اطلاعات میپردازد؛ این اطلاعات میتوانند به سادگی یک واحد بیت و یا به پیچیدگی ارائهی مفاهیم تکمیلی مربوط به دادههای به دست آمده از دهها منبع مستقل باشند؛ و سپس این اطلاعات در دنیای واقعی پوشش داده میشوند.نرم افزار، به عنوان ابزار ارائه دهندهی یک محصول، مبنای کنترل کامپیوتر(سیستم عاملها)،تبادل اطلاعات(شبکهها) و طراحی و کنترل سایر برنامهها(ابزارها و محیطهای نرم افزاری)قرار میگیرد. نرم افزار، مهمترین محصول زمان ما یعنی اطلاعات را ارائه می دهد؛ دادههای شخصی( مثل معاملات مالی افراد) را تغییر میدهد تا در محیط محلی قابل استفاده باشند؛ اطلاعات مربوط به مشاغل را جهت ارتقای رقابتها، مدیریت میکند؛ دری به شبکههای اطلاعاتی در سراسر جهان(مثل اینترنت) باز میکند و تمام ابزارهای کسب اطلاعات را فراهم میکند.همچنین میتواند ابزاری ارائه کند که حریم شخصی افراد را تهدید کند و جهت سوءاستفاده و انجام اعمال مجرمانه به کار رود.
در 60 سال اخیر، نقش نرم افزارهای کامپیوتری تغییر چشمگیری داشته است. پیشرفت های چشمگیر در عملکرد سخت افزار، تغییرات بسیار در معماری های کامپیوتری، افزایش چشمگیر حافظه و ظرفیت ذخیرهسازی، و طیف گسترده ای از گزینه های ورودی و خروجی غیرمتداول، همگی منجر به پیشرفت و پیچیدهتر شدن سیستمهای کامپیوتر محور، شدهاند.پیشرفت و پیچیدگی میتواند منجر به نتایج خیره کننده و موفقیت آمیز یک سیستم شود، اما از طرفی میتواند مشکلاتی برای طراحان و پشتیبانان سیستمهای پیچیده ایجاد کند.امروز، یک صنعت نرم افزاری عظیم، به عاملی مهم در اقتصاد جهان صنعتی تبدیل شده است.تیمهایی از متخصصان نرم افزار، که هر یک میدان ها و امواج یک بخش از فناوریهای موردنیاز جهت ارائهی یک برنامهی پیچیده متمرکز هستند، جایگزین تنها برنامه نویس دورهی قبلی شده جزوه میدان ها و امواج.با این حال، سؤالاتی که راجع به سیستمهای کامپیوتر محور پرسیده میشود، مشابه با سؤالاتی است که در مورد برنامه نویس قبلی پرسیده میشد
دانلود جزوه میدان ها و امواج رایگان خلاصه کتاب پی دی اف pdf
• چرا اتمام کار نرم افزار اینقدر طولانی است؟
• چرا هزینهی طراحی اینقدر بالا است؟
• چرا قبل از ارائهی نرم افزار به مشتری، نمیتوان به تمام خطاهای احتمالی پی برد؟
• چرا ما این همه وقت و تلاش صرف حفظ برنامههای موجود میکنیم؟
• چرا همچنان در سنجش میزان پیشرفت، حین توسعه و حفظ نرم افزار، مشکل داریم؟
موارد فوق و بسیاری دیگر از سؤالات در زمینهی نرم افزار و طراحی آن، سبب به کار گیری مهندسی نرم افزار میشود.
1-1-1 تعریف نرم افزار
امروزه بسیاری از متخصصین و به طور کلی بیشتر افراد تصور میکنند که درک درستی از نرم افزار دارند.اما آیا واقعاً اینطور است؟شرح درسنامهای نرم افزار، به این صورت است:
نرم افزار عبارت است از: 1) دستورالعمل هایی(برنامههای کامپیوتری)، که قابلیتها و عملکرد موردنیاز را ارائه میدهند؛ 2) ساختمان دادهها که برنامهها را قادر میسازد تا اطلاعات را بر حسب نیاز دستکاری کنند؛ 3) اطلاعات توصیفی به دو صورت نسخهی چاپی و انواع مجازی که طریقهی عملکرد و استفاده از برنامه ها را توضیح میدهد.بدون شک تعاریف کاملتری نیز میتوان ارائه داد.اما یک تعریف رسمیتر، کمکی به درک بهتر شما از نرم افزار نمیکند؛ بلکه باید به ویژگیهایی پرداخت که نرم افزار را از دیگر ساختههای بشر متمایز میکند.نرم افزار، بیش از آنکه یک سیستم فیزیکی باشد، یک سیستم منطقی است؛ بنایراین نرم افزار یک ویزگی اساسی دارد که آن را به طور قابل توجهی از سخت افزار متمایز میکند: نرم افزار “فرسوده” نمی شود.شکل 1-1، میزان خرابی سخت افزار را به عنوان تابعی از زمان نشان میدهد. این رابطه، که اغلب “منحنی وانی شکل” نامیده می شود، نشان می دهد که سخت افزار در اوایل عمر خود از خرابی نسبتاً بالایی برخوردار است(این خرابی ها اغلب به نقص طراحی یا ساخت مربوط می شود)؛ نقص ها اصلاح می شوند و میزان خراب برای مدتی به سطح پایداری کاهش می یابد(امیدواریم که این مقدار، کم باشد).با گذشت زمان، خرابی
مجدداً افزایش می یابد، زیرا اجزای سخت افزار تحت تأثیر تجمعی از گرد و غبار، لرزش، استفادهی نابجا، درجه حرارت شدید و بسیاری دیگر از اختلالات محیطی قرار میگیرد.به زبان ساده، سخت افزار شروع به فرسودگی می کند.
نرم افزار، تحت تأثیر عوامل جزوه میدان ها و امواج که سبب فرسودگی سخت افزار می شوند، قرار نمیگیرد. بنابراین، اصولاً منحنی میزان خرابی نرم افزار، به شکل یک منحنی “ایدهآل” میباشد که در شکل 2-1 نشان داده شده است. نقصهای کشف نشده منجر به افزایش خرابی در اوایل عمر یک برنامه میشوند.با این حال، با اصلاح این نواقص، منحنی، مطابق شکل به حالت صاف در میآید.منحنی ایدهآل، یک ساده سازی بیش از حد و واقعی از مدلهای خرابی موجود برای نرم افزار است.بنابراین کاملاً واضح است که نرم افزار فرسوده و کهنه نمیشود.اما میتواند خراب شود.میدان ها و امواج تناقض را میتوان با در نظر گرفتن منحنی موجود در تصویر 2-1، توضیح داد.در این شکل، تغییرات 3 نرم افزار بر حسب زمان نشان داده شده است.همزمان با ایجاد تغییرات، احتمالاً خطاهایی رخ میدهد که سبب افزایش ناگهانی خرابی میشود که این موضوع در “منحنی موجود” (در شکل 2-1)، قابل مشاهده است.
قبل از بازگشت منحنی خرابی به حالت پایدار، تغییر دیگری ایجاد میشود که مجدداً منحر به افزایش ناگهانی خرابی خواهد شد.به تدریج، حداقل میزان خرابی شروع به افزایش می کند؛ در این حالت، نرم افزار به دلیل تغییرات ایجاد شده، در حال خراب شدن است.نرم افزار و سخت افزار، در بحث فرسودگی تفاوت دیگری نیز دارند؛ وقتی یک بخش از سخت افزاری فرسوده می شود، با یک قطعهی یدکی جایگزین می شود، اما در نرم افزار قطعهی یدکی وجود ندارد.هر خرابی نرم افزار، بیانگر یک خطا در طراحی، یا فرآیند ترجمهی طرح، به کد اجرایی ماشین، میباشد. بنابراین ، تعمیر و نگهداری نرم افزار که تغییرات لازم را جزوه میدان ها و امواج می کند، به مراتب پیچیدگی بیشتری نسبت به تعمیر و نگهداری سخت افزار دارد.
1-1-2 دامنهی کاربرد نرم افزار
امروزه، هفت دستهی گسترده از نرم افزارهای کامپیوتری، دائماً مهندسین نرم افزار را با چالشهایی روبرو میکنند:
نرم افزار سیستم: مجموعه ای از برنامهها که جهت سرویس دهی به برنامه های دیگر طراحی شدهاند. برخی از نرم افزارهای سیستم(به عنوان مثال مؤلفان، ویرایشگران و برنامه های کاربردی مدیریت فایل)، علیرغم پردازش پیچیده، ساختارهای اطلاعاتی مشخصی دارند.سایر برنامه های سیستمی(به عنوان مثال، اجزای سیستم عامل، درایورها، نرم افزار شبکه سازی و پردازنده های ارتباط از راه دور)، عمدتاً داده های نامشخص را پردازش می کنند.
نرم افزار کاربردی: برنامه های مستقل، که یک نیاز خاص تجاری را برطرف می کنند.برنامههای کاربردی در این زمینه، با پردازش دادههای تجاری یا فنی، امور تجاری یا تصمیم گیریهای مدیریتی/فنی را تسهیل میکنند.
نرم افزار مهندسی / علمی: مجموعهی وسیعی از برنامههای “میدان ها و امواج عدد(برنامههایی با توان محاسباتی بالا)”، یا برنامههای تحلیل دادهها، از نجوم گرفته تا آتشفشان شناسی، از تجزیه و تحلیل کشش مستقل گرفته تا دینامیک دایرهای، از طراحی کامپیوتری تا روند سرمایهگذاری کاربران، و از تجزیه و تحلیل ژنتیکی تا علم هواشناسی را شامل میشود.
نرم افزار جاسازی شده: در داخل یک محصول یا سیستم قرار دارد و جهت پیاده سازی و کنترل دادهها و کارکرد برای کاربر نهایی و خود سیستم، به کار میرود. نرم افزار جاسازی شده می تواند عملکردهای محدود و پیچیدهای(به عنوان مثال، کنترل صفحه کلید اجاق مایکروویو) را انجام دهد، یا قابلیت عملکرد و کنترل قابل توجهی فراهم کند(به عنوان مثال، امور دیجیتالی در اتومبیل، مانند کنترل سوخت، صفحه نمایش داشبورد و سیستم ترمز).
نرم افزار خط تولید: این نرم افزارها متشکل از اجزای چند بار مصرفی هستند که طراحی شدهاند تا قابلیت های خاصی را جهت استفاده توسط بسیاری از مشتریان مختلف فراهم کنند. این گروه از برنامهها، ممکن است در یک بازار محدود و پیچیده(به عنوان مثال، ابزارهای کنترل موجودی) تمرکز کنند، و یا در زمینهی تولید انبوه، تلاش کنند.
نرم افزار وب/تلفن همراه: این گروه از نرم افزارهای شبکه محور، شامل برنامههای مختلفی مثل نرم افزارهای مبتنی بر مرورگر، رایانش ابری، رایانش مبتنی بر خدمات و نرم افزارهای تعبیه شده در تلفن همراه، میشوند.
نرم افزار هوش مصنوعی: این نرم افزارها، در مواقعی که قادر به محاسبهی منظم یا تجزیه و تحلیل مستقیم نباشیم، از روشهای ابتکاری استفاده میکنند.این برنامه ها شامل روباتها، سیستمهای تصمیم یار، تشخیص الگو(تصویر و صدا)، یادگیری ماشین، اثبات قضیه و بازی میشوند.
میلیون ها مهندس نرم افزار در سراسر جهان، سخت مشغول کار روی پروژههای نرم افزاری در زمینهی یک یا چند مورد از دستههای ذکر شده هستند.برخی پروژهها به ساخت یک سیستم جدید، و بسیاری به اصلاح، انطباق و بهبود برنامههای موجود میپردازند.عجیب نیست که یک مهندس نرم افزار جوان، روی برنامهای کار کند که قدمت بیشتری از خودش داشته باشد!نسلهای گذشته، نسخههای جزوه میدان ها و امواج از هر گروه از مجموعه نرم افزارها که بیان کردیم، به جا گذاشتهاند؛ امیدواریم نسخههای امروزی، کار مهندسان نرم افزار نسل آینده را آسان کند.
3-1-1 نرم افزار منسوخ شده
صدها هزار برنامهی کامپیوتری، هرکدام در یکی از هفت گروهی که در بخش قبلی بحث شد، قرار می گیرند.برخی از آنها، نرم افزارهای پیشرفته هستند؛ اما برخی قدیمی و گاهی حتی بسیار قدیمی هستند.میدان ها و امواج بسیار قدیمی که اغلب به عنوان نرم افزار منسوخ شده شناخته میشوند، از دههی 1960، دائماً مورد توجه قرار گرفتهاند.دایانی فرد و همکارانش، نرم افزار منسوخ شده را به صورت زیر تعریف میکنند:
سیستمهای نرم افزاری منسوخ شده…دههها قبل به وجود آمدهاند و دائماً جهت پاسخگویی به تغییرات نیازهای شغلی و سیستم عاملهای کامپیوتری، اصلاح شدهاند.به دلیل زیاد بودن این سیستمها، پیدا کردن آنها برای سازمانهای بزرگ دشوار است؛ همچنین حفاظت از آنها پرهزینه و توسعهی آنها خطرساز است.این تغییرات میتواند در نرم افزارهای منسوخ شده با کیفیت پایین، اثرات جانبی ایجاد کند.سیستم های منسوخ شده، گاهی دارای طراحیهای غیر قابل گسترش، کدهای پیچیده، اسناد نامعتبر یا ناموجود، موارد آزمایشی و نتایج بایگانی نشده، و یک تاریخچهی تغییرات هستند که به درستی مدیریت نشده است.اما علیرغم مشکلات زیاد، این سیستمها، اغلب از “عملکردهای اصلی” پشتیبانی میکنند و برای کسب و کار و تجارت، ضروری هستند.
اکنون چه باید کرد؟ معقولترین پاسخ میتواند این باشد: حداقل تا زمانی که نرم افزار منسوخ شده، نیاز به تغییرات اساسی پیدا نکرد، اقدامی نکنید؛ این نرم افزار، تا زمانی که پاسخگوی کاربران خود باشد و درست اجرا شود، خراب نیست و نیازی به تعمیر نخواهد داشت.با این حال، با گذشت زمان، سیستمهای قدیمی اغلب به یکی یا چند دلیل از دلایل زیر، تغییر میکنند:
• نرم افزار، باید پاسخگوی نیازهای محیطها و تکنولوژیهای کامپیوتری جدید، و متناسب با آنها باشد.
• نرم افزار، باید جهت پیادهسازی الزامات تجاری جدید، ارتقا یابد.
• نرم افزار باید توسعه یابد، تا در سایر سیستمها یا پایگاههای داده، قابل اجرا باشد.
• نرم افزار باید مجدداً بایگانی شود، تا بتواند در یک محیط کامپیوتری در حال توسعه، به اجرا در بیاید.
بنابراین به دلیل این تحولات، یک نرم افزار منسوخ شده باید مجدداً مهندسی شود تا در آینده دوام داشته باشد.هدف مهندسی نرم افزار مدرن، “ابداع روشهایی مبتنی بر مفهوم تکامل است؛ یعنی سیستمهای نرم افزاری دائماً تغییر میکنند، میتوان از سیستمهای قدیمیتر، نرم افزارهای جدیدتر ساخت، و…همه باید با یکدیگر تعامل و همکاری کنند”.
2-1 تعریف قوانین
مؤسسهی مهندسان برق و الکترونیک، مهندسی نرم افزار را اینگونه تعریف میکند:
مهندسی نرم افزار: استفاده از یک رویکرد منظم، قانونمند و قابل اندازه گیری، میدان ها و امواج توسعه، راهاندازی و جزوه میدان ها و امواج از نرم افزار، تعریفی از کاربرد مهندسی نرم افزار است.
تصویر 3-1
با این وجود، یک رویکرد “منظم، قانونمند و قابل اندازه گیری”، که توسط یک گروه از نرم افزارها اتخاذ میشود، ممکن است برای نرم افزار دیگر سنگین باشد.ما به نظم و انسجام و در عین حال به سازگاری و مهارت احتیاج داریم. مهندسی نرم افزار، یک فناوری چندلایه است.با توجه به نمودار موجود در تصویر 3-1، هر رویکرد مهندسی(از جمله مهندسی نرم افزار) باید براساس یک تعهد سازمانی به کیفیت باشد. احتمالاً راجع به مدیریت کیفیت جامع(TQM) یا شش سیگما و سایر فلسفههای مشابه، که فرهنگ اصلاح مداوم فرآیندها را پرورش می دهند، شنیدهاید.این فرهنگ است، که در نهایت به رویکردهای مؤثرتری در مهندسی نرم افزار میانجامد.پشتیبانی مهندسی نرم افزار، متمرکز بر کیفیت است.اساس مهندسی نرم افزار، لایه فرآیند است.فرایند مهندسی نرم افزار، مانند چسبی است که لایه های فناوری را به هم متصل کرده و آنها را قادر به اصلاح منطقی و به موقع نرم افزار کامپیوتر می سازد.فرایند، یک چارچوب برای ارائهی موثر فناوری مهندسی نرم افزار تعریف میکند.فرآیند نرم افزار، اساس کنترل مدیریت پروژه های نرم افزاری است و زمینهی اعمال روشهای فنی، ارائهی نتایج کار(مدل ها، اسناد، دادهها، گزارشها، فرمها و …)، ایجاد پیشرفتهای چشمگیر، تضمین کیفیت و احتمالاً مدیریت تغییرات را فراهم میکند.روش های مهندسی نرم افزار، راهکارهایی فنی جهت ساخت نرم افزار ارائه می میدان ها و امواج .این راهکارها شامل مجموعهی وسیعی از اقدامات، مانند ارتباطات، مقررات، تجزیه و تحلیل، مدل سازی، طراحی، ساخت برنامه، آزمایش و پشتیبانی است. روش های مهندسی نرم افزار، مبتنی بر مجموعه ای از اصول اساسی است که تمام حوزههای فناوری را تحت تأثیر قرار میدهد و شامل فعالیت های مدل سازی و سایر تکنیک های توصیفی است. ابزارهای مهندسی نرم افزار، به طور خودکار یا نیمه خودکار از فرآیند و روش ها پشتیبانی میکند.هنگام ادغام ابزارها، اطلاعات ایجاد شده توسط یک ابزار، میتواند توسط ابزار دیگر مورد استفاده قرار گیرد، در این حالت، سیستمی به نام مهندسی نرم افزار کامپیوتری، جهت پشتیبانی از توسعهی نرم افزار تشکیل خواهد شد.
3-1 فرآیند نرم افزار
فرآیند، مجموعه ای از فعالیت ها، اقدامات و وظایف انجام شده در مراحل تولید یک محصول میباشد.فعالیتهای مربوطه، جهت دستیابی به اهداف گوناگون(به عنوان مثال، ارتباط با سهامداران) و بدون توجه به دامنهی کاربرد و اندازهی پروژه، پیچیدگی مراحل کار، یا نوع مهندسی نرم افزار که در پیش گرفتهایم، انجام میشوند.اموری مثل طراحی معماری، شامل اقداماتی هستند که منجر به ارائهی جزوه میدان ها و امواج مثل مدل معماری میشود.هر اقدام، روی هدف کوچک اما مشخصی(مثل انجام یک واحد آزمایش)، تمرکز میکند که نتایج مشخصی به دنبال دارد. در زمینهی مهندسی نرم افزار، یک فرآیند، یک نسخهی دستوری برای ساخت یک نرمافزار کامپیوتری نیست.بلکه رویکردی قابل انطباق است که افراد مشغول به کار( تیم سازندهی نرم افزار) را قادر به انتخاب اقدامات و وظایف مناسب میکند.هدف، همواره ارائهی به موقع نرم افزار، با کیفیت بالا، جهت کسب رضایت سرمایهگذاران و کاربران است.
1-3-1 چارچوب فرآیند
چارچوب فرآیند، ضمن شناسایی تعدادی از فعالیتهای قابل اجرا در تمام پروژههای نرم افزاری، صرف نظر از اندازه و پیچیدگی آنها، اساس فرآیند مهندسی نرم افزار محسوب میشود. به علاوه، چارچوب فرآیند، شامل مجموعه ای از فعالیتهای حفاطتی است که در سرتاسر فرآیند نرم افزار، قابل اجرا هستند.در مهندسی نرم افزار، یک چارچوب فرآیند عمومی شامل پنج مرحله است:
ارتباطات. قبل از شروع هر کار فنی، برقراری ارتباط و همکاری با مشتری(و سایر سهامداران)، بسیار مهم است.هدف ما، درک اهداف سهامداران برای پروژه، و کمک به تعریف ویژگیها و عملکرد نرم افزار است.
برنامه ریزی. با وجود یک نقشه، هر پیچیدگی آسان خواهد شد.برای مثال، پروژهی نرم افزاری که امری پیچیده میباشد، به کمک برنامه ریزی و طراحی “نقشه”، آسان خواهد شد.نقشهی پروژهی نرم افزاری، کار مهندسی نرم افزار را با توصیف امور فنی انجام شده، خطرات احتمالی، منابع موردنیاز، محصول نهایی کار و یک برنامهی کاری، تعریف میکند.

دانلود رایگان خلاصه کتاب میدان ها و امواج pdf
مدل سازی. شما چه یک باغبان باشید و چه یک سازندهی پل، چه یک مهندس هوانوردی، یک نجار و یا یک معمار باشید، روزانه با مدلهای مختلفی سر و کار خواهید داشت.در واقع، شما برای درک تصزیر در مقیاس بزرگ، یک “طرح” ایجاد میکنید، چنانچه در معماری، نحوهی قرارگیری اجزا در کنار هم و ویژگیهای دیگر، مورد بررسی قرار میگیرند.در صورت نیاز، میتوانید جزئیات بیشتری را در طرح خود اعمال کنید تا درک مشکل و راه حل آن، راحتتر شود؛ این همان کاری میدان ها و امواج که یک مهندس نرم افزار انجام میدهد و برای درک بهتر نیازهای نرم افزار و طرح مناسب جهت پاسخگویی به این نیازها، به ساخت مدل میپردازد.
ساخت و ساز. شما باید آنچه طراحی میکنید را بسازید.این کار، ترکیبی از کدنویسی (دستی یا خودکار) و آزمایش، جهت کشف خطاهای موجود در کدها است.
ارائه و ارزیابی. نرم افزار( به صورت کاملاً آماده و تمام کار، یا قبل از اتمام مراحل ساخت)، به مشتری تحویل داده میشود و براساس ارزیابی انجام شده توسط مشتری، بازخوردی ارائه میشود.
این پنج مرحلهی چارچوب عمومی، میتواند جهت توسعهی برنامههای کوچک و ساده، ساخت برنامههای وب، و برای مهندسی سیستمهای کامپیوتر محور بزرگ و پیچیده استفاده شود.جزئیات فرآیند نرم افزار، در هر مورد کاملاً متفاوت خواهد بود؛ اما مراحل چارچوب، مشابه خواهند بود. برای بسیاری از پروژه های نرم افزاری، مراحل چارچوب، به صورت تکرارشونده، به عنوان فرآیندهای پروژه، انجام میشوند؛ یعنی ارتباطات، برنامه ریزی، مدل سازی، ساخت و ساز و ارائه و ارزیابی، به طور مکرر، در تمام دفعات بازنویسی پروژهها اعمال می شوند.پس از هر بار بازنویسی و توسعه، نرم افزاری با بخشی از امکانات و عملکردهای کلی، به سهامداران ارائه میشود؛ بنابراین با هر بار بازنویسی، نرم افزار، کامل و کاملتر میشود.
2-3-1 اقدامات حفاظتی
با تعدادی از اقدامات حفاظتی، فعالیت های چارچوب فرایند مهندسی نرم افزار تکمیل می شود.به طور کلی، اقدامات محافظتی در سرتاسر یک پروژهی نرم افزاری اعمال می شوند تا به تیم نرم افزار در مدیریت و کنترل فرآیند، کیفیت، تغییرات و خطرات کمک کنند.جزوه میدان ها و امواج محافظنی شامل موارد زیر میشود:
ردیابی و کنترل پروژه نرم افزاری: به تیم نرم افزار، اجازهی ارزیابی توسعه در قالب برنامهی پروژه و اقدامات لازم برای پیشرفت مطابق برنامه را میدهد.
مدیریت خطرات: خطراتی که احتمالاً بر نتیجهی پروژه تأثیر میگذارند را ارزیابی میکند.
تضمین کیفیت نرم افزار: به میدان ها و امواج و اجرای اقدامات موردنیاز جهت تضمین کیفیت نرم افزار میپردازد.
بررسی های فنی: باارزیابی محصولات کار مهندسی نرم افزار، جهت کشف و برطرف کردن خطاها قبل از انتشار به فعالیتهای بعدی، تلاش میکند.
سنجش: به تعریف و جمع آوری فرآیند، پروژه، و سنجش محصول میپردازد که به تیم، در ارائهی نرم افزار پاسخگوی سهامداران، کمک میکند؛ همچنین میتواند در رابطه با تمام چارچوبها و اقدامات محافظتی، اعمال شود.
مدیریت پیکربندی نرم افزار: اثر تغییرات را در سراسر فرآیند نرم افزار، مدیریت میکند.
مدیریت قابلیت استفاده مجدد: به تعریف شرایط استفادهی مجدد از محصول(شامل اجزای نرم افزار) میپردازد و ساز و کاری جهت دستیابی به اجزای قابل استفادهی مجدد، ارائه میدهد.
تهیه و تولید محصول کار: شامل اقدامات لازم جهت ساخت محصولات، مثل مدلها، اسناد، گزارشها، الگوها و فهرستها میشود.
در بخشهای بعدی این کتاب، هر کدام از این اقدامات محافظتی، با جزئیات بیشتر بررسی خواهند شد.
3-3-1 انطباق فرآیند
قبلاً در این بخش اشاره کردیم که فرآیند مهندسی نرم افزار، نسخه و قانونی مشخص نیست که توسط یک تیم نرم افزاری به اجرا در بیاید.بلکه باید قابل انطیاق باشد( نسبت به مشکل موردنظر، پروژه، تیم و فرهنگ جزوه میدان ها و امواج ). بنابراین، فرایندی که برای یک پروژه اتخاذ شده، ممکن است تفاوت قابل توجهی با پروژههای دیگر داشته باشد.از جمله این تفاوتها میتوان به موارد زیر اشاره کرد:
جریان کلی فعالیتها، اقدامات، وظایف و ارتباط متقابل بین آنها
• نحوهی تعریف اقدامات و وظایف، در هر چارچوب فرآیند
• نحوهی شناسایی و استفاده از محصولات کار
• روش انجام اقدامات تضمین کنندهی کیفیت
• نحوهی ردیابی و کنترل فعالیتها
• میزان دقت و جزئیات در توضیح فرآیند
• میزان مشارکت مشتریان و سهامداران در پروژه
• میزان اختیارات تیم نرم افزار
• نحوهی تشکیل تیم و تعیین نقشها
در فصل اول این کتاب، به بررسی دقیق فرآیند نرم افزار، میپردازیم.
4-1 عمل مهندسی نرم افزار
در بخش 3-1، یک مدل فرآیند نرم افزار عمومی متشکل از جزوه انتقال جرم و حرارت از فعالیتها را به عنوان چارچوب مهندسی نرم افزار معرفی کردیم.فعالیتها کلی این چارچوب، شامل ارتباطات، برنامه ریزی، مدل سازی، ساخت و سازها و ارائه و ارزیابی، به همراه اقدامات محافظتی، یک طرح کلی برای نرم افزار ایجاد میکند.اما نحوهی مطابقت مهندسی نرم افزار، به چه شکل است؟در ادامه، به درک اساسی از مفاهیم و قوانین کلی فعالیتهای انجام شده در چارچوب، خواهید رسید.
1-4-1 اساس مهندسی نرم افزار
جورج پولیا، در کتاب قدیمی و موثق “چطور به حل مسئله بپردازیم”، که قبل از وجود کامپیوترهای مدرن نوشته شده بود، اساس حل مسئله و متعاقباً اساس مهندسی نرم افزار را بیان کرد:
1. مسئله را درک کنید (ارتباط و تحلیل).
2. یک راه حل (مدل سازی و طراحی نرم افزار) طراحی کنید.
3. طرح موردنظر را اجرا کنید(کدنویسی).
4. صحت نتیجهی به دست آمده را بررسی کنید(جزوه میدان ها و امواج و تضمین کیفیت).
در زمینهی مهندسی نرم افزار، این مراحل، منجر به شکل گیری سؤالات اساسی میشوند(به نقل از جورج پولیا):
درک مسئله. حقیقتاً گاهی درک مسئله مشکل است و ما از روی غرور با آن برخورد میکنیم؛ پس از چند ثانیه تأمل، فکر میکنیم که موضوع را فهمیدهایم و سراغ حل آن میرویم.متأسفانه درک مسئله، همیشه چندان آسان نیست.در ادامه به پاسخ به تعدادی سؤال ساده، اما مهم میپردازیم:
• چه کسانی در حل مشکل مشارکت میکنند؟به عبارت میدان ها و امواج، سهامداران چه کسانی هستند؟
• چه مواردی مجهول ماندهاند؟دادهها، اقدامات و ابزارهای موردنیاز جهت حل مشکل، چه هستند؟
• آیا میتوان مشکل راب ه چند بخش تقسیم کرد؟آیا میتوان مشکلات جزئیتر که درک آنها آسانتر است را مطرح کرد؟
• آیا میتوان مشکل موردنظر را به تصویر کشید؟آیا میتوان یک مدل تحلیلی طراحی کرد؟
طراحی یک راه حل. اکنون که مشکل را درک کردهاید(یا تصور میکنید که درک کردهاید)، بی صبرانه منتظر شروع کدنویسی هستید. اما پیش از آن، کمی صبر کنید و به ذهن خود را مرتب کنید:
• آیا سابقاً به مشکل مشابهی برخوردهاید؟آیا الگویی مشخص برای ارائهی یک راه حل کارآمد وجود دارد؟آیا نرم افزاری برای پیاده سازی دادهها، اقدامات و ابزارهای موردنیاز وجود دارد؟
• آیا قبلاً مشکل مشابهی را حل کردهاید؟در این صورت، آیا راه حل آن، مجدداً قابل استفاده است؟
• آیا میتوان چیزی به نام مشکلات فرعی میتوان تعریف کرد؟در این صورت، آیا راه حلی کارآمد برای این مشکلات وجود دارد؟
• آیا میتوانید راه حلی ارائه دهید که به نحوی مؤثر به اجرا دربیاید؟آیا میتوان یک مدل طراحی تهیه کرد؟
اجرای طرح موردنظر. طرحی که تهیه کردهاید، به عنوان یک نقشه برای سیستمی که میخواهید بسازید، عمل می کند.ممکن است مسائل غیرمنتظرهای پیش بیاید، یا حتی در حین کار، متوجه روش بهتری برای حل مشکل خود شوید، اما “طرح” موردنظر، منجر میشود تا بدون سردرگمشدن، به مسیر خود ادامه دهید.
• آیا راه حل با برنامه مطابقت دارد؟آیا کد منبع در مدل طراحی قابل ردیابی است؟
• آیا صحت تمام بخشهای راه حل موردنظر، قابل اثبات است؟آیا طرح و کدها، یا صحت الگوریتم موردنظر بررسی شده است؟
ارزیابی نتیجه. شما نمی توانید از بی نقص بودن راه حل خود مطمئن باشید، اما میتوانید با اجرای آزمایشات کافی، تا حد امکان به شناسایی خطاهای احتمالی بپردازید.
• آیا میتوان تمام بخشهای راه حل خود را آزمایش کرد؟آیا استراتژی خاصی در این آزمایشات، در پیش گرفته میشود؟
• آیا راه حل موردنظر، نتایجی مطابق دادهها، اقدامات و ابزارهای موردنیاز، به دنبال خواهد داشت؟آیا نرم افزار موردنظر، در مقابل تمام احتیاجات سهامداران تأیید شده است؟
بدون شک، این رویکرد، کاملاً منطقی و اصولی میباشد.در واقع، یک رویکرد کلی در مهندسی نرم افزار، هیچ گاه سبب گمراهی شما نخواهد شد.
2-4-1 مقررات کلی
فرهنگ لغت، کلمهی “مقررات” را به عنوان “قوانین اساسی مهم یا عناصر مورد نیاز در یک جزوه میدان ها و امواج هوشمند”، تعریف می کند.در سرتاسر این کتاب، این مقررات را در سطوح مختلف بررسی خواهیم کرد.عدهای بر مفهوم کلی مهندسی نرم افزار و سایرین، بر یک فعالیت چارچوب کلی خاص(مثل ارتباطات)، تمرکز میکنند؛ حتی برخی افراد، بر فعالیتهای مهندسی نرم افزار( مثل طراحی معماری) میدان ها و امواج فنی( مثل تهیهی یک طرح رایج)، تمرکز میکنند.صرف نظر از این مسائل، مقررات کمک میکنند تا یک نقشهی ذهنی در مورد مفهوم کلی مهندسی نرم افزار، ایجاد کنید؛ بنابراین این مقررات از اهمیت زیادی برخوردارند.دیوید هوکر، 7 قانون متمرکز بر شیوهی کلی مهندسی نرم افزار مطرح کرده است.در بندهای بعدی، به توضیح این اصول میپردازیم:
اصل اول: توجه کنید که دلیل ظهور نرم افزارها چه بوده است.
دلیل وجود سیستمهای نرم افزاری، راحتی کاربران است؛ در تمام تصمیم گیریها، باید این موضوع را در نظر گرفت. قبل از تعیین نیازها و عملکرد سیستم، قبل از تعیین سیستم عاملهای سخت افزاری یا فرایندهای توسعه، از خود بپرسید: “آیا این کار اعتبار سیستم را بیشتر میکند؟”اگر پاسخ منفی است، از انجام آن خودداری کنید.سایر اصول نیز از این مسئله پشتیبانی میکنند.
اصل دوم: سخت نگیرید و راه آسانتر را انتخاب کنید.
در طراحی، عوامل زیادی باید در نظر گرفته شوند.طراحی باید تا حد امکان ساده باشند؛ اما نه بیشتر از آن.در این صورت، درک و حفظ سیستم آسانتر خواهد شد.این ساده سازی، به معنی نادیده گرفتن ابزارها و ویژگیها نیست.در واقع، طراحیهای ظریفتر، معمولاً سادهتر هستند.منظور از لفظ ساده، “سریع و در هم و برهم” نیست.بلکه برعکس، ساده سازی طراحیها، اغلب نیازمند تفکر و کار مضاعف است.نتیجهی نهایی، تولید نرم افزاری با قابلیت نگهداری بیشتر و مستعد خطای کمتر، میباشد.
اصل سوم: یک نقشهی ذهنی داشته باشید.
یک نقشهی ذهنی، برای موفقیت یک پروژه نرم افزاری ضروری است.بدون یکپارچگی مفهومی، سیستم به مجموعهای از طرحهای ناقص و نیمه کاره، که به نحوی نادرست، در کنار یکدیگر قرار گرفتهاند، تبدیل خواهد شد.به خطر افتادن نقشهی ساختاری سیستم، سبب تضعیف : ؛ ؛ : ً “” :
فهرست مطالب