250 likes | 448 Views
כלים שימושיים 1. תכנות מתקדם 89-210 תרגול מספר 7 תשע"א 2010-2011. אליהו חלסצ'י. הקדמה. לא ניתן לבנות תוכנה שתקבל תוכנה כקלט, ובאופן אוטומטי תכריע לגבי נכונותה כלומר תבצע אימות תוכנה. (הבעיה אינה ניתנת להכרעה – תלמדו על זה בחישוביות) ביצע אימות ידני בא במחיר יקר מידי לרוב המערכות.
E N D
כלים שימושיים 1 תכנות מתקדם 89-210תרגול מספר 7 תשע"א 2010-2011 אליהו חלסצ'י
לא ניתן לבנות תוכנה שתקבל תוכנה כקלט, ובאופן אוטומטי תכריע לגבי נכונותה כלומר תבצע אימות תוכנה. (הבעיה אינה ניתנת להכרעה – תלמדו על זה בחישוביות) ביצע אימות ידני בא במחיר יקר מידי לרוב המערכות. לכן מבצעים בדיקות (testing), שמטרתן להגביר את הביטחון שלנו בנכונות התוכנה ע"י סדרה של הרצות ומציאת פגמים. הבדיקות לא מוכיחות נכונות, אבל מועילות באופן מעשי להקטנת הפגמים. בדיקות תוכנה
בעבר היו בדיקות התוכנה תחום חובבני שבוצע על ידי התוכניתנים עצמם. היום זהו נדבך עיקרי בתהליך הפיתוח. שיטה נפוצה היא "פיתוח מונחה בדיקות", אפילו פעם היה טרנד ה Extreme Programming”" של קנט בק המבוססת על פיתוח מונחה הבדיקות. פיתוח מונחה בדיקות - (Test driven development ובקיצור TDD) זו מתודולוגית פיתוח בה בדיקת היחידה נכתבת עוד לפני הקוד אותו היא בודקת. בדיקות תוכנה
סוגי הבדיקות: בדיקות יחידה (Unit)- בדיקות ברמת יחידת תוכנה (מודול). לרוב מבוצעות על ידי מפתח התוכנה. בדיקות אינטגרציה (Integration) – מבוצע לאחר בדיקות היחידה, נבדקים מס' מודולים יחד או התוכנית כולה. לרוב מבוצע ע"י צוות QA. בדיקות מערכת (System) - בדיקות המערכת בכללותה, בדרך כלל בראיית המשתמש. בדיקות קבלה (Acceptance) – בדיקות שנעשות ע"י הלקוח, או צוות שמדמה אותו. היום נלמד על כלי שעוזר לנו ברמת בדיקת היחידה. בדיקות תוכנה
JUnit הוא כלי חופשי שיוצר תשתית פשוטה לכתיבה ולהרצה של בדיקות חוזרות ב java. רק באמצעות תשתית ראויה ניתן לקיים את שיטת פיתוח מונחה הבדיקות, ו JUnit מספק אותה. ניתן להורדה מהאתר http://junit.org/ אך הקוד כבר מובנה ב eclipse, באתר גם דוקומנטציה מלאה. JUnit
publicclass IntCalc { publicint pls(int x,int y){ return x+y; } publicint sub(int x,int y){ return y-x; } publicint mul(int x,int y){ return x*y; } }
import junit.framework.TestCase; publicclass IntCalcTest extends TestCase { publicvoid testPls() { fail("Not yet implemented"); } publicvoid testSub() { fail("Not yet implemented"); } publicvoid testMul() { fail("Not yet implemented"); } }
import junit.framework.TestCase; publicclass IntCalcTest extends TestCase { private IntCalc ic; protectedvoid setUp(){ ic=new IntCalc(); } publicvoid testPls() { assertEquals(5, ic.pls(3, 2)); } publicvoid testSub() { assertEquals(8, ic.sub(16, 8)); assertEquals(-8, ic.sub(8, 16)); } publicvoid testMul() { assertEquals(2147483644, ic.mul(1073741822, 2)); }
ANT זה כלי לביצוע build לפרויקט ה java שלנו. מתוך דברי המחבר: In theory, it is kind of like make, without make's wrinkles. all those tools have limitations that Ant's original author couldn't live with when developing software across multiple platforms. Makefiles are inherently evil as well. Anybody who has worked on them for any time has run into the dreaded tab problem. "Is my command not executing because I have a space in front of my tab?!!" said the original author of Ant way too many times. ANT
ANT שונה מ builders אחרים בכך שלצורך הבנייה לא מממשים סקריפטים שתלויים במערכת ההפעלה, אלא מממשים מסמכי XML שבאמצעותם בונים את הפרויקט. את ANT ניתן להוריד מהאתר http://ant.apache.org/ כדאי גם להיכנס ל Manual כדי ללמוד עוד, התכנים מוסברים שם היטב. ANT
התקנה על חלונות לא כזו פשוטה, בצעו את הדברים הבאים: הורידו את קובץ ה zip מהאתר, ותפתחו אותו לתוך תיקייה כגון “c:\ant”. קליק ימני על המחשב שלימאפיינים מתקדם משתני סביבה. הוסיפו את המשתנים הבאים: PATHc:\ant\bin ANT_HOMEc:\ant JAVA_HOME תיקיית ה JDK שלכם, לדוגמאC:\Program Files\Java\jdk1.6.0_05 (תוודאו שיש שם קובץ בשם tools.jar) אשרו הכל. כנסו ל Shell (התחל הפעלה cmd) גשו ל c:\ant\bin ורשמו ant, הפקודה תפעיל את ant.bat בדיקה: אם קיבלתםBuildfile: build.xml does not exist!Build failed זה בסדר גמור. בדיקה שנייה גשו לתיקייה אחרת ותכתבו ant –version, אתם אמורים לקבל את הגרסא הנוכחית של ant ANT
hello.java public class hello { public static void main( String[] args ){ System.out.println( "Hello World" ); } } דוגמא לבנייה רגילה build.xml <project default="compile"> <target name="compile"> <javac srcdir="." /> </target> </project>
hello.java public class hello { public static void main( String[] args ){ System.out.println( "Hello World" ); } } דוגמא לבניית Jar build.xml <project default="compile"> <target name="compile"> <javac srcdir="." /> </target> <target name="jar“ depends="compile"> <jar destfile="hello.jar“ basedir=".“ includes="**/*.class"/> </target> </project>
דוגמא לבניית Jar והרצתו build.xml <project default="compile"> <target name="compile"> <javac srcdir="." /> </target> <target name="jar“ depends="compile"> <jar destfile="hello.jar“ basedir=".“ includes="**/*.class" /> </target> <target name="run" depends="jar"> <java classname="hello"classpath="hello.jar"fork="true"/> </target> </project> ללימוד נוסף, כגון שילוב JUnit ב ANT תבקרו באתר http://ideoplex.com/focus/javaממנו נלקחו הדוגמאות.
משמש לניהול פיתוח מתמשך של מסמכים דיגיטליים שעובדים עליהם צוות של מפתחים. השינויים מזוהים כמספר גרסא. כלים לניהול גרסאות מאפשרים: יכולת לחזור לכל מצב קודם כשהקוד נפגם. בקרה על השינויים שבקוד. ניהול תוכנה בכמה גרסאות. (תיקון באגים וכו') מערכת ריכוזית: כולם עובדים על אותו מאגר משותף מערכת ביזורית: כל אחד עובד על מאגר משלו ואח"כ משתף במאגר הכללי. ניהול גרסאות version control
נעילה של קובץ: כאשר 2 מתכנתים עובדים על אותו הקובץ הם עלולים לדרוס אחד את עבודתו של השני... שיטה אחת למנוע זאת היא ע"י נעילה של הקובץ רק למשתמש אחד. שיטה שנייה, היא לאפשר לשניהם לעבוד ולמזג אח"כ. ניהול גרסאות version control
אוצר מילים: Repository : מאגר, המקום בו מאוחסנים הקבצים. Working copy : עותק מקומי של הקבצים מה repository עליו מתבצעת העבודה. Check-out : פעולת חילוץ הקבצים מה repository. Commit : כאשר השינויים ב working copy נכתבים ל repository. Conflict / Resolve : קונפליקט קיים כשיש סתירה באותו הקובץ, והאדם מתערב כדי לתקן (resolve) ניהול גרסאות version control
תוכנה בקוד פתוח לניהול גירסאות. עובדת על מס' רב של פלטפורמות, במס' רב של גרסאות. נפוצה מאד בתעשייה. אנו נראה דוגמא ל subclipse שהוא plug-in של SVN לתוך סביבת ה eclipse. SVN
HelpSoftware UpdatesFind and inatall… Search for new features ולחיצה על next אפשר לבחור מתוך הרשימה הקיימת, או להוסיף ע"י add remote site. לחצו עליו. תקלידו את שם האתר – במקרה שלנו Subclipse 1.4.5 תקלידו את כתובתו – במקרה שלנו http://subclipse.tigris.org/update_1.4.x אשרו, סמנו את חבילת ההתקה ברשימה, והמשיכו ללחוץ next עד לסיום. הוספת plug-in ל eclipse
אחרי ההתקנה נוכל להוסיף view של SVN. מצד שמאל למעלה אנו שולטים על ה view הנוכחי. הוספת plug-in ל eclipse
לצורך הדוגמא אנו נשתמש בשירות של Google המאפשר ליצור שרת SVN לכל מי שרשום. וודאו שאתם מחוברים, למשל ל gmail, וכנסו לאתר http://code.google.com/hosting/ תבחרו create new project ומלאו את הטופס. למעשה יצרתם שרת SVN משלכם כששם המשתמש הוא שם המשתמש הרגיל שלכם. את הסיסמא תוציאו מ http://code.google.com/hosting/settings יצירת repository
יצירת repository • נבחר את ה view של SVN • בלשונית של SVN repositories ניצור חדש • ניתן הכתובת הבאה: https://[YOUR_PROJECT_NAME].googlecode.com/svn • אשרו הכל, וחיזרו ל view של java. • כעת נוכל לבחור פרויקט ולהוסיפו למאגר. • קליק ימני על שם הפרויקט teamshare project • בחרו SVN, לחצו על next ובחרו repository קיים. • התוצאה: בלשונית ה SVN יופיעו קבצי הפרויקט. • דרך התפריט team תוכלו לבצע בקלות את כל הפעולות הקשורות ב repository.
למה צריך להשתמש ב Junit? מהם היתרונות של ANT? למה משמש SVN? בדקו את מעגל הכיוונים של הרובוט Aibo באמצעות JUnit. תבצעו בנייה לחלק א' של התרגיל באמצעות ANT צרו repository ב Google ו SVN ב eclipse העתיקו לשם פרויקטים, צרו שינויים והתעדכנו מהם אח"כ, דרך התפריט team שחקו עם: Synchronize Commit update הטמעה