مفاهیم مهندسی نرمافزار - قسمت اول
نگهداری نرمافزار یا software maintenance
به نظر شما چرا برنامه ها و سیستم های نرمافزاری ساخته میشوند؟ شاید یکی از اصلی ترین دلایل این اتفاق، رفع نیاز های دنیای واقعی باشد(از این بگذریم که برخی از نرم افزار ها برای ایجاد نیاز هم ساخته میشوند!).
بطور مثال به سیستم گلستان فکر کنید. برای رفع چه نیازی ساخته شده؟ به زبان ساده میتوان گفت برای مدیریت هرچه که به دانشگاه مربوط میشود. مثل مشخصات دانشجویان، اساتید، رشته ها و واحد های تحت پوشش دانشگاه.
شاید یک برنامه نویس مبتدی تنها از برنامه نویسی یک هدف داشته باشد: برنامه ساخته شده به درستی کار کند.
اما درستی کارکرد برنامه شاید بخشی از ویژگی هایی باشد که یک برنامه را بهتر میکند.
یکی از ویژگی های دیگر که به همان اندازهی کارکرد اهمیت دارد، این است که برنامه قابل نگهداری باشد.
چرا برنامه و کد های برنامه نویسی باید قابل نگهداری باشند؟ برای اینکه بعدها راحت تر برنامه را تغییر دهیم و نسخه های بعدی را بسازیم.
اصلا چرا باید برنامه را تغییر دهیم؟ یکی از مهم ترین دلایل آن این است نیاز های کاربران در طول زمان تغییر میکند.
بطور مثال به این برنامه ساده فکر کنید: چاپ مقسوم علیه های یک عدد. حتی سه سال دیگر هم از این برنامه انتظار میرود که مجموع مقسوم علیه های یک عدد را چاپ کند. برای همین برنامه نویس های مبتدی معمولا به این فکر نمیکنند که کد هایشان را جوری بنویسند که بعد ها راحت تر تغییرش دهند(که با توجه مسائلی که درگیرشان هستند طبیعتا حق هم دارند).
اما در دنیای واقعی هم همینطور است؟ نگاهی کوتاه به اپلیکیشن های مطرح دنیا مشخص میکند که این اپ ها در بدترین حالت ماهانه بروزرسانی میشوند. حتی پیشروی در این امر باعث پدید آمدن مفاهیمی مثل beta version و early access شده.
به مثال های زیر در دنیای واقعی دقت کنید:
- دیجی کالا برای بهبود ظاهر سایتش، تکنولوژی front-end سایت خود را از jQuery به reactJs تغییر میدهد.
- فیلیمو با توجه به اینکه تلویزیون های خانگی امروزی به سیستم عامل اندروید مجهز هستند، نسخه android tv اپلیکیشناش را میسازد و سرور های سرویسدهی فیلم اش را روی آن پیادهسازی میکند. به این فکر کنید که نیاز ها نسبت به android box کمتر شده. به این که برای ساخت این اپلیکیشن از سورس کد قبلی اپ اندرویدش اسفاده کرده یا این که از از همه را از صفر ساخته؟
- شرکت sony بعد از اینکه متوجه میشود سرویس های استریم برای بازی محبوبیت زیادی پیدا کرده، دست به کار میشود و امکانات مربوط به استریم بازی را به پلی استیشن اضافه میکند.
- اینستاگرام برای رقابت با TikTok قابلیت reels را به اپلیکیشن خود اضافه میکند.
اینها فقط بخشی از میلیون ها تغییراتی بودند که در مهندسی نرمافزار رخ داده است.
با وجود اینکه روش های علمی برای محاسبه قابلیت نگهداری نرمافزار وجود دارد شاید بتوان تعریف کیفی زیر را پذیرفت:
هرچه برنامه راحت تر تغییر کند و برای تغییر پیچیدگی کمتری داشته باشد، قابلیت نگهداری آن بیشتر است.
برای همین میتوانیم بجای قابلیت نگهداری از تغییر پذیری هم در گفتار استفاده کنیم. دو عامل اصلی کد های تغییر پذیر، الگوهای طراحی و مستند سازی دقیق هستند.
در آخر برای مطالعه مفاهیم نگهداری نرمافزار مطالعه کتاب های زیر را پیشنهاد میکنم:
همه این کتاب ها به خصوص کتاب اول و آخر به شدت کاربردی و حرفه ای هستند.
-- Edward Sciore, Java program design, Apress, 2019.
-- Gamma E, Vlissides J, Johnson R, Helm R, Design patterns: elements of reusable object-oriented software, Addison-Wesley 1994.
--Jared Bhatti, Docs for developers: An Engineer’s Field Guide to Technical Writing, Apress 2020
-- Joost Visser, Building maintainable software, 2nd edition, O'Reilly, 2016.
-- Ervin varga, Unraveling software maintenance and evolution: thinking outside the box, Springer, 2018.