מצגת השיעור - קורס תכנות מתקדם

advertisement
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫תכנות מתקדם ‪89-210‬‬
‫תרגול מספר ‪7‬‬
‫תשע"א ‪2010-2011‬‬
‫כלים שימושיים ‪1‬‬
‫אליהו חלסצ'י‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫הקדמה‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫בדיקות תוכנה‬
‫•‬
‫•‬
‫•‬
‫•‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫לא ניתן לבנות תוכנה שתקבל תוכנה כקלט‪ ,‬ובאופן‬
‫אוטומטי תכריע לגבי נכונותה כלומר תבצע אימות תוכנה‪.‬‬
‫(הבעיה אינה ניתנת להכרעה – תלמדו על זה בחישוביות)‬
‫ביצע אימות ידני בא במחיר יקר מידי לרוב המערכות‪.‬‬
‫לכן מבצעים בדיקות (‪ ,)testing‬שמטרתן להגביר את‬
‫הביטחון שלנו בנכונות התוכנה ע"י סדרה של הרצות‬
‫ומציאת פגמים‪.‬‬
‫הבדיקות לא מוכיחות נכונות‪ ,‬אבל מועילות באופן מעשי‬
‫להקטנת הפגמים‪.‬‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫בדיקות תוכנה‬
‫•‬
‫•‬
‫•‬
‫•‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫בעבר היו בדיקות התוכנה תחום חובבני שבוצע על ידי‬
‫התוכניתנים עצמם‪.‬‬
‫היום זהו נדבך עיקרי בתהליך הפיתוח‪.‬‬
‫שיטה נפוצה היא "פיתוח מונחה בדיקות"‪ ,‬אפילו פעם‬
‫היה טרנד ה ”‪ "Extreme Programming‬של קנט בק‬
‫המבוססת על פיתוח מונחה הבדיקות‪.‬‬
‫פיתוח מונחה בדיקות ‪Test driven development( -‬‬
‫ובקיצור ‪ )TDD‬זו מתודולוגית פיתוח בה בדיקת‬
‫היחידה נכתבת עוד לפני הקוד אותו היא בודקת‪.‬‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫בדיקות תוכנה‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫• סוגי הבדיקות‪:‬‬
‫–‬
‫–‬
‫–‬
‫–‬
‫בדיקות יחידה )‪ - (Unit‬בדיקות ברמת יחידת תוכנה (מודול)‪.‬‬
‫לרוב מבוצעות על ידי מפתח התוכנה‪.‬‬
‫בדיקות אינטגרציה (‪ – )Integration‬מבוצע לאחר בדיקות‬
‫היחידה‪ ,‬נבדקים מס' מודולים יחד או התוכנית כולה‪ .‬לרוב‬
‫מבוצע ע"י צוות ‪.QA‬‬
‫בדיקות מערכת (‪ - )System‬בדיקות המערכת בכללותה‪ ,‬בדרך‬
‫כלל בראיית המשתמש‪.‬‬
‫בדיקות קבלה )‪ – (Acceptance‬בדיקות שנעשות ע"י‬
‫הלקוח‪ ,‬או צוות שמדמה אותו‪.‬‬
‫• היום נלמד על כלי שעוזר לנו ברמת בדיקת היחידה‪.‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫‪JUnit‬‬
‫• ‪ JUnit‬הוא כלי חופשי שיוצר תשתית פשוטה‬
‫לכתיבה ולהרצה של בדיקות חוזרות ב ‪.java‬‬
‫• רק באמצעות תשתית ראויה ניתן לקיים את‬
‫שיטת פיתוח מונחה הבדיקות‪ ,‬ו ‪ JUnit‬מספק‬
‫אותה‪.‬‬
‫• ניתן להורדה מהאתר ‪ http://junit.org/‬אך הקוד‬
‫כבר מובנה ב ‪ ,eclipse‬באתר גם דוקומנטציה‬
‫מלאה‪.‬‬
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
public class IntCalc {
public int pls(int x,int y){
return x+y;
}
public int sub(int x,int y){
return y-x;
}
public int mul(int x,int y){
return x*y;
}
}
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
import junit.framework.TestCase;
public class IntCalcTest extends TestCase {
public void testPls() {
fail("Not yet implemented");
}
public void testSub() {
fail("Not yet implemented");
}
public void testMul() {
fail("Not yet implemented");
}
}
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
import junit.framework.TestCase;
public class IntCalcTest extends TestCase {
private IntCalc ic;
protected void setUp(){
ic=new IntCalc();
}
public void testPls() {
assertEquals(5, ic.pls(3, 2));
}
public void testSub() {
assertEquals(8, ic.sub(16, 8));
assertEquals(-8, ic.sub(8, 16));
}
public void testMul() {
assertEquals(2147483644, ic.mul(1073741822, 2));
}
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
ANT
.‫ שלנו‬java ‫ לפרויקט ה‬build ‫ זה כלי לביצוע‬ANT •
:‫• מתוך דברי המחבר‬
• 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.
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫‪ANT‬‬
‫• ‪ ANT‬שונה מ ‪ builders‬אחרים בכך שלצורך‬
‫הבנייה לא מממשים סקריפטים שתלויים במערכת‬
‫ההפעלה‪ ,‬אלא מממשים מסמכי ‪XML‬‬
‫שבאמצעותם בונים את הפרויקט‪.‬‬
‫• את ‪ ANT‬ניתן להוריד מהאתר‬
‫‪http://ant.apache.org/‬‬
‫• כדאי גם להיכנס ל ‪ Manual‬כדי ללמוד עוד‪,‬‬
‫התכנים מוסברים שם היטב‪.‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫‪ANT‬‬
‫•‬
‫התקנה על חלונות לא כזו פשוטה‪ ,‬בצעו את הדברים הבאים‪:‬‬
‫– הורידו את קובץ ה ‪ zip‬מהאתר‪ ,‬ותפתחו אותו לתוך תיקייה כגון ”‪.“c:\ant‬‬
‫– קליק ימני על המחשב שלי‪‬מאפיינים ‪‬מתקדם ‪ ‬משתני סביבה‪.‬‬
‫– הוסיפו את המשתנים הבאים‪:‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪c:\ant\bin  PATH‬‬
‫‪c:\ant  ANT_HOME‬‬
‫‪  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‬‬
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
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>
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
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>
‫הקדמה‬
Junit
ANT
SVN
‫הטמעה‬
7 ‫ תרגול‬- ‫ תכנות מתקדם‬89-210
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>
http://ideoplex.com/focus/java ‫ תבקרו באתר‬ANT ‫ ב‬JUnit ‫ כגון שילוב‬,‫ללימוד נוסף‬
.‫ממנו נלקחו הדוגמאות‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫ניהול גרסאות ‪version control‬‬
‫• משמש לניהול פיתוח מתמשך של מסמכים דיגיטליים‬
‫שעובדים עליהם צוות של מפתחים‪.‬‬
‫• השינויים מזוהים כמספר גרסא‪.‬‬
‫• כלים לניהול גרסאות מאפשרים‪:‬‬
‫– יכולת לחזור לכל מצב קודם כשהקוד נפגם‪.‬‬
‫– בקרה על השינויים שבקוד‪.‬‬
‫– ניהול תוכנה בכמה גרסאות‪( .‬תיקון באגים וכו')‬
‫• מערכת ריכוזית‪ :‬כולם עובדים על אותו מאגר משותף‬
‫• מערכת ביזורית‪ :‬כל אחד עובד על מאגר משלו ואח"כ‬
‫משתף במאגר הכללי‪.‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫ניהול גרסאות ‪version control‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫• נעילה של קובץ‪:‬‬
‫– כאשר ‪ 2‬מתכנתים עובדים על אותו הקובץ הם עלולים‬
‫לדרוס אחד את עבודתו של השני‪...‬‬
‫– שיטה אחת למנוע זאת היא ע"י נעילה של הקובץ רק‬
‫למשתמש אחד‪.‬‬
‫– שיטה שנייה‪ ,‬היא לאפשר לשניהם לעבוד ולמזג אח"כ‪.‬‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫ניהול גרסאות ‪version control‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫• אוצר מילים‪:‬‬
‫– ‪ : Repository‬מאגר‪ ,‬המקום בו מאוחסנים הקבצים‪.‬‬
‫– ‪ : Working copy‬עותק מקומי של הקבצים מה‬
‫‪ repository‬עליו מתבצעת העבודה‪.‬‬
‫– ‪ : Check-out‬פעולת חילוץ הקבצים מה ‪.repository‬‬
‫– ‪ : Commit‬כאשר השינויים ב ‪ working copy‬נכתבים‬
‫ל ‪.repository‬‬
‫– ‪ : Conflict / Resolve‬קונפליקט קיים כשיש סתירה‬
‫באותו הקובץ‪ ,‬והאדם מתערב כדי לתקן )‪(resolve‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫‪SVN‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫תוכנה בקוד פתוח לניהול גירסאות‪.‬‬
‫עובדת על מס' רב של פלטפורמות‪ ,‬במס' רב של‬
‫גרסאות‪.‬‬
‫נפוצה מאד בתעשייה‪.‬‬
‫אנו נראה דוגמא ל ‪ subclipse‬שהוא ‪ plug-in‬של‬
‫‪ SVN‬לתוך סביבת ה ‪.eclipse‬‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫הוספת ‪ plug-in‬ל ‪eclipse‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪Find and inatall…  Software Updates  Help‬‬
‫‪ Search for new features‬ולחיצה על ‪next‬‬
‫אפשר לבחור מתוך הרשימה הקיימת‪ ,‬או להוסיף ע"י‬
‫‪ .add remote site‬לחצו עליו‪.‬‬
‫תקלידו את שם האתר – במקרה שלנו ‪Subclipse 1.4.5‬‬
‫תקלידו את כתובתו – במקרה שלנו‬
‫‪http://subclipse.tigris.org/update_1.4.x‬‬
‫אשרו‪ ,‬סמנו את חבילת ההתקה ברשימה‪ ,‬והמשיכו ללחוץ‬
‫‪ next‬עד לסיום‪.‬‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫הוספת ‪ plug-in‬ל ‪eclipse‬‬
‫• אחרי ההתקנה נוכל להוסיף ‪ view‬של ‪.SVN‬‬
‫• מצד שמאל למעלה אנו שולטים על ה ‪view‬‬
‫הנוכחי‪.‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫יצירת ‪repository‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫לצורך הדוגמא אנו נשתמש בשירות של ‪Google‬‬
‫המאפשר ליצור שרת ‪ SVN‬לכל מי שרשום‪.‬‬
‫וודאו שאתם מחוברים‪ ,‬למשל ל ‪ ,gmail‬וכנסו לאתר‬
‫‪http://code.google.com/hosting/‬‬
‫תבחרו ‪ create new project‬ומלאו את הטופס‪.‬‬
‫למעשה יצרתם שרת ‪ SVN‬משלכם כששם המשתמש‬
‫הוא שם המשתמש הרגיל שלכם‪.‬‬
‫את הסיסמא תוציאו מ‬
‫‪http://code.google.com/hosting/settings‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫יצירת ‪repository‬‬
‫• נבחר את ה ‪ view‬של ‪SVN‬‬
‫• בלשונית של ‪ SVN repositories‬ניצור חדש‬
‫• ניתן הכתובת הבאה‪:‬‬
‫‪https://[YOUR_PROJECT_NAME].googlecode.com/svn‬‬
‫• אשרו הכל‪ ,‬וחיזרו ל ‪ view‬של ‪.java‬‬
‫• כעת נוכל לבחור פרויקט ולהוסיפו למאגר‪.‬‬
‫• קליק ימני על שם הפרויקט ‪share project  team ‬‬
‫• בחרו ‪ ,SVN‬לחצו על ‪ next‬ובחרו ‪ repository‬קיים‪.‬‬
‫• התוצאה‪ :‬בלשונית ה ‪ SVN‬יופיעו קבצי הפרויקט‪.‬‬
‫• דרך התפריט ‪ team‬תוכלו לבצע בקלות את כל‬
‫הפעולות הקשורות ב ‪.repository‬‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫‪ 89-210‬תכנות מתקדם ‪ -‬תרגול ‪7‬‬
‫הטמעה‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫הקדמה‬
‫‪Junit‬‬
‫‪ANT‬‬
‫‪SVN‬‬
‫הטמעה‬
‫למה צריך להשתמש ב ‪?Junit‬‬
‫מהם היתרונות של ‪?ANT‬‬
‫למה משמש ‪?SVN‬‬
‫בדקו את מעגל הכיוונים של הרובוט ‪ Aibo‬באמצעות ‪.JUnit‬‬
‫תבצעו בנייה לחלק א' של התרגיל באמצעות ‪ANT‬‬
‫צרו ‪ repository‬ב ‪ Google‬ו ‪ SVN‬ב ‪ eclipse‬העתיקו לשם‬
‫פרויקטים‪ ,‬צרו שינויים והתעדכנו מהם אח"כ‪ ,‬דרך התפריט‬
‫‪ team‬שחקו עם‪:‬‬
‫– ‪Synchronize‬‬
‫– ‪Commit‬‬
‫– ‪update‬‬
Download