در مطالب قبلي در مورد پيچيدگي نيازمندي‌هاي نرم‌افزار و مدلسازي نيازمندي‌هاي كيفي نكاتي مطرح شد. اما موضوعي كه سبب استفاده از اين مفاهيم به صورت يكپارچه مي‌شود، فرآيند تدوين معماري است. فرآيند تدوين معماري نرم‌افزار از جمله مفاهميي است كه همانند هوا در بسياري از پروژه‌هاي توسعه نرم‌افزار خصوصاً در نرم‌افزارهاي بسيار وسيع ناديده گرفته مي‌شود، در حاليكه عدم وجود آن سبب از بين رفتن تمام گياهان و حتي جانوران خواهد شد. در اغلب موارد، براي تدوين معماري از روش Attribute Driven Design كه توسط SEI ارائه شده است، پيشنهاد مي‌شود. اما آيا اين روش كارايي لازم براي توسعه معماري در فضاي واقعي را دارد؟

قبل از پاسخ به اين سوال، بهتر است به اين سوال پاسخ داده شود كه در فرايند توسعه نرم‌افزار، جايگاه فرآيند توسعه معماري كجاست؟

پاسخ ساده به اين سوال، پس از تدوين نيازمندي‌ها و قبل از طراحي نرم‌افزار است. شكل زير (منبع) نشان‌دهنده اين موضوع است كه تدوين معماري با تدوين نيازمندي‌ها در تعامل است. بدين معني كه فرآيند معماري با فرآيند تدوين نيازمندي‌هاي نرم‌افزار، به صورت تدريجي و افزايشي كامل مي‌شوند. اين موضوع در توسعه نرم‌افزارها معقول است چرا كه نيازمندي‌هاي مورد نياز براي معماري همواره مد نظر تدوين‌كنندگان نيازمندي‌هاي نرم‌افزار نيست و نيازمندي‌هاي اوليه بدون در نظر داشتن طرح معماري تعيين مي‌شوند. از طرفي به‌گونه‌اي تعيين معماري شكل‌دهنده نيازمندي‌هاي نرم‌افزار است و همانطور كه در مثال عملي ADD نيز مشاهده مي‌شود، نيازمندي‌هاي كيفي در قالب سناريوهاي خصوصيات كيفي مد نظر قرار گرفته است، چيزي كه از عهده مسئول نيازمندي‌هاي خارج است و اين معمار است كه مي‌بايست چنين سناريوهايي را تدوين نمايد. با توجه به اين موضوع، به نظر ميرسد كه فرآيند معماري همزمان با فرآيند نيازمندي‌ها مي‌بايست شروع شود تا يكديگر را حمايت نمايد. با طرح اين موضوع، اين سوالات متعددي به وجود مي‌آيد به‌عنوان مثال آيا شناخت نيازمندي‌هاي كيفي با شناخت نيازمندي‌هاي نرم‌افزار توسط دو نفر انجام مي‌شوند؟ مستقل از هم انجام مي‌شوند؟ چگونه با يكديگر ارتباط دارند؟

Arch1

با بيان اين موضوعات، ابهام براي جايگاه فرآيند توسعه معماري پيچيده‌تر مي‌شود. با آنكه اغلب منابع در مورد روند يا فرآيند توسعه معماري گام‌هايي را ذكر نموده‌اند، اينكه واقعاً فعاليت معمار از كجا شروع شده، چه فعاليت‌هاي انجام مي‌دهد، ارتباط فعاليت‌هاي با سير فعاليت‌هاي مهندسي نرم‌افزار چگونه است؟ چه چيزي توليد مي‌نمايد و چه خروجي‌هايي به ساير فعاليت‌هاي مهندسي نرم‌افزار ارائه مي‌دهد جاي سوال فراوان دارد.

در پاسخ به اين سوالات فراوان، قبل از هر چيز بايد اذعان نمود كه جايگاه معماري نرم‌افزار در پروژه‌ها مختلف و با توجه به اندازه پروژه و برخي خصوصيات ديگر، متفاوت است. آقاي Nick Rozanski و همكارش Eoin Woods در كتاب خود (Software Systems Architecture) به بررسي جايگاه تدوين معماري در فرآيندهاي توسعه نرم‌افزار متداول از جمله آبشاري، چابك و تكراري و تدريجي پرداختند و تلاش نمودند تا جايگاه اصلي آن را مشخص نمايند. سه جايگاه پيشنهادي آنها، الف) قبل از نيازمندي‌ها، ب) همزمان با نيازمندي‌ها و ج) بعد از نيازمندي‌ها مي‌باشد. اما چرا جايگاه معماري نرم‌افزار در توسعه نرم‌افزار متفاوت است، پاسخ در انتظاري كه از معماري وجود دارد، مي‌باشد. با دقت در منابع مختلف معماري نرم‌افزار مشخص مي‌شود كه تنوع انتظارات از معماري و معمار نرم‌افزار متفاوت است و پوشش اين تنوع سبب مي‌شود تا جايگاه معماري نرم‌افزار در فرآيند توسعه نرم‌افزار متفاوت باشد. به‌عنوان نمونه، فرآيند توسعه نرم‌افزار RUP، سند معماري را در فاز Elaboration بيشتر مورد توجه قرار مي‌دهد و سند معماري فاقد خصوصياتي است كه اغلب معماران در نظر دارند، در حاليكه روش ADD، معماري را نقطه كليدي تدوين ساختار و توازن‌هاي خصوصيات كيفي در نظر مي‌گيرد، يا در متدولوژي V انتظار از معماري اغلب توزيع وظايف بين مولفه‌ها است. همين موضوع در نويسندگان مختلف كتاب‌هاي معماري نيز وجود دارد به‌عنوان نمونه آقاي Paul Clements و همكارانش (Software Architecture in Practice) در چرخه حيات معماري، بر اين نكته تاكيد دارند كه معمار با تمامي ذي‌نفعان در ارتباط است اما اغلب نويسندگان معماري را يا فعاليت مي‌دانند كه نقطه پايان آن قبل از طراحي بوده و معمار سرو كاري با همه ذي‌نفعان ندارند.

با توجه به جايگاه معماري نرم‌افزار در پروژه‌ها، طبيعتاً پاسخي كه به سوالات مطرح‌شده مي‌توان داد و انتظاري كه از فرآيند توسعه معماري مي‌توان داشت، متفاوت است. در صورتيكه معماري نرم‌افزار قبل از تدوين نيازمندي‌ها اجرا شود، انتظار بر شكل دهي نيازمندي‌ها و برخي تصميمات و انتخابات اوليه توسعه نرم‌افزار است. در حاليكه اگر معماري نرم‌افزار پس از تدوين نيازمندي‌ها شروع شود، طبيعتاً انتظار بر تاكيد بر روي طراحي و توزيع وظايف خواهد بود. اين موضوع همچنين بر استفاده از مفاهيم معماري همچون Style, Pattern و Concern نيز اثرگذار است. در نوشته‌هاي بعدي به بررسي جزئيات فرآيند توسعه معماري در هر يك از جايگاه‌ها خواهم پرداخت.