哈工大软件构造课程知识点总结(二)
系列文章目錄
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(一)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(二)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(三)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(四)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(五)
哈工大軟件構(gòu)造課程知識(shí)點(diǎn)總結(jié)(六)
文章目錄
- 系列文章目錄
- 簡(jiǎn)介
- Chapter 3:Software Construction Process and Configuration Management
- 軟件開(kāi)發(fā)的生命周期
- 傳統(tǒng)軟件開(kāi)發(fā)的過(guò)程模型
- 瀑布過(guò)程
- 增量過(guò)程
- V字模型
- 原型過(guò)程
- 螺旋模型
- 敏捷開(kāi)發(fā)
- 軟件配置管理與版本控制系統(tǒng)
- Git——一種分布式版本控制工具
- 軟件構(gòu)造整體過(guò)程
- 軟件構(gòu)造的狹義過(guò)程——Build
- Chapter 4:Data Type and Type Checking
- 編程語(yǔ)言中的數(shù)據(jù)類(lèi)型
- 靜態(tài) / 動(dòng)態(tài)類(lèi)型檢查
- 靜態(tài) / 動(dòng)態(tài)檢查
- 不可變性(inmutability) 與可變性(mutablity)
- 不可變類(lèi)型示例——`String`
- 可變類(lèi)型示例——`StringBuilder`
- 快照?qǐng)D(Snapshot Diagram)
- 基本類(lèi)型的畫(huà)法
- 對(duì)象類(lèi)型的畫(huà)法
- 復(fù)雜數(shù)據(jù)結(jié)構(gòu)
- 一些有用的不可變類(lèi)型
簡(jiǎn)介
此文章是2021春哈工大軟件構(gòu)造課程Chapter 3、Chapter 4的知識(shí)點(diǎn)總結(jié)。
Chapter 3:Software Construction Process and Configuration Management
軟件開(kāi)發(fā)的生命周期
From 0 to 1 從無(wú)到有
From 1 to n 從有到好
傳統(tǒng)軟件開(kāi)發(fā)的過(guò)程模型
兩個(gè)基本類(lèi)型:線性過(guò)程(Linear)、迭代過(guò)程(Iterative)
現(xiàn)有模型:
選擇合適的過(guò)程模型的依據(jù):
- 用戶(hù)參與度(適應(yīng)變化的能力)
- 開(kāi)發(fā)效率(管理復(fù)雜度)
- 開(kāi)發(fā)出的軟件的質(zhì)量
瀑布過(guò)程
特點(diǎn):
- 線性無(wú)迭代,整體推進(jìn)
- 階段劃分清楚
- 管理簡(jiǎn)單
- 無(wú)法適應(yīng)需求變化
增量過(guò)程
特點(diǎn):
- 增量式(多個(gè)瀑布串行)線性推進(jìn)
- 無(wú)迭代
- 比較容易適應(yīng)需求的增加
V字模型
特點(diǎn):
- 瀑布過(guò)程的拓展
- 結(jié)合測(cè)試
原型過(guò)程
迭代過(guò)程,開(kāi)發(fā)之后由用戶(hù)試用、評(píng)審,發(fā)現(xiàn)問(wèn)題反饋給開(kāi)發(fā)者,開(kāi)發(fā)者修改原有實(shí)現(xiàn)再交給用戶(hù)評(píng)審。以上過(guò)程循環(huán)往復(fù),直至用戶(hù)滿(mǎn)意為止。
時(shí)間代價(jià)高,但開(kāi)發(fā)質(zhì)量也高
螺旋模型
敏捷開(kāi)發(fā)
通過(guò)快速迭代和小規(guī)模的持續(xù)改進(jìn)(每次迭代處理一個(gè)小規(guī)模增量),以快速適應(yīng)變化。
軟件配置管理與版本控制系統(tǒng)
一些概念:
- 軟件配置管理:追蹤和控制軟件的變化
- 軟件配置項(xiàng):軟件中發(fā)生變化的基本單元(如文件)
- 基線:軟件持續(xù)變化過(guò)程中的“穩(wěn)定時(shí)刻”(如對(duì)外發(fā)布的版本)
- 配置管理數(shù)據(jù)庫(kù)(CMDB):存儲(chǔ)軟件的各配置項(xiàng)隨時(shí)間發(fā)生變化的信息+基線
- 版本:為軟件的任一特定時(shí)刻(Moment)的形態(tài)指派一個(gè)唯一的編號(hào),作為“身份標(biāo)識(shí)”
- 本地版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于開(kāi)發(fā)者本地機(jī)器,無(wú)法共享和協(xié)作
- 集中式版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于獨(dú)立的服務(wù)器,支持多開(kāi)發(fā)者之間的協(xié)作
- 分布式版本控制系統(tǒng):倉(cāng)庫(kù)存儲(chǔ)于獨(dú)立的服務(wù)器+每個(gè)開(kāi)發(fā)者的本地機(jī)器
Git——一種分布式版本控制工具
見(jiàn)文章Git基礎(chǔ)知識(shí)及常用命令總結(jié)——Git基礎(chǔ)知識(shí)部分。
軟件構(gòu)造整體過(guò)程
語(yǔ)言、代碼評(píng)審、靜態(tài) / 動(dòng)態(tài)代碼分析、測(cè)試與調(diào)試、重構(gòu)……
略,Chapter 3 課件P65 ~ P100。
軟件構(gòu)造的狹義過(guò)程——Build
略,P101 ~ P120。
Chapter 4:Data Type and Type Checking
編程語(yǔ)言中的數(shù)據(jù)類(lèi)型
以Java為例,包括基本數(shù)據(jù)類(lèi)型和對(duì)象數(shù)據(jù)類(lèi)型,如下圖:
對(duì)象類(lèi)型之間會(huì)形成層次結(jié)構(gòu)(繼承關(guān)系)。
靜態(tài) / 動(dòng)態(tài)類(lèi)型檢查
靜態(tài)類(lèi)型語(yǔ)言:在編譯階段進(jìn)行類(lèi)型檢查,如Java
動(dòng)態(tài)類(lèi)型語(yǔ)言:在運(yùn)行階段進(jìn)行類(lèi)型檢查,如Python
靜態(tài)類(lèi)型檢查 >> 動(dòng)態(tài) >> 無(wú)檢查(問(wèn)題越早發(fā)現(xiàn)越好)
靜態(tài) / 動(dòng)態(tài)檢查
靜態(tài)檢查主要檢查語(yǔ)法錯(cuò)誤、類(lèi)名/函數(shù)名錯(cuò)誤、參數(shù)數(shù)目及類(lèi)型錯(cuò)誤、返回值類(lèi)型錯(cuò)誤等。【關(guān)心types】
動(dòng)態(tài)檢查主要檢查非法的參數(shù)值/返回值、越界及空指針等。【關(guān)心values】
練習(xí):
/* 例1 */ int n = 5; if (n) { // 靜態(tài)錯(cuò)誤:Type mismatch: cannot convert from int to booleann = n + 1; } /* 例2 */ int big = 200000; big *= big; // 無(wú)錯(cuò)誤,但得到錯(cuò)誤結(jié)果:1345294336 /* 例3 */ double p = 1/5; // 無(wú)錯(cuò)誤,但得到錯(cuò)誤結(jié)果:0.0 /* 例4 */ int sum = 0; int n = 0; int aver = sum / n; // 動(dòng)態(tài)錯(cuò)誤,拋出異常:java.lang.ArithmeticException: / by zero /* 例5 */ double sum = 7; double n = 0; double average = sum / n; // 結(jié)果為Infinity不可變性(inmutability) 與可變性(mutablity)
不可變性(inmutablity):
- 重要設(shè)計(jì)原則,更安全
- 不可變數(shù)據(jù)類(lèi)型一旦被創(chuàng)建,其值不可改變
- 盡量使用final變量作為方法的輸入?yún)?shù)和局部變量
- 如果編譯器無(wú)法確定final變量不會(huì)改變,就提示錯(cuò)誤,這也是靜態(tài)類(lèi)型檢查的一部分
- 使用不可變類(lèi)型,對(duì)其頻繁修改會(huì)產(chǎn)生大量的臨時(shí)拷貝(需要垃圾回收)
可變性(mutability):
- 值可修改
- 可變類(lèi)型最少化拷貝以提高效率,更好的性能
- 適合于在多個(gè)模塊之間共享數(shù)據(jù)
- 考慮安全需進(jìn)行防御式拷貝
不可變類(lèi)型示例——String
String s = "a"; s += "b";對(duì)應(yīng)的Snapshot Diagram:
可變類(lèi)型示例——StringBuilder
StringBuilder sb = new StringBuilder("a"); sb.append("b");對(duì)應(yīng)的Snapshot Diagram:
快照?qǐng)D(Snapshot Diagram)
- 描述程序運(yùn)行時(shí)內(nèi)部狀態(tài)
- 便于程序員之間的交流
- 便于刻畫(huà)各類(lèi)變量隨時(shí)間變化
- 便于解釋設(shè)計(jì)思路
基本類(lèi)型的畫(huà)法
對(duì)象類(lèi)型的畫(huà)法
- 雙線/單線橢圓——不可變/可變對(duì)象(String與StringBuilder)
- 雙線/單線箭頭——不可變/可變引用(如下圖)
注意:
練習(xí):
復(fù)雜數(shù)據(jù)結(jié)構(gòu)
- Array
- List
- Set
- Map
課件中介紹了以上數(shù)據(jù)類(lèi)型的基本使用方法(Chapter 4 P53 ~ P56),此處略。
關(guān)于迭代器(Iterator)的remove()方法:自動(dòng)調(diào)整其內(nèi)部索引與刪除執(zhí)行后一致。
一些有用的不可變類(lèi)型
基本類(lèi)型及其封裝對(duì)象類(lèi)型都是不可變的;
不可變包裝器提供不可變對(duì)象,例如:Collections.unmodifiableList()(禁用可變List中所有mutator方法,但這種不可變是在運(yùn)行階段獲得的,編譯階段無(wú)法據(jù)此進(jìn)行靜態(tài)檢查)。
總結(jié)
以上是生活随笔為你收集整理的哈工大软件构造课程知识点总结(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySql实验嵌套查询_实验五 数据库
- 下一篇: 升级 Adobe CS5 中的 Flas