目次
1. 一般的なソフトウェア開発ライフサイクル モデルには次のものが含まれます。
序文
ソフトウェアエンジニアリングの実践とは、ソフトウェアエンジニアリングの知識と技術を実際の業務に適用するプロセスを指します。これには、ソフトウェアの開発、テスト、保守および管理の作業が含まれます。ソフトウェアエンジニアリングの実践と理論は相互に連携しており、前者は実践を通じて理論を検証し、後者は実践への指導とサポートを提供します。ソフトウェア エンジニアリングの実践では、プロジェクト管理、プログラミング、品質保証、構成管理、テスト、要件分析などの多くの側面を考慮する必要があります。これらの側面には、アジャイル開発、オブジェクト指向設計、ソフトウェア テスト、継続的インテグレーションなどのソフトウェア エンジニアリングの基本原則、方法、テクノロジが含まれます。ソフトウェアエンジニアリングの実践では、ソフトウェアの品質向上、開発効率の向上、開発コストの削減という目的を達成するために、開発者は継続的な実践と経験の蓄積を通じて、作業プロセスや手法を継続的に最適化および改善することが求められます。
ソフトウェア開発ライフ サイクル モデル
ソフトウェア開発ライフ サイクル モデルとは、ソフトウェア開発プロセスをさまざまな段階とアクティビティに分割し、これらの段階とアクティビティを完全かつ秩序立ったプロセスに結合してソフトウェア開発プロセスを標準化するモデルを指します。
1. 一般的なソフトウェア開発ライフサイクル モデルには次のものが含まれます。
ウォーターフォール モデル: 順次実行。各ステージは次のステージに入る前に完了します。
反復モデル: ウォーターフォール モデルに似ていますが、各段階で複数の反復が実行され、各反復で新しい機能が追加されます。
インクリメンタル モデル: 複数の反復に分割され、各反復では機能の一部のみが完了し、各反復が完全な成果物となります。
スパイラル モデル: サイクルに基づいて、各サイクルは計画、リスク評価、実行、評価の 4 つのフェーズで構成されます。
アジャイル モデル: 迅速な反復と柔軟性を重視し、顧客との緊密なコラボレーションを促進します。
どのモデルを選択するかは、特定のプロジェクトのニーズ、時間、人員、リソースなどの要素に基づいて総合的に検討する必要があります。
要件分析と仕様
要件分析とは、システムがどのような機能や性能特性を持つべきかを決定するために、ユーザーのニーズを分析および理解することを指します。これはソフトウェア エンジニアリングの重要な段階の 1 つであり、その主な目的は、システムが何をすべきかを決定し、開発者に開発ガイダンスを提供し、開発プロセスの無駄や冗長性を回避することです。要件分析の結果は、システム機能、パフォーマンス、インターフェイス、データ、セキュリティ、その他の側面の要件を含む、ユーザーのニーズを詳細に記述した要件仕様となります。
仕様は、ソフトウェア システムの要件と設計を詳細に説明する文書または仕様です。システムの機能、パフォーマンス、インターフェイス、データ、セキュリティなどの要件が含まれており、ソフトウェア開発の基礎となります。仕様の主な機能は、システム開発の詳細かつ包括的なガイダンスと評価の基礎を提供することにより、開発プロセスにおけるエラーや逸脱を回避し、システムのメンテナンスとアップグレードを容易にすることです。
ソフトウェア開発において要求分析と仕様策定は欠かすことのできない作業であり、ユーザーのニーズを十分に理解してこそ、ユーザーに満足していただけるソフトウェア製品を提供することができます。同時に、仕様は開発者とユーザーの間の架け橋であり、両者間のコミュニケーションと協力を明確にし、ソフトウェア開発プロセスをよりスムーズかつ効率的にすることができます。
ソフトウェア設計とアーキテクチャ
ソフトウェア設計とは、ソフトウェアシステム要件を決定した後、その要件に基づいてソフトウェアシステム全体の構造、構成、インターフェース、機能、動作、実装技術などを設計するプロセスを指します。ソフトウェア アーキテクチャとは、ソフトウェア システムの構造と構成を指し、ソフトウェア設計の中核であり、ソフトウェア システムのパフォーマンス、保守性、拡張性などの重要な機能を決定します。ソフトウェアの設計やアーキテクチャでは、ソフトウェアの性能、安全性、信頼性などを満たすために、さまざまな機能を合理的にモジュールに分割する方法、インターフェースを設計する方法、データ構造やアルゴリズムをどのように設計するかなどを検討する必要があります。ソフトウェア システムの要件。同時に、将来変更やアップグレードが必要になったときに迅速かつ安全に実装できるように、設計およびアーキテクチャの段階でソフトウェア システムの保守性と拡張性も考慮する必要があります。
コーディングとデバッグ
コーディングとデバッグは、ソフトウェア開発プロセスの 2 つの重要な側面です。コーディングとは、設計書を実際のプログラムコードに変換するプロセスを指します。開発者はプログラミング言語を使用して、要件と機能仕様に基づいてソフトウェア アプリケーションを作成します。
デバッグとは、プログラム開発中にコード内のエラーや障害を発見し、これらの問題を修復するプロセスを指します。デバッグは非常に重要かつ必要なプロセスであり、開発者はコードを注意深く分析し、実行プロセスを段階的に検査してエラーやバグを特定する必要があります。
コーディングとデバッグの間には密接な関係があります。コーディングの際、開発者はコード内で発生する可能性のある問題を慎重に検討し、可能な限りベスト プラクティスを使用してこれらの問題を回避する必要があります。しかし、優秀な開発者でもすべての間違いを避けることはできないため、デバッグは非常に重要です。デバッグは、開発者がコード内のエラーを見つけて修正し、ソフトウェアが適切に機能することを確認するのに役立ちます。
要約すると、コーディングとデバッグは、ソフトウェア開発プロセスにおいて切り離せない 2 つの側面です。コーディングとデバッグ中に技術とツールを合理的に使用することによってのみ、ソフトウェア開発の効率、信頼性、品質を確保できます。
ソフトウェア テストと品質保証
ソフトウェア テストは、ソフトウェアの欠陥やエラーを発見して報告し、ソフトウェアが指定された品質要件を満たしていることを確認します。これはソフトウェア開発プロセスにおいて非常に重要なリンクであり、ソフトウェアの信頼性、可用性、安定性およびその他の側面が完全に保証されることを保証します。
ソフトウェア品質保証は、ソフトウェア全体の品質を保証することを目的とした総合的な作業です。これには、ソフトウェアが予定通りに配信され、ユーザーのニーズを満たし、期待される品質を達成できることを保証するために、ソフトウェア開発プロセスのあらゆる側面を監視および管理することが含まれます。
ソフトウェアのテストと品質保証の主な目的は、ソフトウェア製品の品質を保証し、ソフトウェアの信頼性と安定性を向上させ、ソフトウェアの欠陥や障害を減らし、それによってユーザーの満足度と信頼を向上させることです。
構成管理とバージョン管理
構成管理は、ソース コード、ドキュメント、コンパイラ、リンカー、その他のツールなど、ソフトウェア開発プロセスで使用されるさまざまな要素を追跡するシステムです。これにより、これらの要素が最新の状態になり、要素間の関係と依存関係が正しく維持されることが保証されます。
バージョン管理は、ソース コードまたはファイルの各バージョンの変更を記録するシステムであり、開発者が古いバージョンにロールバックしてコード変更の履歴を追跡できるようにします。これは、コードの一貫性とトレーサビリティを確保しながら、チームの共同作業を支援します。
これら 2 つの概念は、しばしば一緒に使用されます。ソフトウェア開発プロセスでは、バージョン管理はコードやその他のファイルの変更と共同作業を管理するために使用され、構成管理はソフトウェア開発プロセスで使用されるすべての要素を管理するために使用されます。
プロジェクト管理とチーム コラボレーション
プロジェクト管理では、プロジェクトの目標を達成するためにチーム メンバーの能力とリソースを統合する必要があるため、プロジェクト管理とチーム コラボレーションは密接に関連する概念です。プロジェクト管理とチームのコラボレーションに関してよくある質問とアドバイスをいくつか紹介します。
1. チームメンバー間のコミュニケーションを維持するにはどうすればよいですか?
推奨事項: Slack、Microsoft Teams、Zoom などのオンライン コラボレーション ツールを使用して、メンバー間のリアルタイムのコミュニケーションを促進します。定期的に会議を開催し、明確な仕事の取り決め、責任、プロジェクトのマイルストーンを決定し、各メンバーが自分の職務責任とタスクについて明確であることを確認し、プロジェクトの進捗状況を監視します。
2. チームメンバーの協力を確保するにはどうすればよいですか?
推奨事項: チームのコラボレーションを促進する最良の方法の 1 つは、チーム メンバー間に良好な関係と信頼を構築することです。定期的なグループ活動、部門を超えた会議、チームビルディング活動などはすべて、チームの精神を向上させるための良い方法です。
3. チーム内の衝突の可能性がある場合はどう対処すればよいですか?
推奨事項: チームの問題を特定して解決するための最良の方法の 1 つは、問題の種類に合わせてアプローチを調整することです。コミュニケーション、交渉、妥協、折り合いなどの競合解決テクニックを使用して、チームメンバー間の競合を最小限に抑え、解決します。
4. チームメンバーの仕事のパフォーマンスをどのように監視し、評価するか?
推奨事項: チームメンバーがタスクと職務責任をタイムリーに完了できるように、作業パフォーマンスを定期的にレビューします。メンバーの個人的な成長とチームワークを促進するために、肯定的なフィードバックや提案を提供します。プロジェクトの最後に要約と評価を作成し、今後のプロジェクトの参考にします。
2. 要件分析
システム要件: システムが実行/サポートする必要があるすべてのアクティビティと満たさなければならない制約です。通常は、機能要件と非機能要件に分けられます。
機能要件: システムが実行する必要があるアクティビティ。給与管理システムを例にとると、電子支払い、賃金計算、給与税計算、従業員関連情報の保守、社会保障、医療保険、積立金の支払いなどが含まれます。
機能要件は、企業の取引を行うためのプロセスとビジネス ルールに基づいて決定されます。これらのルールは十分に文書化されており、簡単に識別および説明される場合もありますが、他のルールは隠蔽されており、検出が困難な場合もあります。このようなルールをできるだけ早く発見することは、要件分析の重要なタスクです。
非機能要件: システムが実行またはサポートする必要があるアクティビティとは異なる、システム固有の特性です。機能要件と非機能要件を区別するのは簡単ではありません。FURPS+ アーキテクチャ (機能、可用性、信頼性、パフォーマンス、サポート性の頭字語) など、要件を特定して分類するためにいくつかのアーキテクチャが開発されています。
3. ソフトウェアのセキュリティと機密性
ソフトウェアには企業、政府機関、個人の機密情報が含まれるため、ソフトウェアのセキュリティと機密性は非常に重要です。ソフトウェアのセキュリティとは、ソフトウェアが攻撃に対して脆弱ではなく、ハッカーやマルウェアによって簡単に悪用されず、ユーザーの個人情報が漏洩しないことを意味します。機密性とは、許可された担当者のみがソフトウェアにアクセスして使用できることを意味します。
ソフトウェアのセキュリティと機密性を確保するには、一連のセキュリティ対策を講じる必要があります。一般的なセキュリティ対策は次のとおりです。
暗号化: 暗号化アルゴリズムを使用して機密データを暗号化し、データ漏洩を防ぎます。
認証と認可: 認証および認可されたユーザーのみがソフトウェアにアクセスできます。
安全なコーディング: コーディングのベスト プラクティスと仕様に従って、ソフトウェアの機能とセキュリティを確保します。
セキュリティ テスト: 定期的にセキュリティ テストを実施し、潜在的な脆弱性やセキュリティ上の問題を特定します。
セキュリティ アップデート: 既知のセキュリティの脆弱性や欠陥に対処するために、ソフトウェアとシステムをタイムリーにアップデートします。
セキュリティ意識のトレーニング: 従業員にソフトウェアのセキュリティと機密性に関するトレーニングを提供し、セキュリティ意識と予防能力を向上させます。
ソフトウェアのセキュリティと機密保持はどの組織にとっても非常に重要であるため、仕事の一部として考慮し、必要に応じて適切な注意とリソースを受ける必要があります。
4. ソフトウェアエンジニアリングの課題と将来
1. 複雑さ
ソフトウェア システムの複雑さは、ソフトウェア エンジニアリングの主な課題の 1 つです。ソフトウェア システムのサイズが大きくなるにつれて、その複雑さは増大し続けています。そのため、開発チームはこれらの課題に対処するために、人工知能や機械学習など、より複雑で高度なテクノロジーを採用する必要があります。
2. セキュリティ
インターネットの急速な発展とデジタル化に伴い、ソフトウェア システムのセキュリティがますます重要な問題となっています。開発チームは、安全なコーディング手法や暗号化技術などのセキュリティのベスト プラクティスを使用して、ソフトウェア システムのセキュリティを確保する必要があります。
3. 自動化
テクノロジーの進歩と発展に伴い、自動化はソフトウェア エンジニアリングのトレンドになっています。自動化により、ソフトウェア システムの効率と品質が向上し、開発チームの作業負荷が軽減されます。自動化には、自動テスト、自動展開、自動メンテナンスなどが含まれます。
将来のソフトウェアエンジニアリングでは、自動化と人工知能技術の応用にますます注目が集まるでしょう。人工知能テクノロジーが発展するにつれて、開発チームはより高度なテクノロジーを使用してソフトウェア システムを開発および保守できるようになります。同時に、ソフトウェア エンジニアリングは、増大するニーズや課題に対応するために成長し、進化し続けます。
5. プロジェクトの準備
新しいプロジェクトを作成する
Mavenの準備
6. ニュースプロジェクトコードのデモ
<template>
<div id="tab-bar">
<tab-bar-item path="/home">
<i slot="item-icon-active" class="el-icon-message-solid" />
<i slot="item-icon" class="el-icon-bell" />
<div slot="item-text">首页</div>
</tab-bar-item>
<tab-bar-item path="/my">
<i slot="item-icon-active" class="el-icon-user-solid" />
<i slot="item-icon" class="el-icon-user" />
<div slot="item-text">我的</div>
</tab-bar-item>
</div>
</template>
<script>
import TabBarItem from '@/components/TabBar/tabBarItem'
export default {
name: 'TabBar',
components: { TabBarItem },
data() {
return {
}
},
methods: {
}
}
</script>
<style>
#tab-bar {
display: flex;
background-color: #f6f6f6;
position: fixed;
left: 0;
right: 0;
bottom: 0;
box-shadow: 0 -1px 1px rgba(100, 100, 100, 0.08);
}
</style>
<template>
<div class="tab-bar-item" @click="itemClick">
<div v-if="!isActive">
<slot name="item-icon" />
</div>
<div v-else>
<slot name="item-icon-active" />
</div>
<div><slot name="item-text" /></div>
</div>
</template>
<script>
export default {
name: 'TabBarItem',
props: {
path: {
type: String,
default: ''
}
},
data() {
return {
}
},
computed: {
// 判断当前条目是否被选中
isActive() {
return !this.$route.path.indexOf(this.path)
}
},
methods: {
// 跳转路由
itemClick() {
this.$router.replace(this.path)
}
}
}
</script>
<style>
.tab-bar-item {
display: flex;
flex: 1;
justify-content: center;
text-align: center;
height: 49px;
line-height: 49px;
cursor: pointer;
}
</style>
js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export const constantRoutes = [
{
path: '',
redirect: '/home'
},
{
path: '/home',
component: () => import('@/views/news/home'),
meta: {
keepAlive: true
}
},
{
path: '/news',
component: () => import('@/views/news/news')
},
{
path: '/my',
component: () => import('@/views/news/my')
},
{
path: '/register',
component: () => import('@/views/news/register')
},
{
path: '/list',
component: () => import('@/views/news/list')
},
{
path: '/401',
component: () => import('@/views/401'),
hidden: true
},
{
path: '/404',
component: () => import('@/views/404'),
hidden: true
}
]
const createRouter = () => new Router({
mode: 'history', // require service support
// scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
})
export const router = createRouter()
// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
export function resetRouter() {
const newRouter = createRouter()
router.matcher = newRouter.matcher // reset router
}
export default router
const my = {
state: {
// 存储浏览历史
histroy: [],
// 存储我的收藏
favourite: [],
// 是否已登录
logined: false
},
mutations: {
SET_HISTROY: (state, histroy) => {
state.histroy.unshift({ createTime: new Date(), histroy: histroy })
},
SET_FAVOURITE: (state, favourite) => {
state.favourite.unshift(favourite)
},
SET_LOGIN: (state, login) => {
state.logined = login
}
},
actions: {
setHistroy({ commit }, histroy) {
return new Promise(resolve => {
commit('SET_HISTROY', histroy)
})
},
setFavourite({ commit }, favourite) {
return new Promise(resolve => {
commit('SET_FAVOURITE', favourite)
})
},
setLogin({ commit }, login) {
return new Promise(resolve => {
commit('SET_LOGIN', login)
})
}
}
}
export default my
要約する
ソフトウェア エンジニアリングは、ソフトウェア生産のあらゆる側面に関わる工学分野であり、
ソフトウェア製品にはプログラムだけでなく関連ドキュメントも含まれます。ソフトウェア製品の基本的な特性は、保守性、信頼性、情報セキュリティ、効率性、受け入れやすさです。
ソフトウェア プロセスには、ソフトウェア製品の開発に関わるすべての活動が含まれます。ソフトウェアプロセスの活動には主に、ソフトウェアの記述、開発、効果的な検証と進化が含まれます。
ソフトウェアエンジニアリングの基本概念は、あらゆるタイプのシステム開発に普遍的に適用できます。これらの基本概念には、ソフトウェア プロセス、信頼性、情報セキュリティ、要件、再利用が含まれます。
世の中にはたくさんの種類のシステムがあります。それぞれのタイプのシステムの開発には、適切なソフトウェア エンジニアリング ツールと技術が必要です。普遍的な魔法のソフトウェア設計および実装テクニックはほとんどありません。
ソフトウェア エンジニアリングの基本的な考え方は、すべてのソフトウェア システムに当てはまります。これらの基本的な考え方には、管理されたソフトウェア プロセス、ソフトウェアの信頼性と情報セキュリティ、要件エンジニアリング、ソフトウェアの再利用が含まれます。
ソフトウェア エンジニアはソフトウェア エンジニアリング業界と社会全体に対して責任を負っており、技術的な問題だけを気にする必要はありません。
専門家協会が発行する行動規範は、協会のメンバーが遵守することが期待される一連の行動基準を定めています。