type
status
date
slug
summary
tags
category
icon
password
💡
本篇软件工程基础部分主要写了以前常用的一些软件开发方法及其相关模型,但是对于最新的一些方法并未详细论述。

软件工程基础


1 相关概念

什么是软件?

  • 软件:是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据机器相关文档的完整集合。
  • 程序:是按事先设计的功能和新嫩个要求执行的指令序列。
  • 数据:是使程序能正常操纵信息的数据结构。
  • 文档:是与程序开发,维护和使用有关的图文材料。
  • 注:软件!=程序
 

软件的特点

  • 软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性。
  • 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程。
  • 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
 

软件危机

  • 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
  • 软件危机产生的原因
    • 客观原因:软件的特点
    • 主观方法:软件开发和维护过程中使用不正确的方法
 

软件工程的定义

  • 概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它
 

软件生存期

  • 软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为软件的生存期。
  • 软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。
 

软件工程三要素

  • 方法
  • 工具
  • 过程
 

2 软件生存期模型

软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

2.1 瀑布模型

notion image
优点:
  • 阶段见具有顺序性和依赖性
  • 推迟实现的观点(推迟程序的物理实现)
  • 质量保障的观点(文档驱动)
缺点:
  • 模型缺乏灵活性
  • 开发过程一般不能逆转,否则代价太大
  • 规格说明很难理解(开发风险大)
  • 软件的实际情况必须到项目开发的后期客户才能看到(文档驱动的两面性)
使用范围
  • 在项目开始前,项目的需求已经被很好地理解,也很明确,而且项目经理很熟悉为实现这一模型所需要的过程。
  • 解决方案在项目开始前也很明确。
  • 短期项目可以采用瀑布模型。
 

2.2 演化模型(快速原型模型)

  • 由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次。
  • 第一次只是试验开发,其目标只是在于探索可行性,弄清软件需求。
  • 第二次则在此基础上获得较为满意的软件产品。
notion image
 

2.3 增量模型

  • 也称:渐增模型。增量模型采用随时间的线性序列,每一个线性序列产生一个可交付的产品,慢慢的迭代以达到最终的要求。
notion image
优点:
  • 每个阶段交付一个可用的产品
  • 减少一个全新产品给客户带来的心理上的影响
  • 分阶段地交付产品不需要大的资金支出
  • 需求经常变化,增量模型的灵活性使其具有更加优越的适用性
缺点:
  • 需要一个开放的结构,方便构件的加入
  • 增量模型本身就是一个矛盾的名词
 

2.4 螺旋模型

notion image
优点:
  • 容易确定什么时候已经对某一阶段的产品充分测试完毕
  • 维护和开发之间没有什么本质上的差别
缺点:
  • 仅适合于大型软件
  • 风险驱动既是优点也是缺点
 

2.5 喷泉模型

notion image
  • 迭代:重复、演进
  • 无间隙:各阶段无明显界限
 

3 软件开发方法

notion image

3.1 结构化方法

结构化方法由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。
即面向过程的开发方法。其基本思想是“自上而下,逐步求精”,把一个复杂的系统拆分,化繁为简,形成一个个的构件。其讲究的是用户至上,系统开发过程工程化、文档化、以及标准化。严格的区分来工作阶段,每个阶段都有明确的任务和应得额成果。

3.2 面向数据结构方法(Jackson方法)

面向数据结构方法是结构化方法的变形,它着重数据结构而不是数据流。
JSP(JacksonStructure Programming)方法是以数据结构为驱动的,适合于小规模的项目。JSP方法首先描述问题的输入/输出数据结构,分析其对应性,然后推出相应的程序结构,从而给问题的软件过程描述。
JSD方法是JSP方法的扩展,是一个完整的系统开发方法。首先建立现实世界的模型,再确定系统的功能需求,对需求的描述特别强调操作之间的时序性。它是以事件作为驱动的,是一种基于进程的开发方法,所以适用于时序特别较强的系统,包括数据处理系统和一些实时控制系统。

3.3 面向对象方法

面向对象的开发方法是自底而上的,主要表现为和现实事物结合起来,把世间万物抽象出来,形成一个个的抽象对象。相比结构化法有更好的复用性,分析、设计、实现三个阶段界限不明确,其关键点在于建立一个全面的、合理的、统一的模型。
  • 面向对象方法包括面向对象分析、面向对象设计和面向对象实现。
    • OOP(面向对象编程) —> OOD(设计)+DDA(分析) —> OOM
  • UML是面向对象的标准建模语言,通过统一的语义和符号表示,使各种方法的建模过程和表示统一起来,现已成为面向对象建模的工业标准。

3.4 面向服务方法

面向服务方法是面向对象法法的延伸。其服务建模又分为服务发现(分析)、服务规约(约定规范)、和服务实现(具体实现)三个阶段。 SO方法主要有三个级别(操作、服务、业务流程); SOAD分为三个层次:基础设计层(底层的构建)、应用服务层(服务之间的接口和服务级的协调)、业务组织层(业务流程的建模和服务流程的编排)

3.5 原型法

原型方法比较适合于用户需求不清、需求经常变化的情况。当系统规模不是很大也不太复杂时,采用该方法比较好。
抛弃型原型:业务做完之后原型就已经没有用处了;
演变型模型:在原来的模型基础之上逐步修改并一直沿用;

📎 参考文章

 
💡
有关问题,欢迎您在底部评论区留言,一起交流~
DeepSeek本地部署编译原理:概述
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
DeepSeek本地部署
2025-3-7
React Native
2025-3-7
低代码开发平台介绍
2025-3-7
编译原理:文法和语言
2025-3-7
OpenHarmony应用开发准备
2025-3-7
软件工程: 软件设计基础
2025-3-6
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏