طراحی نرم‌افزار

طراحی نرم‌افزار فرایند حل مسئله و برنامه‌ریزی در راستای ساختن یک نرم‌افزار است. طراحی نرم‌افزار فرایندی است که توسط آن یک عامل، مشخصه ای از نرم‌افزار را طراحی می‌کند که هدف آن، به انجام رساندن اهداف از پیش تعیین شده با استفاده از مجموعه ای از اجزای اولیه و با توجه به محدودیت‌ها است. طراحی نرم‌افزار می‌تواند به عنوان “تمام فعالیت‌های مربوط به مفهوم سازی، طراحی، اجرا، راه اندازی و در نهایت اصلاح سیستم‌های پیچیده” یا “فعالیت‌های مشخص مورد نیاز و قبل از برنامه‌نویسی و … [در] یک پروسه مهندسی نرم‌افزار. طراحی نرم‌افزار معمولاً شامل حل مسئله و برنامه‌ریزی یک راه حل نرم‌افزاری است که شامل طراحی جزئی اجزا و طراحی الگوریتم و طراحی معماری سطح بالا می‌باشد.

 

بررسی اجمالی

طراحی نرم‌افزار فرایند پیش‌بینی و تعریف راه حل‌های نرم‌افزاری به یک یا تعدادی از مشکلات است. یکی از اجزای اصلی طراحی نرم‌افزار، نرم‌افزار مورد نیاز تجزیه و تحلیل software requirements analysis] SRA]است. SRA بخشی از فرایند توسعه نرم‌افزار است که مشخصات مورد استفاده در مهندسی نرم‌افزار را فهرست می‌کند. اگر نرم‌افزار به‌طور «کامل اتوماتیک» (به معنی بدون کاربر یا رابط کاربری) باشد، طراحی نرم‌افزاری ممکن است به اندازه یک فلوچارت یا متن توصیفی دنباله ای از رویدادهای برنامه‌ریزی شده ساده باشد. همچنین روش‌های نیمه استاندارد مانند زبان مدل‌سازی یکسان و مفاهیم مدل‌سازی اساسی وجود دارد. در هر صورت، بعضی مستندات این طرح معمولاً محصول طراحی است. علاوه بر این، طراحی نرم‌افزار ممکن است یک پلت فرم_مستقل(platform-independent)یا پلت فرم_مشخص(platform-specific) باشد که بسته به دسترسی به تکنولوژی مورد استفاده برای طراحی دارد. تفاوت اصلی بین تجزیه و تحلیل نرم‌افزار و طراحی نرم‌افزار این است که خروجی یک تجزیه و تحلیل نرم‌افزاری از مشکلات کوچکتر برای حل مسئله تشکیل شده ‌است. علاوه بر این، تجزیه و تحلیل نباید با تفاوت زیادی در میان اعضای تیم یا گروه‌های مختلف، طراحی شود. در مقابل، طراحی بر قابلیت‌ها متمرکز است و بنابراین طرح‌های متعددی برای یک مشکل مشابه می‌تواند وجود داشته باشد. بسته به محیط، طراحی اغلب متفاوت است، چه از طریق چارچوب (frameworks)های قابل اعتماد چه با الگوهای طراحی(design patterns) مناسب پیاده‌سازی شده باشد. نمونه‌های طراحی شامل سیستم‌های عملیاتی، صفحات وب، دستگاه‌های تلفن همراه یا حتی پارادایم ابری جدید است.

طراحی نرم‌افزار هم یک فرایند و هم یک مدل است. فرایند طراحی یک دنباله ای از مراحل است که طراح را قادر می‌سازد که تمام جنبه‌های ساخت نرم‌افزار را توصیف کند. مهارت خلاقیت، تجربیات گذشته، حس اینکه چه چیزی نرم‌افزار «خوب» را می‌سازد و تعهد کلی به کیفیت، نمونه‌هایی از عوامل موفقیت قطعی برای یک طراحی مناسب است. با این وجود مهم است که توجه داشته باشید که فرایند طراحی همیشه یک روش ساده نیست؛ مدل طراحی را می‌توان با طراحی معماری خانه مقایسه کرد. با نشان دادن کلییت چیزی که باید ساخته شود آغاز می‌شود (به عنوان مثال، ارائه سه بعدی خانه)؛ و به آرامی، این برای ساخت هر جزئی (به عنوان مثال، نصب لوله‌کشی) اراِیه شده است به‌طور مشابه، مدل طراحی که برای نرم‌افزار ایجاد شده‌است، دیدگاه‌های مختلفی از نرم‌افزارهای کامپیوتری را فراهم می‌کند. اصول طراحی اولیه، مهندس نرم‌افزار را قادر می‌سازد تا در فرایند طراحی حرکت کند. دیویس مجموعه ای از اصول طراحی نرم‌افزار را پیشنهاد می‌کند که در لیست زیر ارائه شده و گسترش یافته‌است:

فرایند طراحی نباید از «دید تونلی» رنج ببرد. یک طراح خوب باید روش‌های جایگزین را در نظر بگیرد و هر کدام را براساس نیازمندی‌های مسئله و منابع موجود برای انجام کار، بررسی کند.

طراحی باید قابل تبدیل به مدل‌های تحلیلی باشد. از آنجایی که تنها یک عنصر از مدل طراحی اغلب می‌تواند به تعدادی از نیازها برگردد، لازم است که وسیله ای برای ردیابی نحوه رعایت الزامات مدل طراحی داشته باشیم.

طراحی نباید چرخ را دوباره اختراع کند.

طراحی باید فاصله فکری بین نرم‌افزار و مشکلی را که به عنوان آن را در دنیای واقعی وجود دارد، به حداقل برساند.

طراحی باید یکنواخت و یکپارچه شود.

طراحی باید متناسب با تغییر باشد.

طراحی باید طوری ساختار یافته باشد که به راحتی تخریب شود، حتی هنگامی که با داده‌های غیرمعمول، حوادث یا شرایط عملیاتی مواجه می‌شوند.

طراحی برنامه‌نویسی نیست، برنامه‌نویسی طراحی نیست.

طراحی باید براساس کیفیت در هنگام یه وجود آمدنش ارزیابی شود، نه بعد از تمام شدنش.

طراحی باید بررسی شود تا خطاهای مفهومی (معنایی)، به حداقل برسد.

 

مفهوم طراحی

مفاهیم طراحی ارائه دهنده طراح نرم‌افزار بر اساسی است که از روش‌های پیچیده‌تر می‌توان استفاده کرد. مجموعه ای از مفاهیم طراحی بنیادی تکامل یافته شرح زیر هستند:

چکیده-چکیده فرایند یا نتیجه تعمیم با کاهش محتوای اطلاعاتی یک مفهوم یا یک پدیده قابل مشاهده است، به‌طور معمول برای حفظ تنها اطلاعاتی که به یک هدف خاص مرتبط است. در واقع نمایانگر ویژگی‌های مهم بدون بیان جزییات است.

اصلاح-این روند تکامل است. یک سلسله مراتب به وسیلهٔ تجزیه یک بیانیه ماکروسکوپیک از عملکرد به صورت گام به گام تا رسیدن به اظهارات زبان برنامه‌نویسی به دست می‌آید. در هر مرحله یک یا چند دستورالعمل از یک برنامه مشخص به دستورالعمل‌های دقیق تر تجزیه می‌شوند. چکیده و اصلاح مفاهیم مکمل هستند.

پیمانه ایی-معماری نرم‌افزار به اجزای به نام ماژول تقسیم می‌شود.

معماری نرم‌افزار-این مورد به ساختار کلی نرم‌افزار اشاره دارد و راه‌هایی که این ساختار یک سیستم یکپارچه مفهومی را فراهم می‌کند. معماری نرم‌افزار خوب با بازدهی خوب، سرمایه‌گذاری را با توجه به نتیجه مطلوب پروژه، مثلاً از نظر عملکرد، کیفیت، برنامه و هزینه انجام می‌دهد.

سلسله مراتب کنترل-یک ساختار برنامه ای که نشان دهنده سازمان یک جزء برنامه است و یک سلسله مراتب کنترل را نشان می‌دهد.

تقسیم سازه-ساختار برنامه را می‌توان به صورت افقی و عمودی تقسیم کرد. پارتیشن‌های افقی، شاخه‌های جداگانه سلسله مراتبی ماجول‌ها را برای هر تابع برنامه اصلی تعریف می‌کنند. پارتیشن‌بندی عمودی نشان می‌دهد که کنترل و کار باید در ساختار برنامه توزیع شود.

ساختار داده‌ها-این مورد نشان دهنده ارتباط منطقی میان عناصر داده‌ای است.

 

ملاحظات طراحی

در طراحی یک قطعه نرم‌افزاری، جنبه‌های بسیاری وجود دارد. اهمیت هر بررسی باید نشان دهنده اهداف و انتظارات برنامه‌نویسی برای دیدار باشد. برخی از این جنبه‌ها عبارتند از:

سازگاری- نرم‌افزار قادر به کار با سایر محصولات است که برای قابلیت همکاری با یک محصول دیگر طراحی شده‌اند.

توسعه پذیری-قابلیت‌های جدید می‌تواند به نرم‌افزار بدون تغییرات عمده در معماری پایه اضافه شود.

ماجول بودن-نرم‌افزار در نتیجه مستقل از اجزای مستقل است که منجر به بهبود قابلیت نگهداری می‌شود. سپس اجزاء می‌توانند قبل از اینکه یک سیستم نرم‌افزاری مورد نظر یکپارچه شوند، به‌طور انفرادی اجرا و آزمایش شوند که اجازه می‌دهد تا تقسیم کار در یک پروژه توسعه نرم‌افزار رخ دهد.

تحمل خطا-نرم‌افزار مقاوم است و قادر به بازیابی شکست‌های قسمت‌های جزیی است.

قابلیت نگهداری-اندازه‌گیری اینکه چگونه رفع اشکالات یا اصلاحات کاربردی می‌تواند انجام شود. قابلیت نگهداری بالا می‌تواند محصول ماجولار و توسعه پذیری باشد.

قابلیت اطمینان(دوام نرم‌افزار)- نرم‌افزار قادر به انجام یک تابع مورد نیاز در شرایط مشخص شده برای یک دوره مشخص از زمان است.

قابل استفاده مجدد-توانایی استفاده از برخی یا تمام جنبه‌های نرم‌افزار پیشین در پروژه‌های دیگر با اصلاحات کمی و بدون تغییر.

نیرومندی-این نرم‌افزار قادر به اجرا تحت فشار است یا تحمل ورودی غیرقابل پیش‌بینی یا نامعتبر است. به عنوان مثال، می‌توان آن را با مقاومت در برابر شرایط کم حافظه طراحی کرد.

امنیت-این نرم‌افزار قادر به مقاومت در برابر اقدامات خصمانه است.

قابلیت استفاده-نرم‌افزار رابط کاربر باید برای کاربر و مخاطب هدف مورد استفاده قرار گیرد. مقادیر پیش فرض برای پارامترها باید انتخاب شوند به طوری که برای اکثریت کاربران انتخاب خوبی باشد.

کارایی- نرم‌افزار وظایف خود را در یک فریم زمان که برای کاربر قابل قبول است انجام می‌دهد و به حافظه بیشمار نیاز ندارد.

قابل حمل بودن-نرم‌افزار باید در شرایط مختلف و محیط‌های مختلف قابل استفاده باشد.

مقیاس پذیری- نرم‌افزار به خوبی به افزایش داده‌ها یا تعداد کاربران کمک می‌کند.

 

استفاده از CSS برای قالب بندی عناصر HTML

HTML اصولاً برای مشخص کردن هویت عناصر صفحه به وجود آمد. یعنی برای اینکه مشخص شود کدام بخش صفحه یک پاراگراف است یا کدام قسمت سرفصل است و کدام بخش یک جدول است و… برای این منظور هم از یک سری تگ استاندارد استفاده میشد. وظیفه ای که برای HTML در نظر گرفته شده بود فقط همین بود و نحوه نمایش این عناصر بر عهده مرورگرهای وب بود. برای مثال مشخصاتی نظیر فونت متن، رنگ و مشخصاتی از این قبیل را مرورگر انتخاب می کرد و HTML در قالب بندی عناصر صفحه نقشی نداشت.

به تدریج مرورگرهای بزرگ مثل اینترنت اکسپلورر و Netscape از تگهای HTML جدیدی برای قالب بندی و تعیین ظاهر صفحات وب استفاده کردند مانند تگ که برای تعیین فونت متن مورد استفاده قرار می گیرد و شناسه color که رنگ متن را مشخص می کند.

صفحاتی که با HTML 3.2 نوشته شده اند به دلیل استفاده از این تگها برای قالب بندی صفحه به کد نویسی بیشتری احتیاج و در نتیجه صفحه ای که با این روش به وجود می آید مملو از تگهای HTML می شود و در نتیجه حجم صفحات افزایش می یابد و سرعت لود شدن آنها کاهش پیدا می کند. علاوه بر این اصل جدایی محتویات صفحه از قالب آن هم رعایت نمی شود.

استفاده از استایل و شیوه نامه ها (CSS) با HTML 4.0 آغاز شد. از CSS برای قلب بندی عناصر صفحه استفاده می شود. برای مثال با آن میتوان برای قسمتهای مختلف در صفحه تصویر زمینه تعیین کرد، فونت آنها را تغییر داد، رنگ متن ها را تغییر داد و بسیاری از قابلیتهای دیگر که قبلاً در HTML وجود نداشت با CSS در دسترس طراحان قرار می گیرد.

 

طراحی سایت پویا و نوشتن صفحات پویای سمت کاربر با جاوا اسکرپت

جاوا اسکرپت گسترده ترین زبان اسکرپت نویسی مورد استفاده در اینترنت است. بسیاری در طراحی سایت از این زبان برای ساختن صفحات پویایی که در کامپیوتر کاربر اجرا می شوند استفاده می کنند. تقریباً همه مرورگرهای مشهور از این زبان پشتیبانی می کنند و اگرچه امکان غیر فعال کردن آن توسط کاربران وجود دارد اما طبق آمار جاوا اسکرپت در مرورگرهای بیش از 90 درصد کاربران اینترنت فعال است.

در حقیقت HTML را نمیتوان یک زبان برنامه نویسی دانست ولی جاوا اسکرپت یک زبان برنامه نویسی با ساختاری ساده است که میتواند عناصر HTML را بخواند، بنویسید و یا آنها را تغییر دهد. جاوا اسکرپت توانایی واکنش نشان دادن به رویداد ها را در صفحه HTML دارد. برای مثال میتوان کد جاوا اسکرپتی نوشت که در هنگام ارسال یک فرم اجرا شود.

 

UX چیست؟

User Experience – UX شامل رفتار، حالت و احساست کاربر در مورد استفاده از یک محصول و یا سیستم خاص گفته می شود. تجربه کاربر شامل جنبه های عملی، تجربی، موثر ، معنی دار و جنبه های با ارزش اثر متقابل انسان و کامپیوتر و محصول می باشد، که شامل درک کاربر از جنبه های مختلف سیستم شامل کاربرد، سادگی در استفاده و بهره وری می باشد. بر اساس تعریف ISO عنوان user experience شامل کلیه عواطف، اعتقادات، مزیت ها، پاسخ های فیزیکی و روانی، رفتارها و اجراها قبل از زمان استفاده، در زمان استفاده و بعد از آن اطلاق می گردد.

وظیفه طراح وب سایت چیزی بیش از طراحی محیطی زیبا برای وب سایت شما می باشد که طراح می بایست هیجان و احساسات کاربران شما را در نظر بگیرد و سایت را به گونه ای طراحی نماید تا وب سایت شما ارتباط احساسی برقرار نماید. طراح وب سایت یکی از مهترین اعضای تیم شما می باشد که در صورتی که کار خود را به درستی انجام دهد تاثیر بسیار مثبتی در کسب و کار شما خواهد داشت . مارک زاکربرگ خالق فیس بوک میز طراحان وب سایت خود را نزدیک میز خود قرار داده بود تا بدین وسیله هم کار ایشان را دائما تحت نظر داشته باشد و هم بتواند خط مشی و دیدگاه های خود را دائما به ایشان منتقل نماید تا بدین وسیله طراح با درک بهتر فعالیت وب سایت طراحی های مفهومی تری را ارائه نماید. مهندسان در کار طراحی سایت بخش هایی را پیاده سازی می نمایند که کاربر مشاهده نمی نماید و منطق و اصول کار را پیاده سازی می نمایند حال آنکه طراحان وب سایت رابط کاربری وب سایت را پیاده سازی می نماید.

 

UI چیست؟

UI که مخفف user interface می باشد در فیلد اثر متقابل ماشین و انسان در صنعت طراحی، فضایی می باشد که اثر متقابل بین انسان و ماشین به وجود می آید. هدف این اثر متقابل اجازه برای عمکلکرد موثر و کنترل ماشین از سمت انسان می باشد، در حالیکه ماشین اطلاعاتی را باز می گرداند که کمک به تصمیم گیری های کاربران می نماید. برخلاف طراحان UX که بر روی حس کلی کار تمرکز می نمایند طراحان UI بر روی نحوه ارائه محصول کار می نمایند. آنها صفحه ای را طراحی می نمایند که کاربر با آن در ارتباط می باشد و تلاش می نمایند UI را در جهت محقق ساختن اهداف طراح UX پیش ببرد. به عنوان مثال ممکن است طراح UI تصمیم بگیرد اسلایدری در بالای صفحه تعبیه نماید و یا دکمه ای برای انجام فرآیند خرید در مکانی از صفحه ایجاد نماید. همچنین طراح UI مسئول ساخت راهنمای استایل منسجم می باشد تا ثبات و یکپارچگی در طراحی دیده شود.

 

تفاوت بین UI و UX

UI و UX مخفف هایی هستند که معمولا توسط افراد مبتدی به صورت اشتباه مورد استفاده قرار می گیرند. آنها کاملا معناهایی متفاوتی دارند که معمولا توسط افرادی که معناهای آن را نمی دانند به جای یکدیگر استفاده می شوند در صورتی که تقاوت این دو بسیار واضح می باشد.

UI مخفف User Interface می باشد که در صنعت نرم افزار به هر چیزی که در صفحه نمایش داده می شود گفته می شود که شامل تصاویر، متن ها، دیاگرام ها، ماژولها، جداول ، ویدئوها و همچنین رنگ ، سایر و مکان آن ها می باشد.

UX مخفف User Experience می باشد که بسیار وسیع تر از UI می باشد و به تجربه و احساس کاربر زمانی که از محصول شما استفاده می نمایند گفته می شود. به عنوان مثال زمانی که شما از سایت دارکوب محصولی را سفارش می دهید و آن بسیار سریع تحویل شما می گردد به این معناست که UX خوبی وجود داشته است.

در حقیقت کل یک محصول UX می باشد و و هر بخش از آن UI نامیده می شود. UI در حقیقت سیستمی می باشد که انسان از طریق آن با ماشین در ارتباط می باشد و شامل کامپوننت های فیزیکی و نرم افزاری می باشد.

 

در پایان

امروزه طراحانی وجود دارند که هر دو تخصص UX و UI را در کنار هم دارند و این طراحان برای پیاده سازی قالب های وب سایت هر دو نقش را بر عهده می گیرند و البته دستمزد آنها معمولا از طراحان تک تخصص بالاتر می باشد. البته این دو کاملا با هم در ارتباط بسیار نزدیک هستند و البته ما عقیده داریم بدون دانش در هر دو فیلد متخصص طراحی بودن ممکن نیست و آنها برای اهداف بزرگتری به هم ترکیب شده اند که این هدف همانا جذب کاربران به محصولات شما و رساندن اطلاعات مورد نظر شما به ایشان می باشد. البته شما می توانید وب سایتی داشته باشید که که ظاهری بسیار خاص و خیره کننده داشته باشد اما عملکرد بسیار ضعیفی داشته باشد که این را UX بد و UI خوب می نامند و همچنین بلعکس می توانید وب سایتی داشته باشید که ظاهر و حس ضعیفی داشته باشد ولی بسیار مورد پسند کاربر باشد که این مورد را UX خوب و UI بد می نامند. بنابراین برای آنکه طراحی اثر بخشی لازم را داشته باشد UI و UX می بایست در امتداد هم در نظر گرفته شوند و طراحی وب سایت می بایست پس از طراحی قالب طراحی شده را توسط رنج های مختلف کاربران تست نماید.