軟件工程 概述

軟件 不僅僅是一個程序代碼。程序是一個可執行的代碼,它提供了一些計算的目的。 軟件被認為是集合可執行的程序代碼,相關庫和文檔的軟件。當滿足一個特定的要求,就被稱為軟件產品。

工程 是所有有關開發的產品,使用良好定義的,科學的原理和方法。

在這里插入圖片描述

軟件工程 是一門工程分支使用定義良好的科學原理,方法和程序開發軟件產品。軟件工程的成果是一個高效,可靠的軟件產品

定義

IEEE對于軟件工程的定義:

(1) 將系統、規范、可量化的方法應用于軟件的開發、運行和維護;也就是說,工程在軟件中的應用。
(2) 研究方法如上陳述。

Fritz Bauer(德國計算機科學家)對軟件工程的定義:

軟件工程是建立和使用合理的工程原理,以便經濟地獲得可靠且在真是機器上有效工作的軟件。

軟件演化

運用軟件工程的原理和方法開發軟件產品的過程被稱為軟件演化。此處包含的軟件的初始開發及維護和更新,直到所需的軟件產品的開發,其滿足預期需求。

在這里插入圖片描述

演化從需求收集過程開始。之后,開發人員創建預期軟件的原型,并將其展示給用戶,以便在軟件產品開發的早期階段獲得他們的反饋意見。用戶提出的建議,在這幾個連續的更新和維護不斷變化太大。這個過程改變了原來的軟件,直到所需的軟件來完成。

即使用戶手中已有所需的軟件,先進的技術和不斷變化的需求迫使軟件產品做出相應的改變。從頭開始重新創建軟件并與需求一對一是不可行的。唯一可行且經濟的解決方案是更新現有的軟件,使其符合最新要求。

軟件演化規律

Lehman 給了軟件演化規律。他把軟件分為三個不同的類別:

S型(靜態型): 這是一款嚴格按照定義的規范和解決方案工作的軟件。解決方法和實現它的方法,都在編碼之前立即被理解。S型軟件至少受到的更高最少,因此這是最簡單的。例如,用于數學計算的計算器程序。
P-型 (實用型): 這是一個程序集合的軟件。這是由程序可以做什么來定義的。在這個軟件中,規范可以描述,但解決方案并不明顯。例如,游戲軟件。
E-型(嵌入型): 該軟件緊密配合實際環境的要求。這種軟件具有高度的進化,因為在現實世界的情況下,法律,稅收等會發生各種變化。例如,網上交易軟件。

E型軟件演化

Lehman 給了八項法律為E型軟件演化:

不斷變化 - E型軟件系統必須不斷適應現實世界的變換,否則它逐漸變得不那么有用。
日益復雜 - 隨著 E 類軟件系統的發展,其復雜性往往會增加,除非進行維護或減少工作。
維護熟悉度 - 必須不惜任何代價保留對軟件的熟悉或關于它是如何開發的、為什么以這種特定方式開發等的知識,以便在系統中實施更改。
持續增長 - 為了使E型系統旨在解決某些業務問題,其實施變化的規模根據業務生活方式的變幻而增長。
降低質量 - 除非嚴格維護并適應不斷變化的操作環境,否則 E 類軟件系統的質量會下降。
反饋系統 - E型軟件系統構成多環回路,多級反饋系統,必須如此對待才能成功修改或改進。
自我調節 - E型系統的演化過程是自我調節,產品分布和過程措施接近正常。
組織穩定性 - 在不斷變化的 E 型系統中,平均有效的全球活動率在產品的整個生命周期內是不變的。

軟件范式

軟件范例參考方法和步驟,在設計的軟件,該軟件被執行。有提出許多方法,并在今天的工作,但我們需要看到在軟件工程這些范式立場。這些可以組合成各種類別,雖然每個這些被包含在彼此:

在這里插入圖片描述

編程模式是軟件設計模式的一個子集是進一步的軟件開發模式的一個子集。

軟件開發范式

這種模式被稱為軟件工程范例,所有有關軟件開發工程的概念被應用。它包括各種研究和需求收集,這有助于軟件產品來構建。

需求收集
設計軟件
編程

軟件設計模式

這一模式是軟件開發的一部分,包括:

設計
維護
編程
編程范式

這一模式是密切相關的軟件開發編程方面。這包括:

編碼測試
整合

軟件工程的需求

軟件工程的需要,因為較高的利率變化的用戶需求及環境上的軟件工作。

大型軟件 - 建造一堵墻比建造房屋或建筑物更容易,同樣,隨著軟件的規模變大,工程必須采取措施為其提供科學的過程。
可擴展性 - 如果軟件過程不是基于科學和工程概念,那么重新創建軟件比擴展現有軟件更容易。
成本 - 由于硬件行業已經展示了它的技能和龐大的制造業,降低了計算機和電子硬件的價格。但是,如果不采用適當的流程,軟件成本仍然很高。
動態性 - 軟件的不斷發展和適應在很大程度上取決于用戶工作的環境。如果軟件的性質總是在變化,則需要在現有軟件中進行新的增強。這就是軟件工程發揮良好作用的地方。
質量管理 - 更好的軟件開發過程提供更好質量的軟件產品。

優秀的軟件特性

一個軟件產品可以判斷通過其功能和多少用戶友好。這個軟件必須滿足以下功能:

操作
過渡
維護

一個精心設計和制作的軟件預計將有以下幾個特點:

操作
這告訴我們如何以及軟件的操作工作。它可以在被測定:

預算
可用性
正確性
功能
可靠性
安全
安全性

過渡

這方面是重要的,當軟件從一個平臺轉移到另一個:

可移植性
互操作性
可重用性
適應性

保養

這講述一個軟件以及如何有能力維護自己的每一個變化的環境中:

模塊化
可維護性
靈活性
可擴展性
總之,軟件工程是計算機科學的一個分支,它使用定義明確的工程概念來產生高效、持久、可擴展、預算內和準時的軟件產品。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62444.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sui 集成 Phantom,生態迎來全新里程碑

作為領先的非托管多鏈加密👛,Phantom 宣布將支持 Sui 區塊鏈。Sui 將加入 Solana、Bitcoin 和 Ethereum 隊伍,成為該 wallet 支持的少數 L1 區塊鏈之一。 此次集成也大幅提升了 Phantom 的互操作性,同時表明 wallet 提供商和應用…

目標跟蹤領域經典論文解析

親愛的小伙伴們😘,在求知的漫漫旅途中,若你對深度學習的奧秘、JAVA 、PYTHON與SAP 的奇妙世界,亦或是讀研論文的撰寫攻略有所探尋🧐,那不妨給我一個小小的關注吧🥰。我會精心籌備,在…

如何解決 java.nio.charset.CoderMalfunctionError: 編碼器故障錯誤問題?親測有效的解決方法!

java.nio.charset.CoderMalfunctionError 是一個在 Java 中相對較少遇到的異常,通常與字符編碼轉換過程中的錯誤有關。當 Java 程序在進行字符編碼轉換時,遇到無法處理的字符或編碼故障時,就會拋出該異常。 1. 問題描述 java.nio.charset.C…

低級爬蟲實現-記錄HCIP云架構考試

因工作需要考HCIP云架構(HCIP-Cloud Service Solution Architect)證書, 特意在淘寶上買了題庫, 考過了。 事后得知自己被坑了, 多花了幾十大洋。 所以想著在授權期內將題庫“爬”下來, 共享給大家。 因為整個過程蠻有…

QGroundControl之5-AppSettings.cc

介紹 應用程序設置 Application Settings ,這里看下語言選擇功能,它是怎么和json文件關聯起來的,剛剛看的時候,很是奇怪這么多的json文件作用。 1.AppSettings.cc 文件怎么和App.SettingsGroup.json關聯 在AppSettings.cc文件沒…

jenkins郵件的配置詳解

Jenkins郵件的配置涉及多個步驟和細節,以下是詳細的配置指南: 一、前期準備 確定郵件服務:明確Jenkins將要使用的郵件服務,如QQ郵箱、163郵箱、公司郵箱(基于Microsoft 365或Exchange Server)等。獲取SMTP配置信息:根據郵件服務類型,獲取相應的SMTP服務器地址、端口號…

【ArcGIS微課1000例】0134:ArcGIS Earth實現二維建筑物的三維完美顯示

文章目錄 一、加載數據二、三維顯示三、三維符號化一、加載數據 加載配套實驗數據(0134.rar中的建筑物,2d或3d都可以),方法如下:點擊添加按鈕。 點擊【Add Files】,在彈出的Open對話框中,選擇建筑物,點擊確定,完成添加。 默認二維顯示: 二、三維顯示 右鍵建筑物圖層…

jupyterlab 增加多個kernel,正確做法

1、背景 需要增加一個kernel然后相當于隔離一個環境 juypterlab Version 3.0.14 2、用conda 安裝 例如,你在conda下有一個python 3.12 的環境 py312 ipython kernel install --user --namepy312 如果保持的話,用pip安裝相應的包就好 3、檢查是否配置好 …

案例-商品列表(組件封裝)

標簽組件封裝 1.雙擊顯示,自動聚焦 2.失去焦點,隱藏輸入框 標簽一列,不同行的標簽內容不同,但是除此之外其他基本一致,所以選擇用 標簽組件 將這一部分封裝為一個組件,需要時組件標簽展示。 首先標簽處一進…

Python 基礎學習(一)

一.基礎語法 注釋 Python中單行注釋以 # 開頭,如下: #!/usr/bin/python3# 第一個注釋 print ("Hello, Python!") # 第二個注釋多行注釋可以用多個 # 號,還有 ‘’’ 和 “”": #!/usr/bin/python3# 第一個注釋…

TIM輸入捕獲---STM

一、簡介 IC輸入捕獲 輸入捕獲模式下,當通道輸入引腳出現指定電平跳變時,當前CNT的值將被鎖存在CCR中,可用于測量PWM波形的頻率、占空比、脈沖間隔、電平持續時間等參數 每個高級定時器和通用定時器都擁有4個輸入捕獲通道 可配置為PWMI模…

【Android Studio】學習——網絡連接

實驗:Android網絡連接 文章目錄 實驗:Android網絡連接[toc]實驗目標和實驗內容:1、掌握Android聯網的基本概念;2、能夠使用URL connection實現網絡連接;3、掌握第三方庫的基本概念4、需實現的具體功能 實驗結果功能說明…

ROS學習筆記二:ROS環境搭建

安裝ubuntu安裝ROS 參考趙虛左老師教程:ROS安裝ROS 快速上手體驗 -使用命令來實現 –創建工作空間: mkdir -p ros_learn_ws/src// ros_learn_ws為自定義空間 cd ros_learn_ws catkin_make –創建ROS功能包并添加依賴 cd src catkin_create_pkg demo_01 r…

5G中什么是ATG網絡?

有人問Air to Ground Networks for NR是怎么回事?這個是R18 NR才引入的。 ATG很多部分和NTN類似中的內容類似。比較明顯不同的是,NTN的RF內容有TS 38.101-5單獨去講,而ATG則會和地面網絡共用某些band,ATG可以工作在N1/N3/N34/N39…

基礎算法--雙指針

兩數之和 點擊:題目鏈接 解法一:暴力解法 時間復雜度:O(N^2) 算法思路:兩層for循環即可列出所有兩個數字的組合,判斷是否等于目標值 算法流程: 兩層 for 循環: 外層 for 循環依次枚舉第?個…

什么是Linux系統架構?

? Linux系統架構是指Linux操作系統的整體結構和工作層次,它定義了系統組件如何交互、如何管理硬件資源,以及用戶如何通過不同的層次與系統進行交互。Linux架構通常有兩種劃分方法:系統層次架構和功能層次架構,兩者都可以很好地描…

spring6:4、原理-手寫IoC

目錄 4、原理-手寫IoC4.1、回顧Java反射4.2、實現Spring的IoC 4、原理-手寫IoC 我們都知道,Spring框架的IOC是基于Java反射機制實現的,下面我們先回顧一下java反射。 4.1、回顧Java反射 Java反射機制是在運行狀態中,對于任意一個類&#x…

不是“我應該做什么”,而是“我想做什么”

1. 識別內心的渴望 首先,我們需要識別自己真正的愿望和激情所在。這可能需要一些時間和自我反思。問自己:在沒有任何外界壓力的情況下,我真正想做的是什么?是賺錢、生活、旅行、追星,還是其他什么?識別這些…

30天學會Go--第7天 GO語言 Redis 學習與實踐

30天學會Go–第7天 GO語言 Redis 學習與實踐 文章目錄 30天學會Go--第7天 GO語言 Redis 學習與實踐前言一、Redis 基礎知識1.1 Redis 的核心特性1.2 Redis 常見使用場景 二、安裝 Redis2.1 在 Linux 上安裝2.2 在 Windows 上安裝2.3 使用 Docker 安裝 Redis 三、Redis 常用命令…

Vue項目開發 如何實現父組件與子組件數據間的雙向綁定?

在 Vue.js 中,實現父組件與子組件數據之間的雙向綁定,可以通過以下幾種方式。下面我將介紹幾種常見的方法,并解釋它們的實現原理和適用場景。 1. 使用 v-model 實現雙向綁定 v-model 是 Vue.js 中最常見的雙向綁定方式,它可以使…