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