Y@SiN
08-13-2009, 03:59 PM
اشاره : بحث مهندسی نرمافزار از آن روزی که در سال 1968 برای اولین بار در کنفرانس ناتو عنوان شد، سالها است که به عنوان رشته مهندسی فنی به کار گرفته میشود.
بحث مهندسی نرمافزار از آن روزی که در سال 1968 برای اولین بار در کنفرانس ناتو عنوان شد، سالها است که به عنوان رشته مهندسی فنی به کار گرفته میشود. امروزه، سیستمهای تحت وب، تحت ویندوز، Embedded و صنعتی زیادی به کمک این رشته تولید میشوند و رمز موفقیت آمیز بودن هر پروژه نرمافزاری بزرگ را می توان در بهکارگیری دستورالعملها و اصول مهندسی نرمافزار دانست.
از این اصول میتوان به پروسسها، اصول اجرای برنامهها، آموزش، آزمایش، برنامهریزی و زمانبندی، متدها و مدلهای ساخت نرمافزار اشاره کرد که باید در تمام پروژههای نرمافزاری بزرگ بهکار گرفته شوند، زیرا وقتی خواستههای کاربران نرمافزار زیاد و پیچیده میشود و این نیازها روزبهروز در تغییر هستند نمیتوان بدون اصول و دستورالعملهای تخصصی پروژهای را با موفقیت به اتمام رساند.
http://pnu-club.com/imported/2009/08/642.jpgامروزه، در مهندسی نرمافزار از استانداردهایی مانند استانداردهای برنامهنویسی، مستندسازی، پروتکلها و استانداردهای طراحی استفاده میشود و از مدلهایی مانند مدل آبشاری، RUP و... در ساخت نرمافزار استفاده میشود.
علاوه بر آن، استفاده از ابزارهای تولید نرمافزار نیز به تولیدکنندگان اجازه میدهد بتوانند برنامههایی با استانداردهای بالاتری تولید کنند. در سالهای اخیر متدهایی مانند Agile به جای مدلهای ساخت آبشاری نرمافزار خود را نشان دادند. در این مدلها دیگر تغییر در نیازهای کاربران تأثیر زیادی روی نرمافزار نمیگذاشت.
همه این متدها و روشهای نوین ساخت نرمافزار جهت تولید سیستمهای خوب است. برای تولید یک نرمافزار خوب یک مهندس نرمافزار خوب لازم است که استانداردهای تولید نرمافزار را رعایت کند، کیفیت نرمافزار را مدنظر قرار دهد و از زبانهای برنامهنویسی مدرن و متدهای Agile استفاده کند. اینها مواردی هستند که باید در مهندسی نرمافزار رعایت شود.
همانگونه که برنامهنویس با مهندس نرمافزار تفاوت دارد، تولید نرمافزار با مهندسی نرمافزار نیز تفاوت دارد. این تفاوت را میتوان در هشت اصل زیر دانست که مهندسی نرمافزار در تولید نرمافزار از آن استفاده میکند:
● استفـــــاده از Abstraction بـــــرای خلاصهکردن و تمرکز روی مسئله
● استفاده از متدهای آنالیز و طراحی
● استفاده از Prototyping برای تولید واسط کاربر
● بهکارگیری معماری نرمافزاربرای درک بهتر از اجزا و چگونگی ارتباط هر یک با دیگری
● استفاده از فرآیند نرمافزاری برای تولید
● استفاده از روش Reuse برای استفاده دوباره از اجزای سیستم
● استفاده از ابزارهای تولید و مدیریت نرمافزار
● اندازهگیری نرمافزار و پیچیدگیهای آن
واقعیت آن است که مهندسی نرمافزار هنوز ابعاد مبهمی دارد و بهنظر میرسد در آینده باید در مورد آن تحقیقات زیادی انجام گیرد.
یکی از این موارد فقدان یک روش ثابت و معین برای تبدیل یک ایده به یک محصول نرمافزاری است. بهاین معنی که هنوز متدولوژی معینی برای تولید پروژههای نرمافزاری وجود ندارد و نمیتوان نسخهای ثابت را برای نرمافزارها تجویز کرد. مهندسی نرمافزار به یک فناوری نیاز دارد که جزئیات طراحی، مدل مفهومی، مدل منطقی، مدل فیزیکی و آزمایش نرمافزار را از ابتدا معین کند و راه را کاملاً مشخص سازد. مشکل دیگری که دراین زمینه وجود دارد و باید به آن توجه کرد، فقدان سیستم تصمیم گیرنده در اصول مهندسی نرمافزار است.
همه این موارد باعث شده، پس از حدود سی سال تحقیق و بررسی روی علم مهندسی نرمافزار هنوز نتوان در مورد استفاده از متدها، ابزارها و تکنیکها تصمیمگیری کرد؛ حتی نمیتوان به سؤالات زیر در ابتدای یک پروژه نرمافزاری پاسخ داد و تصمیم قطعی گرفت:
● چه مدلی را برای تولید نرمافزار انتخاب کنیم؟
● چه مدل آزمایشی را باید در نظر بگیریم؟
● مدل پروسسها چه خواهد بود؟
● چگونه ریسکهای پروژه را به حداقل برسانیم؟
در آینده ما به نرمافزارهایی نیاز داریم که فناوری در آن به راحتی قابل انتخاب بوده و انتخاب یک متد در شروع پروژه ریسک بالایی نداشته باشد. باید پروسه در فناوری ادغام شده باشد و کیفیت نرمافزار را میتوان با استفاده از آن پروسه بالا برد.
همچنین نرمافزارها باید به نحوی آماده شوند تا نگهداری زیادی را در پایان کار نیاز نداشته باشند و فرآیند نگهداری یک نرمافزار به راحتی قابل اجرا باشد. مهندسی نرمافزار سالها است که وجود دارد، اما بهنظر میرسد، هنوز به پختگی کامل نرسیده است.
مهندسی نرمافزار هنوز در مواردی مانند Estimation، مدیریت یسک، مدیریت منابع، مدیریت کیفیت به تکامل نرسیده و باید تحقیقات و توسعه در آن به حداکثر برسد تا امیدوار شویم در پنج تا ده سال آینده به تکامل کافی برسد و بتواند سؤالاتی که در بالا به آن اشاره شد را به وضوح جواب دهد.
امین صفایی
بحث مهندسی نرمافزار از آن روزی که در سال 1968 برای اولین بار در کنفرانس ناتو عنوان شد، سالها است که به عنوان رشته مهندسی فنی به کار گرفته میشود. امروزه، سیستمهای تحت وب، تحت ویندوز، Embedded و صنعتی زیادی به کمک این رشته تولید میشوند و رمز موفقیت آمیز بودن هر پروژه نرمافزاری بزرگ را می توان در بهکارگیری دستورالعملها و اصول مهندسی نرمافزار دانست.
از این اصول میتوان به پروسسها، اصول اجرای برنامهها، آموزش، آزمایش، برنامهریزی و زمانبندی، متدها و مدلهای ساخت نرمافزار اشاره کرد که باید در تمام پروژههای نرمافزاری بزرگ بهکار گرفته شوند، زیرا وقتی خواستههای کاربران نرمافزار زیاد و پیچیده میشود و این نیازها روزبهروز در تغییر هستند نمیتوان بدون اصول و دستورالعملهای تخصصی پروژهای را با موفقیت به اتمام رساند.
http://pnu-club.com/imported/2009/08/642.jpgامروزه، در مهندسی نرمافزار از استانداردهایی مانند استانداردهای برنامهنویسی، مستندسازی، پروتکلها و استانداردهای طراحی استفاده میشود و از مدلهایی مانند مدل آبشاری، RUP و... در ساخت نرمافزار استفاده میشود.
علاوه بر آن، استفاده از ابزارهای تولید نرمافزار نیز به تولیدکنندگان اجازه میدهد بتوانند برنامههایی با استانداردهای بالاتری تولید کنند. در سالهای اخیر متدهایی مانند Agile به جای مدلهای ساخت آبشاری نرمافزار خود را نشان دادند. در این مدلها دیگر تغییر در نیازهای کاربران تأثیر زیادی روی نرمافزار نمیگذاشت.
همه این متدها و روشهای نوین ساخت نرمافزار جهت تولید سیستمهای خوب است. برای تولید یک نرمافزار خوب یک مهندس نرمافزار خوب لازم است که استانداردهای تولید نرمافزار را رعایت کند، کیفیت نرمافزار را مدنظر قرار دهد و از زبانهای برنامهنویسی مدرن و متدهای Agile استفاده کند. اینها مواردی هستند که باید در مهندسی نرمافزار رعایت شود.
همانگونه که برنامهنویس با مهندس نرمافزار تفاوت دارد، تولید نرمافزار با مهندسی نرمافزار نیز تفاوت دارد. این تفاوت را میتوان در هشت اصل زیر دانست که مهندسی نرمافزار در تولید نرمافزار از آن استفاده میکند:
● استفـــــاده از Abstraction بـــــرای خلاصهکردن و تمرکز روی مسئله
● استفاده از متدهای آنالیز و طراحی
● استفاده از Prototyping برای تولید واسط کاربر
● بهکارگیری معماری نرمافزاربرای درک بهتر از اجزا و چگونگی ارتباط هر یک با دیگری
● استفاده از فرآیند نرمافزاری برای تولید
● استفاده از روش Reuse برای استفاده دوباره از اجزای سیستم
● استفاده از ابزارهای تولید و مدیریت نرمافزار
● اندازهگیری نرمافزار و پیچیدگیهای آن
واقعیت آن است که مهندسی نرمافزار هنوز ابعاد مبهمی دارد و بهنظر میرسد در آینده باید در مورد آن تحقیقات زیادی انجام گیرد.
یکی از این موارد فقدان یک روش ثابت و معین برای تبدیل یک ایده به یک محصول نرمافزاری است. بهاین معنی که هنوز متدولوژی معینی برای تولید پروژههای نرمافزاری وجود ندارد و نمیتوان نسخهای ثابت را برای نرمافزارها تجویز کرد. مهندسی نرمافزار به یک فناوری نیاز دارد که جزئیات طراحی، مدل مفهومی، مدل منطقی، مدل فیزیکی و آزمایش نرمافزار را از ابتدا معین کند و راه را کاملاً مشخص سازد. مشکل دیگری که دراین زمینه وجود دارد و باید به آن توجه کرد، فقدان سیستم تصمیم گیرنده در اصول مهندسی نرمافزار است.
همه این موارد باعث شده، پس از حدود سی سال تحقیق و بررسی روی علم مهندسی نرمافزار هنوز نتوان در مورد استفاده از متدها، ابزارها و تکنیکها تصمیمگیری کرد؛ حتی نمیتوان به سؤالات زیر در ابتدای یک پروژه نرمافزاری پاسخ داد و تصمیم قطعی گرفت:
● چه مدلی را برای تولید نرمافزار انتخاب کنیم؟
● چه مدل آزمایشی را باید در نظر بگیریم؟
● مدل پروسسها چه خواهد بود؟
● چگونه ریسکهای پروژه را به حداقل برسانیم؟
در آینده ما به نرمافزارهایی نیاز داریم که فناوری در آن به راحتی قابل انتخاب بوده و انتخاب یک متد در شروع پروژه ریسک بالایی نداشته باشد. باید پروسه در فناوری ادغام شده باشد و کیفیت نرمافزار را میتوان با استفاده از آن پروسه بالا برد.
همچنین نرمافزارها باید به نحوی آماده شوند تا نگهداری زیادی را در پایان کار نیاز نداشته باشند و فرآیند نگهداری یک نرمافزار به راحتی قابل اجرا باشد. مهندسی نرمافزار سالها است که وجود دارد، اما بهنظر میرسد، هنوز به پختگی کامل نرسیده است.
مهندسی نرمافزار هنوز در مواردی مانند Estimation، مدیریت یسک، مدیریت منابع، مدیریت کیفیت به تکامل نرسیده و باید تحقیقات و توسعه در آن به حداکثر برسد تا امیدوار شویم در پنج تا ده سال آینده به تکامل کافی برسد و بتواند سؤالاتی که در بالا به آن اشاره شد را به وضوح جواب دهد.
امین صفایی