EF Code First #12
در تولید چنین نرم افزارهایی باید در درجه اول به بازار و هدف اون نرم افزار در جامعه نگاه کرد و سنجید که آیا مصرف کننده داره یا خیر!
در فضای فعلی این امر به هیچ وجه امکان پذیر نیست و مردم ترجیح میدن اطلاعاتشون در دست کشورهای دیگه باشه تا کشور خودشون و علتش هم گویاست و نیازی به تشریح نداره (وارد بحث سیاست نمیشم اینجا مکانش نیست) .
حتی در صورت تولید و انتشار کدهای نرم افزار، باز هم دلیل بر ایجاد حس امنیت برای کاربران نمیشه چون ملت نمیتونن کدهای سرور رو نگاه کنن و ببینن آیا واقعا همون کدها آپلود شده یا خیر!
برای درک بیشتر این موضوع رجوع کنید به اون داستان کارخانه تولید ایران خودرو که خودرویی که برای تست باید تحویل به سازمان تست و ایمنی میداد، یک نسخه سفارشی بود و نمره دریافت میکرد.
در واقع به طور خلاصه، برای تولید و فعالیت چیزهایی در سطح کشوری یا بین المللی (کارخانه، نرم افزار و ...)، نیاز به محیط سالم هست نه کدهای اوپن سورس.
در مقاله قبلی ، درباره دلایل استفاده از Xamarin ، کمی صحبت کردیم. حال وقت آن رسیده که به سراغ نصب و راه اندازی اولین پروژه زمارین برویم.
اگر شما از Visual Studio 2015 به بعد استفاده کنید، موقع نصب قادر خواهید بود که با انتخاب گزینه Mobile Development و انتخاب Xamarin ، آن را نصب و همچنین تمامی فایلهای مربوط به آن را دریافت کنید. در نظر داشته باشید که در طول این پروسه شما باید از ف.یل.تر شکن استفاده کنید، چرا که بعضی از فایلها مانند Android Sdk بر روی سرور گوگل قرار دارد و گوگل آپیهای ایران را برای برنامه نویسان فیلتر کرده است (البته اگر بستهی کامل VS 2017 را دریافت کرده باشید، تمام این پیش نیازها، به همراه این بستهی 21~ گیگابایتی موجود است و این مشکلات را نخواهید داشت).
حال اگر در حال حاضر Visual Studio را بر روی سیستم خود نصب دارید و زمارین را نصب نکرده اید میتوانید از طریق خود سایت زمارین اقدام به دانلود آن بکنید. در نظر داشته باشید، وقتیکه فایل نصبی را از سایت دریافت میکنید، برنامه شروع به نصب خودکار زمارین و تمامی موارد مورد نیاز خود میکند که در این مورد هم به ف.یل.تر شکن نیاز دارید (منهای بستهی کامل VS 2017 که پیشتر عنوان شد). همانطور که بالا گفته شد فایل هایی مانند Android Sdk را نمیتوان از آی پی ایران دانلود کرد (مگر اینکه از سایتهای واسط استفاده کنید).
پس از موافقت با حقوق کپی رایت زمارین، سیستم شما
را جستجو کرده و تمامی موارد مورد نیاز را که نیاز به نصب دارند، به شما نشان
داده و نصب خواهد کرد.
اگر همه مراحل با موفقیت به پایان برسد، پیغامی مبنی بر موفقیت آمیز بودن عملیات را دریافت خواهید کرد. اما اگر به هر دلیلی فایل نصبی نتواند فایلهای مورد نیاز را دانلود کند، پیغامی مبنی بر شکست عملیات دانلود فایل مورد نظر را دریافت میکنید. در این صورت میتوانید صفحهای را مشاهده کنید که درون آن تمامی فایلهای دانلود نشده و لینک دانلود مستقیم آنها قرار دارند و شما میتوانید فایلهای offline آنها را دانلود کرده و به صورت دستی بر روی سیستم نصب نمایید.
اگر تمامی فایلهای مورد نظر را دانلود کرده باشید، قادر خواهید بود اولین پروژهی خود را شروع کنید. قبل از اینکه کار با زمارین را شروع کنیم، اجازه دهید از اینکه ویژوال استودیو تمامی فایلهای نصب شده را تشخیص داده یا خیر، مطمئن شویم. ویژوال استودیوی خود را باز کرده و از منوی Tools، گزینهی Options را انتخاب و بعد از باز شدن صفحه مورد نظر، در انتهای لیست، گزینه Xamarin را انتخاب کنید.
اگر تمامی مراحل با موفقیت انجام شده باشند، ویژوال استودیو تمامی فایلها را به صورت خودکار تشخیص خواهد داد. اما اگر ویژوال استودیو به هر دلیلی هر کدام از اینها را تشخیص نداد، ابتدا از نصب بودن آنها اطمینان حاصل نمایید و سپس به صورت دستی مسیر آنها را مشخص کنید.
نکته : در نظر داشته باشید فایلهای زیر برای اجرای برنامه بر روی اندروید میباشند و اگر شما تمایلی به اجرای نرم افزار خود را بر روی اندروید ندارید، میتوانید از آنها صرف نظر کنید.
در این مرحله میخواهیم اولین برنامه زمارین خود را شروع کنیم. همانطور که در مقاله قبلی توضیح داده شد، شما میتوانید از xamarin forms و یا xamarin native استفاده کنید. Xamarin forms ساختاری برای code sharing میباشد که توسط شرکت زمارین توسعه داده شدهاست. به این ترتیب شما قادر خواهید بود که با استفاده از Xamarin Forms با نوشتن کمترین کد، نرم افزار خود را بر روی پلتفرمهای پشتیبانی شدهی توسط زمارین اجرا کنید. استفاده از Xamarin Forms برای یک پروژهی تجاری بسیار مناسب میباشد؛ اما در برخی موارد شما باید از Xamarin Native هم استفاده نمایید که در این صورت هم زمارین دست شما را نخواهد بست و قادر خواهید بود که به صورت ترکیبی از Xamarin Forms و Xamarin Native از آن استفاده نمایید.
حال به سراغ ساخت اولین پروژه زمارین برویم. در ابتدا برای ایجاد یک پروژه، از منوی File گزینه New و سپس گزینه Project را انتخاب کنید. در پنجره باز شده از سمت چپ گزینه C# را انتخاب و از زیر منوی Cross Platform گزینه Cross Platform App را انتخاب کنید.
پس از تایید با صفحه زیر مواجه خواهید شد.
در این قسمت همانطورکه مشاهده میکنید میتوانید از دو نوع قالب استفاده کنید و همانطور که از نام آنها مشخص است، Master Detail دو پروژه خواهد ساخت که میتوانید از آن برای سناریوهای خاص استفاده کنید. در قسمت پایین، UI Technology مشخص کنندهی شیوه پیاده سازی ظاهر برنامه است. زمارین فرم برای پیاده سازی ظاهر برنامه از Xaml استفاده میکند و شما میتوانید از طریق آن ظاهر تمامی پلت فرمها را پیاده کنید. همچنین قادر خواهید بود بجای استفاده از Xaml، از زبانهای مخصوص هر پلتفرم مانند Xml برای اندروید استفاده کرده و ظاهر نرم افزار خود را با استفاده از آن پیاده کنید.
زمارین فرم برای Code Sharing از دو روش استفاده میکند.
Shared Project
مزایا:
· شما به تمامی قسمتهای یک پلتفرم دسترسی دارید.
· قادر خواهید بود کدهایی مخصوص به هر پلتفرم را بنویسید.
· میتوانید با استفاده از Conditional Compilation، بر اساس نوع پلتفرم، شروطی را اعمال نمایید.
معایب:
· شما با این روش نمیتوانید DLL ایی را تولید کنید و از آن در پروژههای دیگر استفاده نمایید.
· نوشتن Unit Testing نسبت به روش Portable پیچیدهتر است.
Portable Class Library
مزایا:
· شما قادر خواهید بود از پروژه خود DLL تهیه کرده و در مابقی پروژهها از آن استفاده کنید.
· نوشتن Unit Test به سادگی امکان پذیر است.
معایب:
· در این روش شما نمیتوانید از کدهای مخصوص به هر پلتفرم ( Platform-Specific ) استفاده کنید (البته با استفاده از Dependency Injection امکان پذیر است).
· فقط قادر خواهید بود که از زیر مجموعه .Net استفاده نمایید.
در ادامه پس از انتخاب Xamarin Forms و Shared Project، بر روی Ok کلیک کنید. همانطور که میبینید ویژوال استودیو شروع به ساخت پروژههای برنامه میکند. اگر تمامی Sdk های مورد نیاز را نصب کرده باشید، ویژوال استدیو 5 پروژه را برای شما میسازد (در نظر داشته باشید که اگر SDK مربوط به Universal Windows Platform را هم نصب کرده باشید، پروژهی مربوط به آن را نیز خواهید دید).
اولین پروژه، پروژه Shared است که کدهای برنامه در این پروژه نوشته خواهد شد.
دومین پروژه همانطور که از پسوند آن مشخص است، پروژه مربوط به اندروید است. در نظر داشته باشید که پروژههایی که مربوط به پلتفرمها میباشند، برای نوشتن کدهای مخصوص به هر پلتفرم در دسترس میباشند و کدهای نوشته شده در این پروژهها و پروژه Shared ترکیب شده و بعد کامپایل میشوند.
در زمارین برنامهها از فایلی به نام App
اجرا میشوند. این فایل علاوه بر دسترسی به Life Cycle اپلیکیشن، وظیفهی دیگر آن مشخص کردن اولین
صفحهی برنامه نیز میباشد. این فایل درون پروژه Shared قرار دارد.
همانطور که مشاهده میکنید پس از باز کردن فایل App، در متد سازنده آن صفحه اصلی، به صفحهای به نام MainPage که یک فایل Xaml میباشد، تنظیم شدهاست. پس از باز کردن فایل MainPage با کدهای زیر مواجه میشویم.
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:PreviewerTest" x:Class="PreviewerTest.MainPage"> <Label Text="Welcome to Xamarin Forms!" VerticalOptions="Center" HorizontalOptions="Center" /> </ContentPage>
که مشخص کننده یک لیبل با متن Welcome to Xamarin Forms! میباشد. پس از اجرای برنامه میتوانیم کد اجرا شده را مشاهده کنیم.
سخنان بزرگان!
اشکال زدایی (debug) یک کد چندین مرتبه از نوشتن آن سختتر است. بنابراین اگر کد اولیه خود را بسیار هوشمندانه بنویسید، جهت اشکال زدایی آن به اندازهی کافی باهوش نخواهید بود! (Brian Kernighan)
تنها دو نوع زبان برنامه نویسی وجود دارد: آنهایی که برنامه نویسها از آن شکایت دارند و آنهایی که اصلا مورد استفاده قرار نمیگیرند! (Bjarne Stroustrup)
هر کسی میتواند کدی بنویسد که یک کامپیوتر آنرا درک کند. یک برنامه نویس خوب کدی را مینویسد که برای سایر همکارانش قابل درک باشد. (Martin Fowler)
اندازهگیری درصد پیشرفت یک پروژه برنامه نویسی با شمارش تعداد سطرهای کدهای آن همانند اندازه گیری درصد پیشرفت ساخت یک هواپیما از طریق وزن کردن آن است! (Bill Gates)
برنامه نویسی سطح پایین (Low-level) روح برنامه نویسها را جلا میبخشد! (John Carmack, ID software)
بزرگی واقعی با اندازه گیری مقدار آزادی که به دیگران عطا میکنید، سنجیده میشود و نه به اینکه چگونه دیگران را وادار میکنید تا آنچه را که مد نظر شما است اجرا کنند. (Larry Wall)
هیچگاه از gets و sprintf استفاده نکنید، در غیر اینصورت شیاطین به زودی به سراغ شما خواهند آمد! (FreeBSD Secure Programming Guidelines)
صحبت کردن ساده است. کدت رو نشون بده! (Linus Torvalds)
علوم رایانه هیچگاه شخصی را تبدیل به یک برنامه نویس خوب نمیکنند همانطور که مطالعه در مورد رنگها و قلمها شما را تبدیل به یک نقاش خوب نمیکند. (Eric Raymond)
برنامه نویسی مانند س.ک.س است. یک اشتباه و سپس تحمل کردن و پشتیبانی آن تا آخر عمر! (Michael Sinz)
هیچ برنامهای تا زمانیکه آخرین یوزر آن بمیرد به پایان نخواهد رسید! (از یک گروه پشتیبانی نرم افزار ناشناس!)
برنامه نویسهای C هرگز نخواهند مرد. آنها فقط تبدیل به void خواهند شد. (ناشناس)
پایان دنیای یونیکس 2 به توان 32 ثانیه پس از اول ژانویه 1970 است! (ناشناس)
زمانی که کد مینویسید فرض کنید شخصی که قرار است در آینده از کدهای شما نگهداری کند یک دیوانهی زنجیری است که آدرس خانهی شما را میداند! (Rick Osborne)
سادگی یک برنامه یکی از شرایط قابل اطمینان بودن آن است. (Edsger Dijkstra)
یونیکس سیستم عامل سادهای است، اما شما باید فرد باهوشی باشید تا بتوانید این سادگی را درک کنید! (Dennis Ritchie)
اگر به کامپایلر دروغ بگوئید او بعدا انتقام خواهد گرفت! (Henry Spencere)
پرل تنها زبان برنامه نویسی است که پیش و پس از رمزنگاری RSA به یک شکل به نظر میرسد! (Keith Bostic)
تنها دو صنعت هستند که به مصرف کنندگان خود "کاربر" میگویند: صنعت کامپیوتر و تجارت مواد مخدر! (ناشناس)
برنامه IRIS PDF Editor
معماری اطلاعات یا Information Architecture و یا به اختصار IA در یک تیم توسعه نرمافزار، یک وظیفه پایه و اساسی است که معمولا بین طراحان، توسعه دهندگان و یا طراحان استراتژی محتوا تقسیم میگردد. اما صرف نظر از اینکه چه کسی در یک تیم آن را بر عهده میگیرد، IA تخصص خاص خود را نیازمند است که این تخصص که شامل ابزارها و شاخصها و منابعی است که باید به درستی تحقیق و گردآوری گردند. در این مقاله قصد داریم تا به این امر بپردازیم که واقعا IA چیست؟ و چرا یک جنبهی مهم و ارزشمند در طراحی فرآیندهای user experience به شمار میرود؟
Information Architecture چیست؟
بیان کردن یک تعریف دقیق برای IA کمی پیچیدهتر از تعاریف دیگری همچون content strategy و یا interaction design به نظر میرسد. بر خلاف content strategy که به وسیله طراحان استراتژی محتوا و یا interaction design که توسط طراحان UI/UX انجام میگیرد، IA به ندرت در زمرهی یک کار جداگانه قرار میگیرد. اما با این وجود، این کار در مهندسی نرم افزار بسیار با ارزش و لازم محسوب میگردد. (منبع)
بر اساس تعریف ویکیپدیا، IA اینگونه تعریف میگردد: "معماری اطلاعات عبارت است از طراحی ساختاری سامانههای اشتراک اطلاعات، که با هدف یافت پذیری و کاربرد پذیری انجام میشود."
در فرهنگ معماری اطلاعات، مفهوم یافتپذیری یا Findability به زبان ساده، شاخصی است که قابلیت یافت شدن و مکانیابی یک مجموعه اطلاعات را محک میزند. به عنوان مثال سامانههای اطلاعرسانی مانند وب سایتها باید به گونهای طراحی شوند که مردم در هر سطحی، به سادگی بتوانند اطلاعات مورد نظر خود را پیدا کنند.
مفهوم کاربردپذیری یا Usability ، شاخصهای است که میزان سهولت کاربری یک ابزار را نشان میدهد. این تعریف را میتوان به این صورت کامل نمود: "میزانی که یک محصول میتواند توسط کاربران خاصی برای رسیدن به هدفی مشخص مورد استفاده قرار گیرد و در حین استفاده، ضمن داشتن اثربخشی و کارآیی، رضایت کاربر را در زمینه مورد استفاده تامین کند." به عنوان مثال هنگامیکه شما قصد خرید اینترنتی را داشته باشید، در درجه اول مفهوم یافتپذیری برای شما پررنگ خواهد شد و پس از آن با انجام خرید حس کاربردپذیری فروشگاه خواهد بود که برای دفعات بعدی شما را به آن وبسایت هدایت خواهد کرد.
بنا بر آنچه که گفته شد، مفهوم یافتپذیری مقدم بر کاربردپذیری است. یعنی اگر کاربر نتواند آنچه را که به دنبال آن است بیابد، هرگز فرصت استفاده از آنرا نخواهد داشت. به علاوه اگر یافتپذیری محقق شود، کاربردپذیری هم بهبود خواهد یافت، چرا که مردم میتوانند به سرعت و سهولت به آنچه که نیاز دارند دست یابند. ذکر این نکته نیز حائز اهمیت است که موتورهای جست و جو، تنها وظیفهی هدایت کاربران را به وبسایت هدف خواهند داشت. اما وظیفه یافت پذیری، با بازدید کاربران از وبسایت آغاز میگردد. به نوعی میتوان گفت که یافتپذیری میکوشد به مردم این امکان را بدهد تا در هنگام گذار در وبسایت، به اطلاعاتی که نیاز دارند دست یابند.
معماری اطلاعات یکی از مهمترین مراحل توسعهی نرمافزار، به خصوص توسعهی نرمافزارهای تحت وب به شمار میرود. در حقیقت با انجام معماری اطلاعات دقیق، میتوان مواردی از قبیل رسیدن به اهداف تعیین شده، کم کردن هزینهی نگهداری و به روز رسانی، افزایش کارآیی و در نهایت کم شدن ریسکها را مدیریت نمود.
بر اساس آنچه که در وبسایت UXmatters و webmonkey گفته شده است، IA در شش مرحله صورت میگیرد:
1. ارزیابی هدف کسب و کار ( Assess business intent )
2. ارزیابی هدف کاربران ( Assess user intent )
3. ارزیابی محتوا ( Assess content )
4. مدیریت محتوا ( Organize content )
5. برقرارسازی ارتباط میان اطلاعات ( Enable information relationships )
6. فراهمسازی فرآیند هدایت محتوا ( Provide navigation )
تصویر زیر که برگرفته از وبسایت SitePoint میباشد برخی از مراحل فوق را به صورت مختصر و ساده نمایش داده است.
اگر به وبسایت رسمی انجمن معماری اطلاعات سری بزنید مطالب مفیدی در زمینهی پیاده سازی IA به دست خواهید آورد.
تصویر زیر ارتباط تنگاتنگ سه مبحث Information Design ، Interaction Design و Sensorial Design را نمایش میدهد. همانطور که میبینید، محتوا در مرکزیت هر سه موضوع قرار دارد. بنابراین میتوان اینگونه استنباط کرد که محتوا اصلیترین بخش یک کسبوکار نرمافزاری را تشکیل میدهد. اما در بخش پیشین دیدیم که محتوا به تنهایی نمیتواند راهگشای نتیجهی عالی از یک نرمافزار باشد. با توجه به دو مفهوم یافتپذیری و کاربردپذیری دیدیم برای آنکه بتوانیم در تولید نرمافزار بهترین باشیم، بایستی در قدم اول مفهوم یافتپذیری را رعایت نماییم. به زبان ساده باید هر چیزی را در جای مورد نظر خود قرار دهیم تا کاربر در مدت زمان خیلی کمی بتواند به آن دسترسی داشته باشد.
همانطور که در تصویر فوق ملاحظه میکنید دو اصطلاح شاید نا آشنای دیگر نیز آورده شده است، Interaction Design و Sensorial Design. در مقالهای دیگر به آنها خواهیم پرداخت.
طبق نوشتهی ویکی پدیا یک تست از مراحل زیر تشکیل میشود:
تست واحد : تست واحد در این سایت، به طور مکرر توسط فریمورکهای مختلفی مورد توجه قرار گرفته است و هدف آن تست برنامه به صورت قطعات کوچک است تا اطمینان پیدا کنیم آن تکه کد طبق انتظار ما جلو میرود. این تست حتی در آینده هم برای دنبال کردن باگها، کار ما را سادهتر میکند.
تست یکپارچه: هدف تست یکپارچه، بررسی عملکرد برنامه بعد از قرار گرفتن همهی تکهها در کنار هم هستند و این اطمینان را میدهد که برنامه عملکرد مثبتی دارد.
تست رابط جز: هدف این تست بررسی ارتباط و دادههای بین قسمتها و اجزای مختلف یک سیستم یا ارتباط زیر سیستمها با یکدیگر در یک سیستم بزرگتر است.
تست سیستم: تست سیستم برای بررسی عملکرد برنامه در سیستمهای مختلف است. اینکه برنامه در محیطهای اجرایی مختلف چگونه عمل میکند و در این شیوه باید قابلیتهای مختلف برنامه را در محیطها و ابزارهای مختلفی که برنامه استفاده میکند سنجید.
تست پذیرش عملکرد: یا اصطلاحا OAT، جهت اطمینان از عملکرد سیستم، برای ارائه نهایی به کار میرود که در اینجا دو آزمون آلفا و بتا صورت میگیرند.
تست آلفا Alpha در داخل خود سازمان توسط توسعه دهندگان که مسئول بررسی و تست نرم افزار هستند اتفاق میافتد. شکل زیر به خوبی جایگاه تست آلفا را در میان تستها توضیح میدهد.
تست آلفا در دو فاز انجام میگیرد:
فاز اول: فاز اول داخل تیم اصلی، توسط توسعه دهندگان هست تا اصلیترین باگها به سرعت رفع و حل شوند.
در فاز دوم برنامه به دست توسعه دهندگان واحد تضمین کیفیت Quality Assurance - QA مورد تست و ارزیابی قرار میگیرد.
تست آلفا قبل از عرضه عمومی اصطلاحا Commercial Off-the Shelf-COTS صورت میگیرد و قبل از تست بتا میباشد.
تست بتا Beta توسط کاربران نهایی نرم افزار و گاها کاربران شناخته شدهی محصول انجام میگیرد. این تست به منظور بررسی و ارزیابی عملکرد نرم افزار ، پایداری ، سازگاری ، میزان اطمینان به نرم افزار صورت میگیرد. تست بتا این ارزش را برای نرم افزار میآورد تا توسط کاربران اصلی و در محیطهای واقعی به طور وسیعتری مورد بررسی قرار گیرد تا بتواند چرخه تست نرم افزار را با موفقیت به اتمام برساند. همچین به توسعه دهنده کمک میکند تا حجم ورودیهای عظیمی را جمع آوری تا در آینده برای نسخهها و پشتیبانیهای آتی استفاده کند.
تصویر زیر جایگاه تست بتا را در روند تست نشان میدهد:
عوامل زیر در موفقیت هر چه بیشتر تست بتا وابسته هستند:
هزینه تست
تعداد شرکت کنندگان در این تست
نحوه ارسال به کاربر ( که امروزه بیشتر از طریق اینترنت صورت میگیرد)
مدت زمان تست
از نکات مهم در این تست میتوان گفت که طول دوره تست آلفا، بیشتر از تست بتاست که به طور متوسط 3 تا 5 برابر تست بتا طول میکشد و خود تست بتا، عموما در حد چند هفته و گاها تا چند ماه میباشد.
در صورتیکه تست آلفا با موفقیت بیرون داده شود، وارد نسخه بتا میشود و بعد از اتمام تست بتا وارد ریلیز نهایی میشود. تست آلفا با توجه COTS گفته شده میتواند کاربران خاص و محیط خاص خود را داشته باشد.