یکی از ارکان کلیدی صنعتی شدن تولید نرم افزار، بهره گیری از محیط ها و چارچوب توسعه نرم افزار است. چارچوب توسعه نرم افزار محیطی یکپارچه برای تولید نرم افزارهای سازمانی مختلف است. چنین چارچوب هایی، قابلیت، ابزارها و امکاناتی را در اختیار توسعه دهندگان نرم افزارهای سازمانی قرار می دهد تا بتوانند ضمن ارتقای کارایی فرآیند توسعه از الگوها و ابزارهای مبتنی بر تجربیات برتر نیز بهره مند شوند. با استفاده از چارچوب های توسعه نرم افزار، برنامه نویسان به جای تمرکز بر توسعه تمامی کارکردهای سطح پایین، بر استفاده مجدد از این کارکردها برای تولید کارکردهای پیچیده کسب و کاری تمرکز می کنند. همچنین فرآیند توسعه نیز با استفاده از ابزارهای خودکارسازی تحت کنترل بوده و تمامی مراحل توسعه، آزمون، یکپارچگی و استقرار مبتنی بر این ابزارها صورت می گیرد.
در حال حاضر چارچوب های متنوعی برای توسعه نرم افزار ارائه شده اند. این چارچوب ها اغلب قابلیت بومی سازی را نداشته و توسعه دهندگان همواره به ارائه دهندگان آنها وابسته هستند. علاوه بر این با ظهور فناوری های جدید در حوزه مهندسی نرم افزار، امکان بهره برداری از این قابلیت ها در صورتی میسر خواهد شد که ارائه دهندگان چارچوب، آنرا ارتقاء دهند. چارچوب توسعه نرم افزار تیبا مبتنی بر تجربه و توان تخصصی نیروهای داخلی و براساس استانداردها و اصول معتبر مهندسی نرم افزار تولید شده است. مزیت کلیدی این چارچوب تسلط و اشراف کامل تیم توسعه دهنده برای تغییر و به روزرسانی آن و همچنین پشتیبانی از روندها و فناوری های جدید در حوزه مهندسی نرم افزار است.
تولید نرم افزارهای سازمانی تیبا، براساس فناوری های Microservice،DDD، CQRS، Event Sourcing صورت می گیرد. چارچوب های متداول توسعه نرم افزار فناوری های فوق الذکر را پشتیبانی نمی کنند از این رو چارچوب توسعه نرم افزار تیبا یک چارچوب منحصر به فرد به شمار می رود. این چارچوب با ارائه مولفه های تکرارشونده و پرکاربرد، همچنین ابزارها و ساز و کارهای خودکار، امکان توسعه سیستم های سازمانی در مقیاس بزرگ را فراهم می سازد. این محصول امکان توسعه نرم افزار مبتنی بر رویکرد TDD و BDD را فراهم نموده و امکان استفاده از انواع فناوری های BUS برای یکپارچه سازی میکروسرویس ها را دارا است. همچنین به صورت کامل از رویکرد DevOps پشتیبانی نموده و چرخه CI و CD را به صورت کامل اجرایی می سازد. سیستم های سازمانی در تیبا به نحوی توسعه می یابند که استفاده از هر نوع پایگاه داده RDBMS و NoSQL و انبارهای داده تحلیلی (OLAPS)، امکان پذیر است. به عبارت دیگر بهره گیری از رویکرد Event Sourcing باعث شده است تا وابستگی نرم افزار به فناوری و نوع پایگاه داده به حداقل برسد. موضوعی که برای بسیاری از تولیدکنندگان نرم افزار یک دغدغه کلیدی به شمار می رود. با این تفاسیر می توان قابلیت ها و تجارب کلیدی متمایز شرکت نسبت به سایر تولیدکنندگان داخلی نرم افزار در کشور را به شرح زیر بیان نمود:
- تولید نرم افزار در قالب معماری میکروسرویس (Microservice)
- اجرای کامل رویکرد Test Driven Development برای تولید نرم افزارهای سازمانی قابل نگهداری
- پیاده سازی Event Sourcing
- پشتیبانی کامل از CI و CD
- پشتیبانی کامل از CQRS (Command and Query Responsibility Segregation)
- پشتیبانی از رویکرد AOP (Aspect Oriented Programming)
- چارچوب انحصاری برای تست API و UI براساس Gherkin Language
در ادامه هریک از مراحل کلیدی توسعه نرم افزار در شرکت تیبا توصیف شده است.
شناسایی و تحلیل نیازمندی ها
نرم افزارهای سازمانی شرکت تیبا با رویکرد ERP تولید می شوند. برای تعیین نیازمندی های این نرم افزار، مطالعات گسترده ای انجام می شود. در این مطالعات مشخصات و قابلیت های نرم افزارهای سازمانی برتر تولید شده در سطح جهانی از جمله SAP، Oracle، PeopleSoft و Microsoft Dynamics به عنوان Best Practice شناسایی می شوند. همچنین ادبیات موضوع و دانش تخصصی مربوط به هر حوزه از مراجع اصلی موضوع که توسط متخصصان حرفه ای در سطح بین المللی انتشار یافته اند، استخراج می گردد. علاوه بر این، مدل های مرجع فرآیندی از جمله APQC، SCOR، eTOM و BIAN نیز در صورت نیاز مورد بررسی قرار می گیرند. تجمیع منابع از مبادی مذکور، ورودی واحد تحلیل برای تعیین نیازمندی ها می باشد. براساس ورودی های مذکور، مدل تحلیل به صورت اولیه آماده شده و طی جلسات تحلیل، مدل نهایی ارائه می شود. چنین رویکردی در تعیین نیازمندی ها باعث شده است تا نرم افزارهای سازمانی تیبا از لحاظ کارکردها غنی (Rich Feature) باشند.
رویکرد مورد توجه در تحلیل نیازمندی ها، تعیین تمامی ابعاد تا حدامکان در هر دامنه (Domain) است. تا انعطاف پذیری قابلیت های نرم افزاری تولید شده و بلوغ آنها برای پاسخگویی به نیازمندی های کاربران تضمین گردد. در عمل براساس اولویت بندی های صورت گرفته، نیازمندی های کلیدی وارد چرخه طراحی و پیاده سازی شده و تولید سایر نیازمندی ها به مراحل بعدی تولید موکول می گردد.
تحلیل و طراحی
تحولات در مهندسی نرم افزار در راستای انطباق بیشتر با نیازمندی های کسب و کار باعث شکل گیری رویکردی تحت عنوان Domain Driven Design (DDD) شده است. هدف از این رویکرد افزایش انعطاف پذیری و قابلیت نگهداری نرم افزارها است. در این روش هریک از مولفه های نرم افزار در قالب یک دامنه از کسب و کار طراحی می شود. این رویکرد طراحی ارتباط نزدیکی با معماری میکروسرویس دارد. یکی از ملاحظات مهم در این رویکرد تعیین اندازه و دانهبندی سرویسها است. سرویس باید به اندازه کافی کوچک باشد که پیادهسازی آن به سهولت انجام شود. از سوی دیگر باید به قدر کافی نیز خوش اندازه باشد که تمامی کارکردهای مرتبط را پوشش دهد. همچنین سرویسها باید به نحوی تعریف شوند که نیازمندیهای جدید تنها بر یک سرویس تاثیرگذار باشد. به عنوان مثال در صورتی که ساختار نرخهای فروش تغییر یابد باید تنها میکروسرویس مدیریت نرخ ها نیازمند به روزرسانی بوده و تاثیری بر سایر میکروسرویسهای فروش نگذارد.
تحلیل و طراحی در شرکت تیبا برای تولید نرم افزارهای سازمانی براساس طراحی مبتنی بر دامنه (DDD) انجام می شود. در این نوع تحلیل و طراحی، ابتدا تحلیل استراتژیک انجام شده و سرویس های لازم در جهت افزایش کاربرد مجدد، کاهش وابستگی، مدیریت پیچیدگی در سطح کلان صورت می پذیرد. سپس در سطح تاکتیکی اجزای هر سرویس شناسایی شده و طراحی می گردد و در نهایت در سطح تفصیلی، مولفه های سطح قبل طراحی می شوند. در کلیه سطوح از اصول طراحی شی گرا تبعیت می گرد و طراحی های انجام شده مبتنی بر اصول SOLID می باشند.از الگوهای معماری (Architectural Patterns) در سطح استراتژیک و تاکتیکی و از الگوهای طراحی (Design Patterns) در سطح تفصیلی به صورت گسترده استفاده می شود.
پیاده سازی
چارچوب توسعه نرم افزار تیبا براساس رویکردهای متداول و استانداردهای مهندسی نرم افزار از جمله تحلیل و طراحی شی گرا، الگوهای معماری و طراحی شده است. تولید کد نیز به صورت کامل با بهره گیری از قواعد Clean Code شکل گرفته است. کدهای تولید شده تحت کنترل کیفیت بوده و در جلسات Review مورد بازنگری قرار می گیرند. زیرساخت تولید و یکپارچه سازی کد کاملاً خودکار بوده و با استفاده از ابزارهای TeamCity، TFS و Git فرآیند تولید و ذخیره سازی کد کاملاً تحت کنترل است.
برای تولید یک نرم افزار قابل نگهداری، فاکتور اول، خوانایی کدهای ساخته شده می باشد زیرا کدها یک بار نوشته می شوند اما ممکن است سالیان دراز مکرراً خوانده شده و تغییر یابند. در ایران، پیاده سازی را به برنامه نویسان کم تجربه تر می سپارند زیرا تصور بر این است که برای پیاده سازی یک طراحی خوب نیازی به تجربه زیاد وجود ندارد. اما برخلاف این تصور رایج، نوشتن کد تمیز و خوانا اعم از کد اصلی و کد تست ها نیاز به تجربه و تخصص فراونی دارد. مخصوصاً در کدهایی که قرار است سالیان دراز بمانند و تعداد خطوط آنها به چند صد هزار یا چند میلیون برسد. یک نرم افزار سازمانی هر دوی این ویژگی ها را دارد. پرسنل پیاده ساز شرکت در بدو ورود طی یک دوره آموزشی فشرده قواعد، الگوها و روش های استاندارد لازم برای نوشتن کد با کیفیت را آموزش می بینند.
تست
رویکرد اصلی در آزمون و تست استفاده از تست های خودکار است. براین اساس تست های واحد (Unit)، یکپارچگی (Integration) و پذیرش (Acceptance) به صورت کاملاً خودکار انجام می شود. طراحی تست ها با رویکرهای BDD و TDD انجام می شود. در رویکرد BDD سناریوهای تست توسط تیم تحلیل براساس زبان Gherkin نوشته شده و توسط مسئولین تست، به صورت خودکار اجرا می شود. در رویکرد TDD نیز تمامی توسعه دهندگان برای توسعه هر مولفه، ابتدا تست آنرا می نویسند و سپس کد اصلی پیاده می شود. شرط پذیرش کد تولید شده، پاس شدن تست ها است. در صورت نیاز به هر تغییر در سیستم، ابتدا تست ها به روز شده و کد اصلی تغییر می یابد و سپس تمامی تست های مرتبط اجرا می گردد تا نسبت به کارکرد صحیح اطمینان حاصل شود. تست های پذیرش در دو سطح API و GUI به سیستم متصل شده و به صورت خودکار اجرا می گردند. کلیه تست ها در سطح API پیاده سازی و اجرا می شوند ولی در سطح GUI تنها سناریوهای مثبت پیاده سازی و اجرا می شوند. در چارچوب توسعه تیبا، ابزارهایی موجود است که می توان از 70 درصد کد تست های پیاده شده API در تست های GUI استفاده کرد.
در کلیه تست های سیستم سه اصل خوانا بودن، قابل اعتماد بودن و قابل نگهداری بودن رعایت می گردد. یکی از آموزش های اصلی که گروه پیاده ساز فرا می گیرند، رعایت اصول فوق در پیاده سازی تست ها است. که بسیار مفصل بوده زیرا تجربه ثابت کرده با بلوغ نرم افزار و اضافه شدن کارکردهای جدید، تغییرات باعث از کار افتادن تست های گذشته شده و باعث ایجاد زحمت برای تیم پیاده ساز می شود و در نهایت کل Test Suit در طولانی مدت از رده خارج می شود علت اصلی این ماجرا عدم مهارت گروه پیاده ساز در تولید تست ها است. می توان گفت که نوشتن تست باکیفیت از نوشتن کد اصلی بسیار مشکل تر است و نیاز به آموزش کافی دارد. برای آموزش این مهم چک لیست ها و متون آموزشی مناسب با رویکرد کارگاهی تهیه و اجرا شده است.
یکپارچگی مستمر و تحویل مستمر (CI/CD)
رویکرد اصلی در این مرحله یکپارچه سازی مستمر (CI) و تحویل مستمر (CD) است. برای تحقق چنین رویکردی مجموعه ای از مولفه های زیرساختی ایجاد شده که فرآیند ساخت را کاملاً خودکار می سازند. ابزارهایی مانند Build ، Package Server، Integration Server،Build Server در این مرحله مورد استفاده قرار می گیرند.در صورت نیاز برای دو بخش Frontend و Backend از ابزارهای جداگانه استفاده می شود. به عنوان مثال Package Server مورد استفاده در Backend از نوع NuGet Server بوده و در Frontend از نوع NPM می باشد. Build Server مجموعه کدهای آماده برای Build را بر روی Package repository نگهداری می کند. در صورتی که چند ماژول برای اجرا به یکدیگر نیاز داشته باشند Build Server براساس قواعد مشخص شده Package هریک از آنها را به نوبت می سازد. براین اساس Build Pipeline برای ساخت Packageهای به هم وابسته تعریف می گردد. تعریف Build Pipeline و سایر تنظمیات Build بواسطه نوشتن Build Script با استفاده از زبان Cake Script صورت می گیرد. استفاده از Build Script، تیم توسعه را به زیرساخت Build وابسته ننموده و در هر زمان می توان زیرساخت Build را تغییر داد و Build Scriptها را بر روی زیرساخت جدید اجرا نمود. نکته حائز اهمیت در خصوص ساخت،استفاده از Static Code Analysis است. این ساز و کار تضمین می کند که کد تولید شده از لحاظ قواعد و اصول مورد نظر، مناسب و با کیفیت بوده و این قواعد در زمان نگارش آن رعایت شده است. چنین ساز و کاری باعث ساخت ماژول هایی با کیفیت می گردد. هنگام Check-in کدها به Source Control ابتدا کدها Build شده و سپس Unit Testها اجرا می شوند و در صورت بروز مشکل، Check-in لغو می گردد. بدین ترتیب در تمامی لحظات Codeهای داخل Source Control معتبر می باشند. هر شب تست های کندتر مانند تست های پذیرش اجرا شده و در صورت بروز مشکل مسئولین مربوطه به صورت الکترونیکی مطلع می گردند.
ماژول های تولید شده به صورت خودکار شماره نسخه دریافت نموده و Sign می شوند. براین اساس همواره می توان آخرین وضعیت ماژول استقرار یافته را در اختیار داشت و آنرا با آخرین نسخه از محصول تولید شده مقایسه کرد. برای استقرار نیز همانند Build از Deploy Script استفاده می شود تا تنظمیات استقرار محصول قابل مدیریت بوده و امکان استقرار کاملاً خودکار آنرا بر روی هاست مشتری فراهم نمود. در صورت نیاز محیط استقرار به صورت خودکار توسط Script هاپیکره بندی شده و عملیات نصب صورت می پذیرد سپس توسط چندین Smoke Test صحت عملیات نصب و عملیاتی بودن نرم افزار مورد ارزیابی قرار می گیرد. در صورت داشتن چندین نسخه از یک نرم افزار، فرآیند CI و CD امکان یکپارچه سازی و ارتقای نسخ را به صورت خودکار دارا می باشند.
مدیریت پروژه
فرآیند مدیریت تولید نرم افزار در شرکت تیبا براساس رویکرد چابک و متدولوژی XP شکل گرفته است. براین اساس مبتنی بر نیازمندی های تعیین شده توسط تیم تحلیل، Product Backlog مشخص شده و به Iterationهای هفتگی تخصیص می یابند. در ابتدای هفته Iteration جدید تعریف شده و Backlog مشخص می گردد به مرور تا انتهای هفته Burning انجام شده تا مجموع فعالیت های تخصیص یافته به یک Iteration به اتمام برسد. این فرآیند به صورت کامل توسط ابزار Youtrack پشتیبانی می شود. تمامی مراحل ثبت و تخصیص فعالیت ها، ثبت گزارش کار افراد به ازای هر فعالیت و کنترل گزارش کارها و تهیه گزارش های عملکردی با استفاده از این ابزار انجام می شود. گزارش های مستمری از ابزار به صورت روزانه و هفتگی دریافت شده و مبنایی برای تخمین فعالیت های آتی و کنترل عملکرد تیم و کنترل فرآیند تولید می باشند.