طراحی بالا به پایین و پایین به بالا

طراحی و پیاده‌سازی محصول

در حین پیاده‌سازی و طراحی محصولات جدید، طراحان و مهندسان از روش‌های بالا به پایین و پایین به بالا بهره می‌برند. روش پایین به بالا زمانی به کار می‌رود که اجزا و مولفه‌هایی که برای ساخت محصول به کار می‌روند در ابتدا به طور کامل مشخص باشند. در روش بالا به پایین ما یک درک بالا و شمای کلی از محصول را در اختیار داریم (مثلاً در ساخت برنامه‌های کاربردی گاهی که کارفرما پروژه ای را به تیم کدنویسی می‌دهد و تیم در ابتدا به طور کامل از جزئیات بخش‌های آن اطلاعی ندارد) زمانی که اولویت کاهش هزینه یا افزایش دردسترس بودن محصول (availability) معمولاً روش پایین به بالا مناسب تر است. مثلاً در طراحی اتومبیل با این روش می‌توان هزینه هر بخش مانند بدنه و چرخ و چراغ و… را کمترین کرد.

پیاده‌سازی نرم‌افزار

در پروسه توسعه و پیاده‌سازی نرم‌افزار روشهای بالا به پایین و پایین به بالا نقش اساسی دارند.
روش بالا به پایین تأکید بر روی برنامه‌ریزی و درک کامل برنامه برنامه دارد. به طبع هیچ کدزنی نمی‌تواند شروع شود تا زمانیکه به سطح کافی جزئیات در طراحی حداقل چندین بخش سیستم برسیم. روش بالا به پایین با متصل کردن و جایگزین کردن زیرسیستم‌ها با ریشه عمل می‌کند. به هر حال تست نهایی عملکردها را تا زمان طراحی لازم صورت بگیرد، به تأخیر می‌اندازد. در حالی که روش پایین به بالا به کدزنی و تست زود هنگام تمرکز دارد؛ که این امر به محض مشخص شدن اولین بخش‌های برنامه قابل شروع است. به هر حال این روش نیز ضرر خود را دارد. به این صورت که ما این ریسک را می‌پذیریم که کد زنی را در حالتی شروع کنیم که دید کافی از سیستم و اجزایی که باید به هم مرتبط شوند نداریم در حالی که ممکن است این اجزا و نحوه ارتباطشان با هم آنگونه که در اول به نظر می‌رسد ساده نباشد. پیشرفت تدریجی کدها از مشخصات اصلی این روش می‌باشد.
طراحی بالا به پاپین در دهه ۱۹۷۰ به وسیله محققان IBM به نام‌های Harlan Mills و Niklaus Wirth ایجاد شد. میلز جنبه‌های برنامه‌ریزی ساخت یافته را به منظور استفاده و تست از آنها در یک پروژه در سال ۱۹۶۹ مربوط به بایگانی روزنامه نیویورک تایمز توسعه داد. مهندسی و مدیریت موفق این پروژه منجر به توسعه روش بالا به پایین در IBM و سراسر صنعت کامپیوتر شد. همچنین niklaus wirth به سمت توسعه زبانهایی چون Modula و Oberon (که در آنها ما امکان تعریف یک ماژول را قبل از اینکه از تمام خصوصیات برنامه اطلاعی داشته باشیم را دارد) البته بهتر است این مورد را نیز اشاره کنیم که برنامه‌نویسی بالا به پایین دقیقاً آن چیزی که او ایجاد کرد نبود. روش بالا به پایین در مهندسی نرم‌افزار در اواخر دهه ۱۹۸۰ مورد توجه قرار گرفت؛[۳] و برنامه‌نویسی شی گرایی کمکی در اثبات این ایده داشت که هر دو جنبه از روش‌های بالا به پایین و پایین به بالا قابلیت به کار بردن را به نحو سودمندی دارند.
روش‌های مدرن طراحی نرم‌افزار معمولاً از ترکیبی از روش‌های بالا به پایین و پایین به بالا می‌باشند. این همواره ضروری است که یک شناخت کامل نسبت به سیستم برای طراحی آن داشته باشیم، که این اساس و پایه روش بالا به پایین است. بیشتر پروژه‌های نرم‌افزاری کد نویسی را در چند مرحله در حین پیشرفت پروژه (و نه به طور پیوسته در حین پیشرفت پروژه) بر اساس طراحی خود دارند و در چند مرحله سعی می‌کنند که کدنویسی را پیش ببرند که این کد زنی در حین انجام پروژه ایده و پایه برنامه‌نویسی پایین به بالا است. این روش به مرور کدها تکمیل و در صورت نیاز نیز اصلاح می‌شوند؛ بنابراین بیشتر پروژه‌های نرم‌افزاری ترکیبی از این دو روش می‌باشند.

برنامه‌نویسی

روش بالا به پایین یک روش برنامه‌نویسی است که وابستگی زیادی به روش‌ها و رسم‌های زبان‌های برنامه‌نویسی دارد. به این صورت که وقتی طراحی آغاز می‌شود اجزای سیستم پیچیده به قسمت‌های کوچکتر شکسته می‌شوند. تکنیکی که در برنامه‌نویسی با روش بالا به پایین مورد استفاده قرار می‌گیرد به این صورت است که یک روال اصلی که در آن اسامی بیشتر تابع‌هایی که بعداً مورد نیاز است را بنویسیم. سپس تیم برنامه‌نویسی در هر مرحله تلاش می‌کند که هر یک توابع را پیاده‌سازی و کد مربوط به آن را بنویسد. این چند تکه کردن باعث می‌شود که نوشتن کدهای داخل هر بخش و تابع اسانتر و سریعتر صورت بگیرد. زمانی که کد تمام توابع و زیرروالها نوشته شد، در آن موقع می‌توان برنامه را تست کرد. پس در این روش نوشتن هر تابع به این صورت است که ابتدا نام و فضا تمامی زیر تابع‌های مورد نظر آن را مشخص و سپس وارد تک تک تابع‌ها شده و سعی در نوشتن کد آن داریم. این روال بالا به پایین را برای تک تک تابع‌ها و روال‌ها و قسمت‌های برنامه تکرار می‌کنیم.
در روش پایین به بالا نیازمند این هستیم که تک تک المان‌های پایه ای برنامه را با جزئیات زیادی داشته باشیم. زیرا بر خلاف قسمت قبل در این قسمت برای نوشتن یک تابع اطلاع و کاری با توابع بالادستی نداریم و هر تابع اولیه (کوچک) را ابتدا نوشته و سپس به فکر ایجاد و نوشتن توابع والد (در صورت وجود) می‌افتیم. در این روش ما اطلاعات کافی برای المان‌های اولیه باید داشته باشیم و سپس این المان‌های (اکثراً کوچک) با هم مرتبط شده تا زیر سیستم بزرگتری را شکل دهند که این روال می‌تواند برای همان زیر سیستم بزرگتر نیز با زیر سیستم‌های بزرگتر تکرار شود که گاهی این مراحل تعداد بسیار زیادی می‌شوند. این استراتژی مشابه مدل «بذر» می‌باشد که با قسمت کوچکی شروع شده و به مرور و با پیشرفت در برنامه به طور دائم بزرگ و بزرگتر می‌شود. برنامه‌نویسی شیء گرا یک نمونه از استفاده از اشیا به منظور طراحی اپلیکیشن‌ها و برنامه‌های کامپیوتری است. در مهندسی ماشینی (مکانیکی) با برنامه‌های نرم‌افزاری مانند Pro/ENGINEER , Solidworks, Autodesk کاربران امکان طراحی محصولات به‌صورت جزء به جزء و نه به صورت کامل و کلی را دارند تا در ادامه با این قسمت‌ها را با هم ادغام کرده تا ساختمانی مانند LEGO را ایجاد کنند. مهندسان این عمل را طراحی تکه‌تکه (جزء به جزء) می‌نامند.
در روش پایین به بالا ما نیازمند یک شهود خوب هستیم تا بتوانیم توابعی که به وسیله ماژول ایجاد می‌شوند را مشخص کنیم. اگر یک سیستم قرار است از یک سیستم موجود ساخته شود، این روش بسیار مناسب است زیرا ما می‌توانیم کار را از ماژول‌های موجود شروع کنیم.

تجزیه

تجزیه پروسه آنالیز یک ورودی ( به ترتیب )  ، ( به عنوان مثال خوندن از فایل و یا از صفحه کلید ) به منظور مشخص کردن ساختار گرامری آن می باشد . این روش هم در بررسی زبان طبیعی و هم زبان ماشین کاربرد دارد . در مورد زبان ماشین این کار با کامپایل کردن  گویند که توسط کامپایلر صورت میگیرد . 
تجزیه پایین به بالا یک استراتژی برای آنالیز روابط داده های ناشناخته است که در ابتدا تلاش میکند تا بیشترین واحد اصلی و بنیادی را مشخص کند و بشناسد تا در مرحله بعدی بتواند ساختاز سطح بالاتری از آن را استنتاج کند . از سوی دیگر تجزیه بالا به پایین ،ساختار  درخت تجزیه اصلی را فرض میکند و سپس بر اساس ساختار های بنیادی و اصلی که در اختیار دارد ، سعی میکند تجزیه را ادامه داده و به سطح پایین تر درخت برسد . در صورتی که علاقه‌مندید در مورد تجزیه پایین به بالا و تجزیه بالا به پایین مطالب بیشتری را بخوانید از دو لینک زیر استفاده کنید :
1- تحلیلگر بالا به پایین 
2- تجزیه از پایین به بالا