日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈工大软件构造课程知识点总结(二)

發(fā)布時間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈工大软件构造课程知识点总结(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

系列文章目錄

哈工大軟件構(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)有模型:

  • 瀑布過程(Waterfall)
  • 增量過程(Incremental)
  • V字模型(V-Model)
  • 原型過程(Prototyping)
  • 螺旋模型(Spiral)
  • 選擇合適的過程模型的依據(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。