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