程序員內(nèi)功修煉大法【反射、內(nèi)省】(上)
一、軟件開發(fā)概述
2.1、軟件開發(fā)的生命周期
生命周期: 從立項(xiàng)到軟件停用的過程
問題的定義及規(guī)劃: 此階段是軟件開發(fā)方與需求方共同討論,主要確定軟件的開發(fā)目標(biāo)及其可行性
需求分析: 在確定軟件開發(fā)可行的情況下,對(duì)軟件需要實(shí)現(xiàn)的各功能進(jìn)行詳細(xì)分析。需求分析階段是一個(gè)很重要的階段,這一階段做得好,將為整個(gè)軟件開發(fā)項(xiàng)目的成功打下良好的基礎(chǔ)。
軟件設(shè)計(jì): 此階段主要根據(jù)需求分析的結(jié)果,把整個(gè)軟件系統(tǒng)劃分為大大小小的多個(gè)模塊,設(shè)計(jì)出每一個(gè)模塊的具體結(jié)構(gòu)。如系統(tǒng)框架設(shè)計(jì),數(shù)據(jù)庫設(shè)計(jì)等。軟件設(shè)計(jì)一般分為總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。
程序編碼: 此階段是將軟件設(shè)計(jì)的結(jié)果轉(zhuǎn)換成計(jì)算機(jī)可運(yùn)行的程序代碼。在程序編碼中必須要制定統(tǒng)一,符合標(biāo)準(zhǔn)的編寫規(guī)范。以保證程序的可讀性,易維護(hù)性,提高程序的運(yùn)行效率。
軟件測(cè)試: 在軟件設(shè)計(jì)完成后要經(jīng)過嚴(yán)密的測(cè)試,以發(fā)現(xiàn)軟件在整個(gè)設(shè)計(jì)過程中存在的問題并加以糾正。整個(gè)測(cè)試過程分單元測(cè)試(白盒)、集成測(cè)試(黑盒,功能測(cè)試、強(qiáng)度性能測(cè)試)以及系統(tǒng)測(cè)試三個(gè)階段進(jìn)行。測(cè)試的方法主要有白盒測(cè)試和黑盒測(cè)試兩種。在測(cè)試過程中需要建立詳細(xì)的測(cè)試計(jì)劃并嚴(yán)格按照測(cè)試計(jì)劃進(jìn)行測(cè)試,以減少測(cè)試的隨意性。
運(yùn)行維護(hù): 安裝部署軟件系統(tǒng),修復(fù)軟件中存在的bug和升級(jí)系統(tǒng)。在軟件開發(fā)完成并投入使后,由于多方面的原因,軟件不能繼續(xù)適應(yīng)用戶的要求。要延續(xù)軟件的使用壽命,就必須對(duì)軟件進(jìn)行維護(hù)。軟件的維護(hù)包括糾錯(cuò)性維護(hù)和改進(jìn)性維護(hù)兩個(gè)方面
2.2、軟件設(shè)計(jì)原則
為了提高軟件的開發(fā)效率,降低軟件開發(fā)成本,一個(gè)優(yōu)良的軟件系統(tǒng)應(yīng)該具有以下特點(diǎn):
可重用性:遵循 DRY(Don’t Repeat Yourself Principle) 原則,減少軟件中的重復(fù)代碼。
可拓展性:當(dāng)軟件需要升級(jí)增加新的功能,能夠在現(xiàn)有的系統(tǒng)架構(gòu)上方便地創(chuàng)建新的模塊,而不需要改變軟件現(xiàn)有的結(jié)構(gòu),也不會(huì)影響已經(jīng)存在的模塊。
可維護(hù)性:當(dāng)用戶需求發(fā)生變化時(shí),只需要修改局部的模塊中的少量代碼即可.
高內(nèi)聚性:內(nèi)聚,強(qiáng)調(diào)一個(gè)系模塊內(nèi)的功能聯(lián)系,每個(gè)模塊只完成特定的功能,不同模塊之間不會(huì)有功能的重疊,高內(nèi)聚性可以提高軟件的可重用性和可維護(hù)性。
低耦合性:耦合,強(qiáng)調(diào)的是多個(gè)模塊之間的關(guān)系,模塊之間相互獨(dú)立,修改某一個(gè)模塊,不會(huì)影響到其他的模塊。低耦合性提高了軟件的可維護(hù)性。
2.3、編碼規(guī)范
基本命名規(guī)范:使用有意義的英文單詞,多個(gè)單詞用駝峰表示法
包名
全小寫 , 域名倒寫.模塊名.組件名 ,例如:com.util
接口名
首字母大寫,形容詞,副詞。習(xí)慣性的以 I 開頭。此時(shí)的I表示 interface,見名知意.(不強(qiáng)制,要結(jié)合其他規(guī)范綜合考慮),例如:IUserService,IEmployeeService
接口實(shí)現(xiàn)類
習(xí)慣性使用 Impl 結(jié)尾.(不強(qiáng)制,要結(jié)合其他規(guī)范綜合考慮),例如:UserServiceImpl,EmployeeServiceImpl
類名
首字母大寫,名詞。遵循駝峰表示法。例如:User,Employ
方法名
首字母小寫。力求語義清晰,使用多個(gè)單詞。遵循駝峰表示法。例如:getUserInfoByName()
變量名
首字母小寫。遵循駝峰表示法。例如:userInfo
常量名
全大寫,力求語義清晰,使用多個(gè)單詞。使用下劃線分割。例如:MAX_STOCK_COUNT.
二、軟件測(cè)試
軟件測(cè)試經(jīng)常分為兩類:黑盒測(cè)試和白盒測(cè)試。
2.1、黑盒測(cè)試
黑盒測(cè)試也稱功能測(cè)試,是通過測(cè)試來檢測(cè)每個(gè)功能是否能正常使用,把程序看作一個(gè)不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序的接口上進(jìn)行測(cè)試,檢查程序功能是否 按照需求規(guī)格說明書 的規(guī)定正常使用。
簡(jiǎn)單來說就是:不需要寫代碼,給輸入值,看程序是否能夠輸出期望的值。
他主要發(fā)現(xiàn)以下幾個(gè)錯(cuò)誤:
功能是否不正確或遺漏
界面是否有錯(cuò)誤
輸入和輸出錯(cuò)誤
數(shù)據(jù)庫訪問錯(cuò)誤
性能是否有問題
初始化和終止錯(cuò)誤等
2.2、白盒測(cè)試
由開發(fā)人員來測(cè)試. 又稱結(jié)構(gòu)測(cè)試、透明盒測(cè)試、邏輯驅(qū)動(dòng)測(cè)試或基于代碼的測(cè)試。它是按照程序內(nèi)部的結(jié)構(gòu)測(cè)試程序,通過測(cè)試來檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照設(shè)計(jì)規(guī)格說明書的規(guī)定正常執(zhí)行。測(cè)試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測(cè)試數(shù)據(jù)。
簡(jiǎn)單來說就是:需要寫代碼的。關(guān)注程序具體的執(zhí)行流程。
2.3、JUnit測(cè)試
JUnit 是由 Erich Gamma 和 Kent Beck 編寫的一個(gè)回歸測(cè)試框架(regression testing framework)。JUnit 測(cè)試是程序員測(cè)試,即白盒測(cè)試,因?yàn)槌绦騿T知道被測(cè)試的軟件如何(How)完成功能和完成什么樣(What)的功能。
2.3.1、JUnit依賴安裝
由于 JUnit 4 回歸測(cè)試框架是三方提供的,不是 JDK 自帶的,所有要使用需導(dǎo)入人家的 jar 包以及安裝對(duì)應(yīng)的插件,這里以maven為例,導(dǎo)入maven坐標(biāo):
2.3.2、JUnit常用注解
JUnit配上一些常用注解可以解決代碼重復(fù)的問題
修飾的方法會(huì)在測(cè)試方法之前被自動(dòng)執(zhí)行
修飾的方法會(huì)在測(cè)試方法執(zhí)行之后自動(dòng)被執(zhí)行,如果有異常的話,@After后面的代碼也會(huì)執(zhí)行
三、配置文件
按理說只要能保存一些配置信息,供程序動(dòng)態(tài)讀取數(shù)據(jù)就OK,但是為了提高效率,在 IT 行業(yè)中,習(xí)慣使用兩種具有特殊特點(diǎn)的文件來作為配置文件
properties 文件
XML文件
3.1、properties文件
該文件稱屬性文件 / 資源文件 / 配置文件, 以 properties 作為文件后綴名,存取特點(diǎn)是KV鍵值對(duì)的格式:key=value,多對(duì)數(shù)據(jù)使用換行分開。
注意事項(xiàng):
在配置文件中,所有的數(shù)據(jù)都是字符串,不需要使用引號(hào)。
在配置文件中不需要使用空格
3.1.1、解析properties文件
如果要讀取 properties 中的數(shù)據(jù),我們使用 IO 操作,一行一行的讀取,再通過=來切分字符串也可以完成.但是還是比較麻煩的,如果有注釋更麻煩,此時(shí)我們可以意識(shí)到這么復(fù)雜的步驟,SUN公司肯定幫我們寫好了工具方法,這就是是 Properties。
Properties 是 Map 的實(shí)現(xiàn)類.可以繼承過來map的常見的操作方法(get,put....),map中的方法,我們一般都不用.因?yàn)?properties 文件比較特殊,我們一般使用 Properties 類的新增的方法。
3.1.2、常見的API
public void load(InputStream inStream); 通過輸入流加載配置文件中的內(nèi)容。
public String getProperty(String key);// 通過屬性名獲取屬性值
package com.test; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * @author Xiao_Lin * @date 2020/12/28 11:55 */ public class ProTest { public static void main(String[] args) throws IOException { //讀取配置文件中的數(shù)據(jù) Properties properties = new Properties(); //為了獲取ClassLoder對(duì)象,跟Thread無關(guān) ClassLoader loader = Thread.currentThread().getContextClassLoader(); //通過類加載器去讀取配置文件發(fā),返回一個(gè)輸入流 InputStream stream = loader.getResourceAsStream("user.properties"); //加載配置文件 properties.load(stream); System.out.println(properties.getProperty("user")); System.out.println(properties.getProperty("password")); } }
3.2、XML文件
XML(Extensible Markup Language),是一種可擴(kuò)展的標(biāo)記語言.(使用◇>括起來)XML技術(shù)是W3C組織(World Wide Web Consortium萬維網(wǎng)聯(lián)盟)發(fā)布的,目前遵循的是W3C組織于1998年發(fā)布的。
XML1.0規(guī)范.它的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而不是顯示數(shù)據(jù)(HTML).它的標(biāo)簽沒有被預(yù)定義需要自行定義標(biāo)簽.它是W3C的推薦標(biāo)準(zhǔn)。
3.2.1、為什么要學(xué)習(xí)XML
XML是一種通用的數(shù)據(jù)交換格式。
許多系統(tǒng)的配置文件都是使用XML。
JavaEE框架基本都有在使用XML
3.2.2、XML的語法
XML文檔需要在文檔第一行聲明,聲明表示
XML 開發(fā)者
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。