計算機(jī)科學(xué)畢業(yè)論文基于ANDROID手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用_第1頁
計算機(jī)科學(xué)畢業(yè)論文基于ANDROID手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用_第2頁
計算機(jī)科學(xué)畢業(yè)論文基于ANDROID手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用_第3頁
計算機(jī)科學(xué)畢業(yè)論文基于ANDROID手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用_第4頁
計算機(jī)科學(xué)畢業(yè)論文基于ANDROID手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用_第5頁
已閱讀5頁,還剩68頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

廣東技術(shù)師范學(xué)院本科畢業(yè)論文(設(shè)計)基于Android手機(jī)系統(tǒng)的軟件開發(fā)與應(yīng)用.4Android軟件的分析與劃分3.4.1播放器模塊狀態(tài)3.4.2天氣預(yù)報模塊狀態(tài)3.4.3地震信息模塊狀態(tài)3.4.4位置定位模塊狀態(tài)3.4.2餐館信息模塊狀態(tài)4Android軟件的詳細(xì)設(shè)計4.1數(shù)據(jù)庫需求分析數(shù)據(jù)庫在一個信息管理系統(tǒng)中占有非常重要的地位,數(shù)據(jù)庫結(jié)構(gòu)設(shè)計的好壞將直接對應(yīng)用系統(tǒng)的效率,以及實(shí)現(xiàn)的效果產(chǎn)生影響。合理的數(shù)據(jù)庫結(jié)構(gòu)設(shè)計可以提高數(shù)據(jù)存儲的效率,保證數(shù)據(jù)的完整和一致。數(shù)據(jù)庫接口設(shè)計:AndroidAndroid系統(tǒng)數(shù)據(jù)庫音樂播放器天氣預(yù)報WebservicesOrGps餐館數(shù)據(jù)信息地震信息位置定位根據(jù)手機(jī)軟件的特性以及軟件的邏輯設(shè)計,設(shè)計了一個數(shù)據(jù)庫,本軟件使用的是用C語言編寫的SQLite數(shù)據(jù)庫,該數(shù)據(jù)庫是輕量級的,支持常用的SQL語言。數(shù)據(jù)庫名稱:mydb數(shù)據(jù)表:t_restaurant字段:f_id,f_name,f_address,f_cal一個表包含id號,餐館名字,餐館地址,食物熱量t_restaurant表(餐館信息表)字段名稱字段類型字段大小是否為空備注f_idint2否標(biāo)識符f_nametext10是餐館名稱f_addresstext10是餐館地址f_caltext100是食物熱量在實(shí)際的應(yīng)用程序編寫中,為了更好地應(yīng)對SQLite數(shù)據(jù)庫的創(chuàng)建,打開以及更好進(jìn)行管理,往往要編寫一個繼承自SQliteOpenHelper的數(shù)據(jù)庫輔助類來幫助我們創(chuàng)建和打開數(shù)據(jù)庫。4.2數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計數(shù)據(jù)庫設(shè)計要遵循一些規(guī)則,一個好的數(shù)據(jù)庫滿足一些嚴(yán)格的約束和要求。盡量分離各實(shí)體對應(yīng)的表,一個實(shí)體對應(yīng)一個表,搞清楚該實(shí)體有哪些屬性,對應(yīng)有些什么字段,以及各實(shí)體之間有何種聯(lián)系。實(shí)體、屬性與聯(lián)系是進(jìn)行概念設(shè)計時要考慮的3個元素,也是一個好的數(shù)據(jù)庫設(shè)計的核心。本軟件是手機(jī)軟件,有別于PC軟件的數(shù)據(jù)庫,其用SQLite輕量級的數(shù)據(jù)庫。支持常用的SQL語言。本軟件的餐館信息管理需要數(shù)據(jù)庫的支持,一個餐館就是一個記錄,分別有四個字段,id字段是數(shù)據(jù)庫自動配置的,其余的三個字段信息是用戶輸入的。下面是SQLiteOpenHelper的主要代碼,包括增刪改等功能//初始化數(shù)據(jù)庫publicvoidonCreate(SQLiteDatabasedb){if(TableNames==null){message=NO_CREATE_TABLES;return;}//初始化表格for(inti=0;i<TableNames.length;i++){Stringsql="CREATETABLE"+TableNames[i]+"(";for(intj=0;j<FieldNames[i].length;j++){sql+=FieldNames[i][j]+""+FieldTypes[i][j]+",";}sql=sql.substring(0,sql.length()-1);sql+=")";db.execSQL(sql);}}//判斷版本publicvoidonUpgrade(SQLiteDatabasedb,intarg1,intarg2){for(inti=0;i<TableNames[i].length();i++){Stringsql="DROPTABLEIFEXISTS"+TableNames[i];db.execSQL(sql);}onCreate(db);}publicvoidexecSQL(Stringsql)throwsjava.sql.SQLException{SQLiteDatabasedb=this.getWritableDatabase();db.execSQL(sql);}//查詢數(shù)據(jù)publicCursorselect(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy){SQLiteDatabasedb=this.getReadableDatabase();Cursorcursor=db.query(table,columns,selection,selectionArgs,groupBy,having,orderBy);returncursor;}//插入數(shù)據(jù)publiclonginsert(Stringtable,Stringfields[],Stringvalues[]){SQLiteDatabasedb=this.getWritableDatabase();/*將添加的值放入ContentValues*/ContentValuescv=newContentValues();for(inti=0;i<fields.length;i++){cv.put(fields[i],values[i]);}returndb.insert(table,null,cv);}//刪除數(shù)據(jù)publicintdelete(Stringtable,Stringwhere,String[]whereValue){SQLiteDatabasedb=this.getWritableDatabase();returndb.delete(table,where,whereValue);}//更新數(shù)據(jù)publicintupdate(Stringtable,StringupdateFields[],StringupdateValues[],Stringwhere,String[]whereValue){SQLiteDatabasedb=this.getWritableDatabase();/*將修改的值放入ContentValues*/ContentValuescv=newContentValues();for(inti=0;i<updateFields.length;i++){cv.put(updateFields[i],updateValues[i]);}returndb.update(table,cv,where,whereValue);}publicStringgetMessage(){returnmessage;}@Overridepublicsynchronizedvoidclose(){//TODOAuto-generatedmethodstubsuper.close();}}4.3Android數(shù)據(jù)存儲SharedPreferencesSharedPreferences是Android平臺上一個輕量級的存儲類,主要是保存一些常用的配置比如窗口狀態(tài),一般在Activity中重載窗口狀態(tài)onSaveInstanceState保存一般使用SharedPreferences完成,它提供了Android平臺常規(guī)的Long長整形、Int整形、String字符串型的保存,它是什么樣的處理方式呢?SharedPreferences類似過去Windows系統(tǒng)上的ini配置文件,但是它分為多種權(quán)限,可以全局共享訪問,android123提示最終是以xml方式來保存,整體效率來看不是特別的高,對于常規(guī)的輕量級而言比SQLite要好不少,如果真的存儲量不大可以考慮自己定義文件格式。xml處理時Dalvik會通過自帶底層的本地XMLParser解析,比如XMLpull方式,這樣對于內(nèi)存資源占用比較好。該軟件的音樂播放器模塊就用到了SharedPreferences的數(shù)據(jù)存儲方法。軟件保持了上次打開的音樂鏈接,這樣下次打開軟件時播放的就是上次關(guān)閉前播放的歌曲。Android的數(shù)據(jù)存儲在SharedPreferences和SQLite數(shù)據(jù)庫的配合下發(fā)揮的淋漓盡致。4.4軟件主要功能模塊的實(shí)現(xiàn)軟件包括了大約5個功能,有(1)音樂播放器,此播放器簡單易用,剔除了用戶平時不多用的功能,讓音樂做到簡單。(2)天氣預(yù)報,只要你輸入想查詢的城市,詳細(xì)的天氣預(yù)報信息就會毫無保留地展示在你面前。(3)地震消息查看,雖然地震預(yù)測在各國還是一個很大難題,但提供一些實(shí)時的地震消息還是有一定的參考價值,返還于未然。(4)位置定位,不管你在哪里,高山或是郊區(qū),只要有信號,你就能準(zhǔn)確地定位你當(dāng)前的位置,同時提供GoogleMap讓你一目了然,這樣今后去旅游或探險之類的活動再也不怕迷失方向了。(5)創(chuàng)意十足的餐館管理,上班族一定有一個很大的問題,那就是不知道到哪吃飯好,此功能能幫你解決這個煩惱,只要你平時都記錄下餐館的地址之類的信息,那么系統(tǒng)就會幫你隨機(jī)選出餐館,同時也提供GoogleMap地圖給你,而且不但如此,系統(tǒng)還能算出你目前到該餐館的大約路程和到該餐館所需時間。4.4.1首頁的實(shí)現(xiàn)過程對于手機(jī)軟件來說,軟件的首頁是十分重要的,這關(guān)于著使用者的支持度,如同網(wǎng)頁一樣,良好的視覺是吸引使用者的一個重要因素,手機(jī)首頁運(yùn)行如下圖:如下是主界面的XML代碼,其他界面和主界面相仿:主界面的XML代碼:<?xmlversion="1.0"encoding="utf-8"?><AbsoluteLayoutandroid:id="@+id/widget52"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@drawable/mainblackground"xmlns:android="/apk/res/android"><Buttonandroid:id="@+id/Mplayer"android:layout_width="115px"android:layout_height="wrap_content"android:background="@drawable/ziiselector"android:text="王子播音樂"android:typeface="sans"android:textStyle="bold"android:layout_x="35px"android:layout_y="272px"></Button><Buttonandroid:id="@+id/GoRestaurant"android:background="@drawable/ziiselector"android:layout_width="115px"android:layout_height="wrap_content"android:text="玫瑰報天氣"android:typeface="sans"android:textStyle="bold"android:layout_x="172px"android:layout_y="272px"></Button><Buttonandroid:id="@+id/Flashlight"android:background="@drawable/ziiselector"android:layout_width="115px"android:layout_height="wrap_content"android:text="狐貍講地震"android:typeface="sans"android:textStyle="bold"android:layout_x="35px"android:layout_y="352px"></Button><Buttonandroid:id="@+id/Where"android:background="@drawable/ziiselector"android:layout_width="115px"android:layout_height="wrap_content"android:text="小蛇看位置"android:typeface="sans"android:textStyle="bold"android:layout_x="172px"android:layout_y="352px"></Button></AbsoluteLayout>4.4.2播放器的實(shí)現(xiàn)音樂播放器,此播放器簡單易用,剔除了用戶平時不多用的功能,讓音樂做到簡單。該模塊包括的主要設(shè)計查看SD卡或手機(jī)中的音樂文件系統(tǒng)提供了ContentProvider,因此可以獲取數(shù)據(jù)庫中的文件增加音樂文件(用ADB管理)用ADB命令符來增加歌曲,例如:adbpushfrank.mp3sdcard/frank.mp3顯示音樂文件信息(歌手,歌曲,專輯名)根據(jù)系統(tǒng)提供的信息獲取前臺播放音樂文件播放器最基本的功能,播放音樂,暫停音樂,停止音樂后臺播放音樂文件不用關(guān)閉播放器就可以去運(yùn)行別的程序運(yùn)行界面如下圖所示:4.4.3天氣預(yù)報的實(shí)現(xiàn)天氣預(yù)報,只要你輸入想查詢的城市,詳細(xì)的天氣預(yù)報信息就會毫無保留地展示在你面前。功能如下:各地氣候查詢,輸入城市的拼音,例如廣州(guangzhou),就可以獲取廣州的氣候,氣溫,濕度等信息各地氣候?qū)崟r更新由于天氣是變化的,因此可以實(shí)時更新氣候信息運(yùn)行界面如下圖所示:天氣預(yù)報主要代碼,SAX解析:publicvoidstartElement(StringnamespaceURI,StringlocalName,StringqName,Attributesatts)throwsSAXException{if(localName.equals("forecast_information")){this.in_forecast_information=true;}elseif(localName.equals("current_conditions")){this.in_current_conditions=true;}elseif(localName.equals("forecast_conditions")){this.in_forecast_conditions=true;}else{StringdataAttribute=atts.getValue("data");if(localName.equals("city")){}elseif(localName.equals("postal_code")){}elseif(localName.equals("latitude_e6")){//Onecouldusethistoconvertcity-nametoLat/Long.}elseif(localName.equals("longitude_e6")){//Onecouldusethistoconvertcity-nametoLat/Long.}elseif(localName.equals("forecast_date")){}elseif(localName.equals("current_date_time")){}elseif(localName.equals("unit_system")){if(dataAttribute.equals("SI"))this.usingSITemperature=true;}elseif(localName.equals("day_of_week")){if(this.in_current_conditions){//可擴(kuò)展}elseif(this.in_forecast_conditions){//可擴(kuò)展}}elseif(localName.equals("icon")){if(this.in_current_conditions){this.setIconURL(dataAttribute);}elseif(this.in_forecast_conditions){//可擴(kuò)展}}elseif(localName.equals("condition")){if(this.in_current_conditions){this.setCurrentCondition(dataAttribute);}elseif(this.in_forecast_conditions){//可擴(kuò)展}}elseif(localName.equals("temp_f")){//this.setCurrentTemp(Integer.parseInt(dataAttribute));}elseif(localName.equals("temp_c")){this.setCurrentTemp(Integer.parseInt(dataAttribute));}elseif(localName.equals("humidity")){this.setCurrentHum(dataAttribute);}elseif(localName.equals("wind_condition")){//可擴(kuò)展}//'Inner'Tagswithin"<forecast_conditions>"elseif(localName.equals("low")){//inttemp=Integer.parseInt(dataAttribute);if(this.usingSITemperature){//可擴(kuò)展}else{//可擴(kuò)展}}elseif(localName.equals("high")){//inttemp=Integer.parseInt(dataAttribute);if(this.usingSITemperature){//可擴(kuò)展}else{//可擴(kuò)展}}}}4.4.4地震信息的實(shí)現(xiàn)地震消息查看,雖然地震預(yù)測在各國還是一個很大難題,但提供一些實(shí)時的地震消息還是有一定的參考價值,返還于未然。功能如下:(1)各地地震信息顯示同過美國地震局的XML文件解析,從而獲取信息(2)各地地震信息實(shí)時更新同天氣一樣,地震也是變化的,因此可以實(shí)時更新地震信息運(yùn)行界面如下圖所示:地震信息主要代碼,DOM解析:privatevoidgetInfo(){//獲得XMLURLurl;try{Stringfeed=getString(R.string.feed);url=newURL(feed);URLConnectionconnection=url.openConnection();HttpURLConnectionhttpConnection=(HttpURLConnection)connection;intresponseCode=httpConnection.getResponseCode();if(responseCode==HttpURLConnection.HTTP_OK){InputStreamin=httpConnection.getInputStream();DocumentBuilderFactorydbfactory=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbfactory.newDocumentBuilder();//解析地震feedDocumentdom=db.parse(in);ElementdocEle=dom.getDocumentElement();//清空舊的地震信息infoList.clear();//獲得地震信息的列表NodeListnl=docEle.getElementsByTagName("entry");if(nl!=null&&nl.getLength()>0){for(inti=0;i<nl.getLength();i++){Elemententry=(Element)nl.item(i);Elementtitle=(Element)entry.getElementsByTagName("title").item(0);Elementgeo=(Element)entry.getElementsByTagName("georss:point").item(0);Elementwhen=(Element)entry.getElementsByTagName("updated").item(0);Stringdetails=title.getFirstChild().getNodeValue();Stringpoint=geo.getFirstChild().getNodeValue();Stringdate=when.getFirstChild().getNodeValue();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss'Z'");Dateqdate=newGregorianCalendar(0,0,0).getTime();try{qdate=sdf.parse(date);}catch(ParseExceptione){e.printStackTrace();}4.4.5位置定位的實(shí)現(xiàn)位置定位,不管你在哪里,高山或是郊區(qū),只要有信號,你就能準(zhǔn)確地定位你當(dāng)前的位置,同時提供GoogleMap讓你一目了然,這樣今后去旅游或探險之類的活動再也不怕迷失方向了。主要功能有:(1)位置定位同過GPS或者基站返回經(jīng)緯度,然后再同過Google地圖顯示出來(2)地圖的放大按比例放大地圖(3)地圖的縮小按比例縮小地圖(4)衛(wèi)星地圖的顯示兩種地圖互換(5)位置實(shí)時更新定時更新位置運(yùn)行界面如下圖所示:位置定位的主要代碼:LocationManagerlocationManager;StringserviceName=Context.LOCATION_SERVICE;locationManager=(LocationManager)getSystemService(serviceName);//Stringprovider=LocationManager.GPS_PROVIDER;Criteriacriteria=newCriteria();criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(true);criteria.setPowerRequirement(Criteria.POWER_LOW);Stringprovider=locationManager.getBestProvider(criteria,true);location=locationManager.getLastKnownLocation(provider);updateWithNewLocation(location);//GPS定時locationManager.requestLocationUpdates(provider,2000,10, locationListener);}privatefinalLocationListenerlocationListener=newLocationListener(){ publicvoidonLocationChanged(Locationlocation){ updateWithNewLocation(location); } publicvoidonProviderDisabled(Stringprovider){ updateWithNewLocation(null); } publicvoidonProviderEnabled(Stringprovider){} publicvoidonStatusChanged(Stringprovider,intstatus, Bundleextras){}};privatevoidupdateWithNewLocation(Locationlocation){ StringlatLongString; TextViewmyLocationText; myLocationText=(TextView)findViewById(R.id.myLocation); if(location!=null){ GeoPointx=getGeoByLocation(location); ctrlMap.animateTo(x); latLongString=getAddressbyGeoPoint(x); }else{ latLongString="你人品有問題,無法獲取地理信息!"; } myLocationText.setText(latLongString);}//經(jīng)緯度轉(zhuǎn)換地址publicStringgetAddressbyGeoPoint(GeoPointgp){StringstrReturn="";try{if(gp!=null){/*創(chuàng)建Geocoder對象*/Geocodergc=newGeocoder(CurrentLocation.this,Locale.getDefault());/*取出地理坐標(biāo)經(jīng)緯度*/doublegeoLatitude=(int)gp.getLatitudeE6()/1E6;doublegeoLongitude=(int)gp.getLongitudeE6()/1E6;/*自經(jīng)緯度取得地址(可能有多行地址)*/List<Address>lstAddress=gc.getFromLocation(geoLatitude,geoLongitude,1);StringBuildersb=newStringBuilder();/*判斷地址是否為多行*/if(lstAddress.size()>0){AddressadsLocation=lstAddress.get(0);for(inti=0;i<adsLocation.getMaxAddressLineIndex();i++){sb.append(adsLocation.getAddressLine(i)).append("\n");}sb.append(adsLocation.getLocality()).append("\n");sb.append(adsLocation.getPostalCode()).append("\n");sb.append(adsLocation.getCountryName());}/**將擷取到的地址*組合后放在StringBuilder對象中輸出用*/strReturn=sb.toString();}}catch(Exceptione){e.printStackTrace();}returnstrReturn;}//location轉(zhuǎn)換為GeoPointprivateGeoPointgetGeoByLocation(Locationlocation){GeoPointgp=null;try{/*當(dāng)Location存在*/if(location!=null){doublegeoLatitude=location.getLatitude()*1E6;doublegeoLongitude=location.getLongitude()*1E6;gp=newGeoPoint((int)geoLatitude,(int)geoLongitude);}}catch(Exceptione){e.printStackTrace();}returngp;}4.4.6餐館信息的實(shí)現(xiàn)創(chuàng)意十足的餐館管理,上班族一定有一個很大的問題,那就是不知道到哪吃飯好,此功能能幫你解決這個煩惱,只要你平時都記錄下餐館的地址之類的信息,那么系統(tǒng)就會幫你隨機(jī)選出餐館,同時也提供GoogleMap地圖給你,而且不但如此,系統(tǒng)還能算出你目前到該餐館的大約路程和到該餐館所需時間。主要功能:(1)餐館信息增加餐館名稱,餐館地址,食物熱量多少(2)餐館數(shù)據(jù)顯示通過ListView顯示出來(3)餐館信息編輯餐館信息修改,餐館信息刪除(4)餐館地址顯示同過Google地圖顯示隨機(jī)餐館的位置(5)當(dāng)前位置與隨機(jī)餐館的距離算出距離,如果提供參數(shù),可以算出道道目的地的所需時間PAGE68廣東技術(shù)師范學(xué)院本科畢業(yè)論文(設(shè)計)PAGE74運(yùn)行界面如下圖所示:餐館信息主要代碼:/*取得兩點(diǎn)間的距離的方法*/publicdoubleGetDistance(GeoPointgp1,GeoPointgp2){doubleLat1r=ConvertDegreeToRadians(gp1.getLatitudeE6()/1E6);doubleLat2r=ConvertDegreeToRadians(gp2.getLatitudeE6()/1E6);doubleLong1r=ConvertDegreeToRadians(gp1.getLongitudeE6()/1E6);doubleLong2r=ConvertDegreeToRadians(gp2.getLongitudeE6()/1E6);/*地球半徑(KM)*/doubleR=6371;doubled=Math.acos(Math.sin(Lat1r)*Math.sin(Lat2r)+Math.cos(Lat1r)*Math.cos(Lat2r)*Math.cos(Long2r-Long1r))*R;returnd*1000;}privatedoubleConvertDegreeToRadians(doubledegrees){return(Math.PI/180)*degrees;}/*自定義隨機(jī)數(shù)取得餐廳數(shù)據(jù)函數(shù)*/privatevoiddrawRestaurant(){Stringf[]={"f_id","f_name","f_address","f_cal"};/*SELECTf[]FROMtables[0]*/Cursorc=dbHelper.select(tables[0],f,"",null,null,null,null);allRestaurantID=newArrayList<String>();allRestaurantName=newArrayList<String>();allRestaurantAddress=newArrayList<String>();allRestaurantCal=newArrayList<String>();/*將所有餐廳數(shù)據(jù)放入List<String>對象*/while(c.moveToNext()){allRestaurantID.add(c.getString(0));allRestaurantName.add(c.getString(1));allRestaurantAddress.add(c.getString(2));allRestaurantCal.add(c.getString(3));}if(allRestaurantID.size()>0){Randomgenerator=newRandom();intintThrowIndex=generator.nextInt(allRestaurantID.size());//顯示隨機(jī)餐廳mTextView01.setText(allRestaurantName.get(intThrowIndex));mTextView02.setText(allRestaurantAddress.get(intThrowIndex));mTextView03.setText(allRestaurantCal.get(intThrowIndex)+getResources().getText(R.string.str_cal));/*以地址查詢地理坐標(biāo)*/gp=getGeoByAddress(allRestaurantAddress.get(intThrowIndex));if(gp==null){/*地址無法反查為GeoPoint時*/mMapView01.setVisibility(MapView.GONE);}else{distance.setText((newInteger((int)GetDistance(gp,now))).toString()+"km");/*更新MapView地圖*/mMapView01.setVisibility(MapView.VISIBLE);showImageOverlay(gp);refreshMapViewByGeoPoint(getGeoByAddress(allRestaurantAddress.get(intThrowIndex)),mMapView01,intZoomLevel,true);}}else{/*數(shù)據(jù)庫無記錄*/}5Android軟件測試5.1測試的目的與目標(biāo)本規(guī)范是對項(xiàng)目軟件測試的一份規(guī)范性文件,對軟件測試過程中所涉及到的測試類型、測試方法、測試標(biāo)準(zhǔn)、測試流程以及軟件產(chǎn)品責(zé)任單位所承擔(dān)的職責(zé)進(jìn)行總體規(guī)范,以有效保證軟件產(chǎn)品的質(zhì)量。軟件測試是對軟件設(shè)計的一種控制手段,是對軟件產(chǎn)品質(zhì)量的一種檢查和審核手段。軟件設(shè)計單位應(yīng)采取有效措施保證軟件產(chǎn)品的質(zhì)量,軟件測試應(yīng)按本規(guī)范要求對軟件進(jìn)行檢查、測試,軟件設(shè)計單位應(yīng)保證對測試錯誤進(jìn)行修正。測試過程中發(fā)現(xiàn)的軟件錯誤必須及時改正,這就是軟件測試的任務(wù)。為了改正錯誤,首先必須確定故障的準(zhǔn)確位置,這是測試過程中最困難和任務(wù)。需要周密審慎的思考和推理。改正錯誤常常包括修正原來的設(shè)計,必須通盤考慮而不能“頭痛醫(yī)頭腳痛醫(yī)腳”,應(yīng)該盡量避免在測試過程中引進(jìn)新的故障。5.2測試的方法功能測試=1\*GB3①、鏈接測試鏈接測試可分為三個方面。首先,測試所有鏈接是否按指示的那樣確實(shí)鏈接到了該鏈接的頁面;其次,測試所鏈接的頁面是否存在;最后,保證Web應(yīng)用系統(tǒng)上沒有孤立的頁面,所謂孤立頁面是指沒有鏈接指向該頁面,只有知道正確的URL地址才能訪問。鏈接測試必須在集成測試階段完成。=2\*GB3②、表單測試當(dāng)用戶給應(yīng)用系統(tǒng)管理員提交信息時,就需要使用表單操作,例如用戶注冊、登錄、信息提交等。在這種情況下,我們必須測試提交操作的完整性,以校驗(yàn)提交信息的正確性。如果表單只能接受指定的某些值,則也要進(jìn)行測試。例如:只能接受某些字符,測試時可以跳過這些字符,看系統(tǒng)是否會報錯。=3\*GB3③、數(shù)據(jù)庫測試在Web應(yīng)用技術(shù)中,數(shù)據(jù)庫起著重要的作用,數(shù)據(jù)庫為應(yīng)用系統(tǒng)的管理、運(yùn)行、查詢和實(shí)現(xiàn)用戶對數(shù)據(jù)存儲的請求等提供空間。最常用的數(shù)據(jù)庫類型是關(guān)系型數(shù)據(jù)庫,可以使用SQL對信息進(jìn)行處理。一般情況下,可能發(fā)生兩種錯誤,分別是數(shù)據(jù)一致性錯誤和輸出錯誤。數(shù)據(jù)一致性錯誤主要是由于用戶提交的表單信息不正確而造成的,而輸出錯誤主要是由于網(wǎng)絡(luò)速度或程序設(shè)計問題等引起的,針對這兩種情況,可分別進(jìn)行測試??捎眯詼y試=1\*GB3①、導(dǎo)航測試導(dǎo)航描述了用戶在一個頁面內(nèi)操作的方式,在不同的用戶接口控制之間,例如按鈕、對話框、列表和窗口等;或在不同的連接頁面之間。系統(tǒng)的導(dǎo)航幫助要盡可能地準(zhǔn)確。導(dǎo)航的另一個重要方面是應(yīng)用系統(tǒng)的頁面結(jié)構(gòu)、導(dǎo)航、菜單、連接的風(fēng)格是否一致。確保用戶憑直覺就知道Web應(yīng)用系統(tǒng)里面是否還有內(nèi)容,內(nèi)容在什么地方。應(yīng)用系統(tǒng)的層次一旦決定,就要著手測試用戶導(dǎo)航功能。=2\*GB3②、圖形測試在應(yīng)用系統(tǒng)中,適當(dāng)?shù)膱D片和動畫既能起到廣告宣傳的作用,又能起到美化頁面的功能。一個應(yīng)用系統(tǒng)的圖形可以包括圖片、動畫、邊框、顏色、字體、背景、按鈕等。圖形測試的內(nèi)容有:要確保圖形有明確的用途。驗(yàn)證所有頁面字體的風(fēng)格是否一致。背景顏色應(yīng)該與字體顏色和前景顏色相搭配。圖片的大小和質(zhì)量也是一個很重要的因素,一般采用JPG或GIF壓縮。=3\*GB3③、瀏覽器測試瀏覽器是Web客戶端最核心的構(gòu)件,框架和層次結(jié)構(gòu)風(fēng)格在不同的瀏覽器中也有不同的顯示,甚至根本不顯示。不同的瀏覽器對安全性和Java的設(shè)置也不一樣。測試瀏覽器兼容性的一個方法是創(chuàng)建一個兼容性矩陣。在這個矩陣中,測試不同廠商、不同版本的瀏覽器對某些構(gòu)件和設(shè)置的適應(yīng)性。安全性測試系統(tǒng)的安全性測試區(qū)域主要有:測試有效和無效的用戶名和密碼,要注意到是否大小寫敏感,可以試多少次的限制,是否可以登錄而直接瀏覽某個頁面等。5.3系統(tǒng)測試的用例5.3.1天氣預(yù)報測試用例測試項(xiàng)目編號001測試項(xiàng)目名稱天氣預(yù)報數(shù)據(jù)獲得測試用例編號輸入:在天氣預(yù)報界面的輸入框中中輸入城市出:在天氣預(yù)報界面的輸出框中輸出該城市的天氣預(yù)報信息。驟及操作:在Android使用該軟件進(jìn)行測試。5.3.2地震信息測試用例測試項(xiàng)目編號002測試項(xiàng)目名稱地震信息數(shù)據(jù)獲得測試用例編號輸入:在主頁面按地震信息按鈕輸出:在地震信息界面輸出各地的地震信息狀況驟及操作:在Android使用該軟件進(jìn)行測試。5.3.3位置定位測試用例測試項(xiàng)目編號003測試項(xiàng)目名稱當(dāng)前位置數(shù)據(jù)獲得測試用例編號輸入:在主頁面按位置定位按鈕輸出:在位置定位界面顯示GoogleMap地圖和當(dāng)前位置的信息驟及操作:在Android使用該軟件進(jìn)行測試。5.3.3位置定位測試用例測試項(xiàng)目編號004測試項(xiàng)目名稱餐館信息管理測試用例編號1輸入:在增加餐館界面輸入餐館信息,如名字,地址,食物熱量2輸出:在編輯餐館界面輸出餐館信息3輸入:按獲取餐館按鈕4輸出:在顯示餐館地址界面出現(xiàn)GoogleMap地圖和餐館信息5輸入:在顯示餐館地址界面輸入所用速度6輸出:在顯示餐館地址界面輸出所用時間7步驟及操作:在Android使用該軟件進(jìn)行測試6Android軟件的安全6.1應(yīng)用程序版本管理應(yīng)用程序的版本管理包含了兩個部分,一個部分是我們自己如何對版本進(jìn)行命名,另一部分則是如何利用版本管理來完成應(yīng)用的升級。版本管理是Android應(yīng)用程序升級和維護(hù)的重要組件。這是基于:用戶需要在安裝或者升級應(yīng)用程序是獲取對應(yīng)的版本信息。其他應(yīng)用程序有可能查詢你的應(yīng)用程序版本以確定兼容性。你的應(yīng)用程序發(fā)布的服務(wù)可能也需要查詢版本以顯示版本信息。Android應(yīng)用程序主要是通過androidmanifest.xml中的android:ionCode和android:versionName來實(shí)現(xiàn)版本的管理。該軟件是第一次編寫,因此主版本號定位1,次版本號為0,修改版本號為100518。6.2手機(jī)簽名策略所有的Android應(yīng)用程序都要求開發(fā)人員用一個證書進(jìn)行數(shù)字簽名,該證書的私鑰由開發(fā)人員擁有。Android系統(tǒng)通過證書來識別開發(fā)人員,而不是用它來控制用戶可以安裝哪一個應(yīng)用程序。因此,在Android中我們可以使用自簽名的證書。為應(yīng)用程序簽名有下列幾個步驟:1.以發(fā)布模式編譯應(yīng)用2.獲取一個私鑰3.用私鑰對應(yīng)用程序進(jìn)行簽名結(jié)論本文深入探討了在Android系統(tǒng)中的應(yīng)用程序開發(fā),包括技術(shù)理論,數(shù)據(jù)流程,編程實(shí)現(xiàn),界面交互設(shè)計等的方方面面,為一般的基于Android系統(tǒng)軟件開發(fā)提供了范例,具有良好的實(shí)際借鑒價值和一定的理論參考價值。同時,通過開發(fā)這個Android軟件讓我在軟件工程設(shè)計方面有了更深的理解,在前期需求分析和數(shù)據(jù)庫設(shè)計時,由于需求分析不到位,需求變化比較大,導(dǎo)致在系統(tǒng)的編碼過程只能邊設(shè)計邊整改需求方案,最終在老師指導(dǎo)下和自己的合理調(diào)整后解決了相應(yīng)的問題,這是以后項(xiàng)目開發(fā)時需要謹(jǐn)記的教訓(xùn)。在系統(tǒng)實(shí)施的過程中,由于本人在某些功能模塊的需求分析上考慮不周到,所以系統(tǒng)依然存在一些不足,這將會在今后系統(tǒng)的實(shí)際運(yùn)行過程中逐步加以完善和解決。參考文獻(xiàn)[1]Android應(yīng)用開發(fā)揭秘楊豐盛著機(jī)械工業(yè)出版社.[2]GoogleAndroid開發(fā)入門指南王世江人民郵電出版社[3]Android開發(fā)入門與實(shí)踐姚尚朗

人民郵電出版社[4][5]/Android中文網(wǎng)[6]/bbs/Android中文論壇[7]/Android開發(fā)網(wǎng)[8]百度網(wǎng)站附錄附錄A在模擬器中虛擬SD卡在使用模擬器開發(fā)時,可以通過硬盤來模擬SD卡。Android模擬SD具體做法是:1.創(chuàng)建一個SD卡鏡像文件打開cmd,我是進(jìn)入到c盤根目錄下,輸入如下命令:mksdcard1024Msdcard.img該命令會在當(dāng)前目錄(我即是c盤根目錄)下生成一個sdcard.img文件,該文件就是Android模擬器的SD卡鏡像文件。1024M表示1024兆,即該SD卡有1個G的容量,也可用K做單位(1M=1024K),K,M必須大寫。目前Android支持8M~128G的SD卡。2.關(guān)聯(lián)SD卡和模擬器就是讓模擬器知道它的SD卡是誰,路徑是什么。在eclipse中使用了ADT插件。eclipse->windows->AndroidAVDManager,彈出一個窗口,在SDCard后面的框中輸入:c:\sdcard.img,即是第一步創(chuàng)建的SD卡鏡像文件的位置。先點(diǎn)擊createavd,然后點(diǎn)擊finish結(jié)束。3、向SD卡中導(dǎo)文件這一步需要把模擬器運(yùn)行起來。在cmd中,命令如下:adbpushtest.mp3sdcard/test.mp3這會將本地當(dāng)前目錄下的test.mp3文件拷到sdcard中,文件名不變。前一個test.mp3是本地文件的路徑,sdcard是目的sd卡鏡像的文件名(去掉后綴)。4、在模擬器中使用SD卡中的文件導(dǎo)入文件后,如果要在模擬器中訪問,還需要在模擬器中的Devtools里面Mediascannerscan一下媒體文件。附錄BAndroid開發(fā)的環(huán)境搭配首先:安裝JDK6(jdk-6-windows-i586.exe)安裝完JDK后,在安裝MyEclipse(在這里我安裝的是MyEclipse6.0)(也可以安裝Eclipse,區(qū)別是Eclipse要裝比較多的插件,而MyEclipse就不用那么麻煩。當(dāng)然MyEclipse是要錢的。題外話)

安裝完這些后開始部署Android的環(huán)境了(參看一下步驟):

1:在Windows機(jī)器上,右鍵單擊我的電腦,選擇屬性->高級,點(diǎn)“環(huán)境變量”按鈕,在出現(xiàn)的對話框中雙擊“系統(tǒng)變量”下面的Path變量進(jìn)行修改,把$SDK_ROOT/tools的真實(shí)路徑加入其中(即Androidsdk解壓后的文件夾下的tool路徑在這里我是C:\Downloads\android-sdk-windows-1.5_r2\android-sdk-windows-1.5_r2\tools)。

將$SDK_ROOT/tools目錄加入系統(tǒng)路徑中可以讓你在使用adb(AndroidDebugBridge)和其它命令行工具的時候不需要輸入全路徑名。如果你升級了你的SDK,如果和原來目錄不一樣的話,要記得更新你的PATH變量設(shè)置。

2:安裝Eclipse的Plugin(ADT)

如果你希望使用Eclipse作為你開發(fā)Android應(yīng)用程序的開發(fā)環(huán)境,你可以安裝一個叫做ADT(AndroidDevelopmentTools)的插件。ADT插件包含一系列功能強(qiáng)大的擴(kuò)展功能,可以更快更容易的創(chuàng)建、運(yùn)行并且調(diào)試Android應(yīng)用程序。

如果你不打算使用Eclipse,那么就不需要下載和安裝ADT插件。為了下載和安裝ADT插件,要先設(shè)置MyEclipse遠(yuǎn)程更新站點(diǎn),可以按照下面的步驟進(jìn)行:

1.啟動MyEclipse,選擇菜單Help>SoftwareUpdates>FindandInstall…

2.在顯示出的對話框中選擇Searchfornewfeaturestoinstall,按下Next繼續(xù)。

3.按NewRemoteSite按鈕。

4.在出現(xiàn)的對話框中,為遠(yuǎn)程更新站點(diǎn)輸入一個名字(譬如AndroidPlugin),還要輸入下面的URL:/android/eclipse/按OK按鈕。

5.你現(xiàn)在會看到新的站點(diǎn)被加入到搜索列表中,并且被勾選上,按下Finish按鈕。

6.在消息更新結(jié)束后,你會看到SearchResults對話框,在其中選中AndroidPlugin>EclipseIntegration>AndroidevelopmentTools,然后按下Next按鈕。

7.接下來是插件的許可協(xié)議,看完之后選擇Accepttermsofthelicenseagreement,然后按Next繼續(xù)。

8.在出現(xiàn)的Install對話框中按Finish,會開始下載ADT插件。

9.ADT插件沒有認(rèn)證,你可以點(diǎn)擊“InstallAll”按鈕允許安裝。10.重新啟動MyEclipse。

11.重啟MyEclipse之后,設(shè)置MyEclipse的參數(shù),使之指向開發(fā)包的根目錄($SDK_ROOT):

a)選擇Window>Preferences…打開參數(shù)設(shè)置面板b)在左側(cè)面板中選擇Android。

c)點(diǎn)擊右側(cè)面板的SDKLocation后面的地址欄中輸入SDK包的地址,或者點(diǎn)擊Browse按鈕在系統(tǒng)中尋找(在這里我是C:\Downloads\android-sdk-windows-1.5_r2\android-sdk-windows-1.5_r2)d)輸入后點(diǎn)擊確定。更新ADT插件可以通過下面的步驟更新ADT插件到最新版本:

1.選擇Help>SoftwareUpdates>FindandInstall…

2.選擇Searchforupdatesofthecurrentlyinstalledfeatures,按Finish按鈕。

3.如果發(fā)現(xiàn)有ADT的更新的話,選中并且安裝。或者以下面的方式更形ADT插件:

1.選擇Help>SoftwareUpdates>ManageConfiguration。

2.從左側(cè)樹狀導(dǎo)航條找到并選擇AndroidDevelopmentTools。

3.在右側(cè)的AvailableTask條目中點(diǎn)擊ScanforUpdates。

在MyEclipse開發(fā)環(huán)境中開發(fā)Android應(yīng)用程序

在MyEclipse中開發(fā)Android應(yīng)用程序之前,你需要先創(chuàng)建一個Android工程,然后設(shè)置啟動配置。之后,你就可以寫代碼、運(yùn)行和調(diào)試了。

如果你沒有安裝ADT插件的話,請先按照前面的步驟安裝該插件。

創(chuàng)建Android工程

ADT插件提供了新工程向?qū)?,你可以快速?chuàng)建一個Android工程。步驟如下:

1.選擇File>New>Project。

2.選擇Android>AndroidProject,按下Next按鈕。

3.選擇兩種不同的創(chuàng)建新項(xiàng)目方式:

選擇Createnewprojectinworkspace。創(chuàng)建新工程。

選擇CreateprojectFromexistingsource在已存在的代碼上創(chuàng)建工程。你可以使用這個選項(xiàng)創(chuàng)建和運(yùn)行SDK包中的例子代碼,它們位于SDK包的samples目錄下。

4.點(diǎn)擊Finish按鈕,結(jié)束創(chuàng)建工程。

工程創(chuàng)建完后,ADT插件自動創(chuàng)建下面的文件和目錄,放置特定的內(nèi)容:

src/:包含你的java源文件res/:包含資源文件

AndroidManifest.xml:工程的manifest文件

創(chuàng)建啟動配置

在運(yùn)行和調(diào)試Eclipse中的Android程序之前,必須先創(chuàng)建一個啟動配置。啟動配置定義了需要啟動的項(xiàng)目,要開始的活動,仿真器選項(xiàng)等等。

通過下面的步驟創(chuàng)建啟動配置:

1.選擇Run>OpenRunDialog…或者Run>OpenDebugDialog

2.在左側(cè)的樹型工程類型列表中,右鍵單擊AndroidApplication,并選擇New。

3.在出現(xiàn)的對話框中輸入你的配置的名字。

4.在下面的Android表單中,點(diǎn)擊Browse找到你的工程,選中要開始的活動。

5.在Emulator表單中,設(shè)置想要的屏幕大小和網(wǎng)絡(luò)狀況。

6.可以在Common表單中設(shè)置額外的選項(xiàng)。

7.點(diǎn)擊Apply按鈕,保存設(shè)置好的配置,或者點(diǎn)擊Run或者Debug按鈕。

運(yùn)行和調(diào)試Android應(yīng)用程序。基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F04

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論