【软考---系统架构设计师】软件工程

目录

一、软件开发模型

(1)瀑布模型

(2)原型模型

(3)螺旋模型

(4)V模型

(5)构件组装模型

(6)迭代模型

(7)增量模型

(8)快速应用开发模型(RAD)

(9)统一过程(UP/RUP)

(10)敏捷方法

二、软件开发方法

三、需求工程

(1)需求获取

(2)需求分析

(3)需求定义

四、软件系统建模

(1)人机界面设计

 (2)结构化设计

         (3)面向对象设计

五、软件测试


一、软件开发模型

(1)瀑布模型

是一种典型的结构化开发方法的体现。

特点:严格区分阶段,每个阶段因果关系紧密相连,只适合需求明确的项目

缺点:软件需求完整性,正确定难确定;严格串行化,很长时间才能看到结果;

(2)原型模型

适合需求不明确的项目

从原型的最终结果来看分为抛弃型原型和演化型原型

(3)螺旋模型

以快速原型为基础(在原型模型的基础上)+瀑布模型,考虑了风险问题。

(4)V模型

测试贯穿始终,测试分阶段。测试计划提前

(5)构件组装模型

使用构件库

优点:易扩展,易重用,降低成本,安排任务更灵活。

缺点:构件设计要求经验丰富的架构师,设计不好的构件难重用,第三方构件质量难控制。

(6)迭代模型

迭代模型适用于项目事先不能完整定义产品所有需求、计划多期开发的软件开发

它将整个开发过程分为多个迭代周期,每个迭代周期都包含需求分析、设计、编码、测试和部署等阶段。每个迭代周期都会产生一个可工作的软件版本,通过不断迭代的方式逐步完善软件。

迭代模型的主要特点包括:

  1. 需求逐步明确:在每个迭代周期开始时,只需明确当前迭代周期的需求,而不需要完整的需求文档。
  2. 快速反馈:每个迭代周期都会产生一个可工作的软件版本,可以及时获取用户反馈,从而及时调整和改进软件。
  3. 高度灵活:迭代模型可以根据实际情况进行调整和变更,适应需求变化和技术变革。
  4. 风险控制:通过每个迭代周期的测试和验证,可以及时发现和解决问题,降低项目风险。

(7)增量模型

融合了瀑布模型的基本成分和原型实现的迭代特征,增量模型是在一个基础版本上不断的增加

它将软件系统的开发过程分为多个增量阶段,每个阶段都会增加新的功能或特性。在每个增量阶段中,开发团队会先完成一个可用的、经过测试的子系统或模块,然后再逐步添加新的功能。

(8)快速应用开发模型(RAD)

快速应用开发(RAD)模型是一个增量型的软件开发过程模型,强调极短的开发周期。RAD模型是瀑布模型的一个高速变种,通过大量使用可复用构件,采用基于构件的建造方法赢得快速开发(也就是简单的事瀑布模型和构建组装模型的结合)。

基本流程:

(1)业务建模

(2)数据建模

(3)过程建模

(4)应用生成

(5)测试与交付

(9)统一过程(UP/RUP)

是一个通用过程框架,可以用于种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,软件系统建模时,UP使用的是UML。与其他软件过程相比,UP具有三个显著的特点:

  • 用例驱动
  • 以体系结构为中心
  • 迭代和增量

四个阶段:

(1)初始:定义最终产品视图和业务模型,确定系统范围

(2)细化:设计及确定系统结构

(3)构造:开发剩余构件和应用程序功能,把这些构件集成为产品,并进行详细测试

(4)移交:确保软件对最终用户是可用的,进行(贝塔测试---符号不会打),制作产品发行版本

(10)敏捷方法

适应性的,以人为本,增量迭代,小步快跑,适合小型项目。

常见的敏捷开发方法:

(1)(极限编程)XP:四大价值观——沟通,简单,反馈,勇气

(2)水晶方法:提倡机动性的方法,拥有对不同类型项目有非常有效的敏捷过程

(3)SCRUM:侧重于项目管理

(4)特征驱动开发方法(FDD):认为有效的软件开发需要三要素【人,过程,技术】。定义了六中关键的项目角色:项目经理,首席架构设计师,开发经理,主程序员,程序员和领域专家

二、软件开发方法

结构化法:用户至上,严格区分各阶段,每阶段有任务和成功,自顶向下,逐步分解(求精)


原型法:适用于需求不明确的开发,包括抛弃型原型和进化型原型


面向对象法:更好的复用性,关键在于建立一个全面,合理,统一的模型;分析,设计,实现三个阶段接线不明确


面向服务的方法:面向服务的方法(Service-Oriented Architecture,SOA)是一种软件开发方法,它将软件系统划分为一组相互独立且可重用的服务。每个服务代表一个特定的业务功能,并通过网络进行通信,以实现系统的整体功能。

每个服务都是独立的,可以独立开发,每个服务之间通过标准化的接口进行通信,彼此之间没有强依赖关系。这样可以降低系统的耦合度,提高系统的可扩展性。

逆向工程

主要考四个层级

实现级:包括程序的抽象语法树,符号表,过程的设计表示

结构级:包括反应程序分量之间相互依赖关系的信息,例如调用图,结构图,程序和数据结构

功能级:包括反映程序段功能及程序段之间的关系的信息,例如数据和控制流模型

领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应的关系,例如实体关系模型

净室软件工程

净室即无尘室,洁净室。也就是一个受控污染级别的环境。

使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。

使用统计的测试来获取认证被交付的软件的可靠所必需的出错率信息。

技术手段:

控制迭代,定义三种抽象层次:行为视图(黑盒)->有限状态机视图(状态盒)->过程视图(明盒)

正确性验证:净室软件工程的核心

缺点:

太理论化,正确性验证的步骤比较困难且耗时。而且开发小组不进行传统的模块测试这是不现实的

三、需求工程

(1)需求获取

软件需求分层分为:

(1)业务需求

(2)用户需求

(3)系统需求

按照项目管理分为

(1)基本需求

(2)期望需求

(3)兴奋需求

获取方法:

(1)用户面谈

(2)需求专题讨论会

(3)问卷调查

(4)现场观察

(5)原型化方法

(6)头脑风暴法

(2)需求分析

结构化需求分析-SA

UML基本概念

UML4+1视图

(3)需求定义

严格定义法:

所有需求都能够被预先定义

开发人员与用户之间能够准确而清晰地交流

采用图形/文字可以充分体现最终系统

原型法:

并非所有的需求都能在开发前被准确的说明

项目参加者之间通常都存在交流上的困难

需要实际的,可供用户参与的系统模型

有合适的系统开发环境

反复是完全需要和值得提倡的,需求一旦确定,就应该遵从严格的方法

(4)需求验证

需求跟踪

需求管理

需求管理是一个对系统需求变更、了解和控制的过程,包括变更控制版本控制需求跟踪等活动

需求变更管理过程为:识别出问题问题分析和变更描述变更分析和成本计算变更实现修改后的需求

四、软件系统建模

(1)结构化建模方法
是以过程为中心的技术,可用于分析一个现有的系统以及定义新系统的业务需求。
结构化建模方法所绘制的模型称为数据流图(DFD)。对于流程较为稳定的系统可考虑结构化建模方法
(2)信息工程建模法(或数据库建模方法)
信息工程建模方法是一种以数据为中心,但过程敏感的技术,他强调在分析和研究过程需求之前,首先研究和分析数据需求。信息工程建模方法所创建的模型被称之为实体联系图(E-R图)。主要用于数据建模。
(3)面向对象建模方法
面向对象建模方法将“数据”和“过程”集成到被称为“对象”的结构中,消除了数据和过程的认为分离现象。面向对象建模方法所创建的模型被称之为对象模型。随着面向对象技术的不断发展和应用,形成了面向对象的建模标准,即UML(统一建模语言)。UML定义了几种不同类型的模型图,这些模型图以对象的形式共建一个信息系统或应用系统。目前比较常用的建模方法

(1)人机界面设计

黄金三法则

(1)置于用户控制之下

以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式

提供灵活的交互

允许用户交互可以被中断和撤销

当技能级别增加时可以使交互流水化并允许定制交互

使用户隔离内部技术细节

设计应允用户和出现在屏幕闪的对象直接交互

(2)减少用户的记忆负担

减少对短期记忆的要求

建立有意义的缺省

定义直觉性的捷径

界面的视觉布局应该基于真实世界的隐喻

以不断进展的方式揭示信息

(3)保持界面的一致性

允许用户将当前任务放入有意义的语境

在用户系列内保持一致性

如过去的交互模型已建立了用户期望,除非有迫不得已的理由,不要改变他。

 (2)结构化设计

概要设计(外部设计):功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图

详细设计(内部设计):为每个具体任务选择适当的技术手段和处理方法

结构化设计原则

(1)模块独立性原则(高内聚,低耦合)

(2)保持模块的大小适中

(3)多扇入,少扇出

(4)深度和宽度均不宜过高

结构化设计(内聚)

内聚类型 描述
功能内聚 完成一个单一功能,各个部分协同工作,缺一不可
顺序内聚

处理元素相关,而且必须顺序执行        

通信内聚 所有处理元素集中在一个数据结构的区域上
过程内聚 处理元素相关,而且必须按特定的次序执行

时间内聚

(顺时内聚)

所包含的任务必须在同一时间间隔内执行
逻辑内聚 完后逻辑上相关的一组任务

偶然内聚

(巧合内聚)

完成一组没有关系或松散关系的任务

结构化设计(耦合)

耦合类型 描述
非直接耦合 两个模块之间没有直接关系,他们之间的联系完全是通过主模块的控制和调用来实现的
数据耦合 一组模块借助参数表传递简单数据
标记耦合 一组模块通过参数表传递记录信息(数据结构)
控制耦合 模块之间传递的信息中包含用于控制模块内部逻辑的信息
外部耦合 一组模块都访问统一全局简单变量,而且不是通过参数表传递该全局变量的信息
公共耦合 多个模块都访问同一个公共数据环境
内容耦合 一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口

结构化设计(模块四要素)

输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那取得输入,进行加工后再把输出返回调用者

处理功能:指模块把输入转换成输出所做的工作

内部数据:指仅供该模块本身引用的数据

程序代码:指用来实现模块功能的程序

(3)面向对象设计

类的分类

边界类

控制类

实体类

基本过程

面向对象设计原则

单一职责原则:设计目的单一的类

开放-封闭原则:对扩展开发,对修改封闭

李氏替换原则:子类可以替换父类

依赖倒置原则:要依赖于抽象,而不是具体实现,针对接口编程,不要针对实现编程

接口隔离原则:使用多个专门的接口比使用单一的总接口要好

组合重用原则:要尽量使用组合,而不是继承关系达到重用目的

迪米特原则:一个对象应当对其他对象有尽可能少的了解

五、软件测试

1、根据程序执行状态可分为:静态测试(ST)(纯手工不依赖于计算机)和动态测试(DT)。

2、根据是否关注具体实现和内部结构可分为:黑盒测试、白盒测试(可以看到内部结构)和灰盒测试。

3、根据程序执行的方式来分类可分为:人工测试(MT)和自动化测试(AT)。

4、从阶段上划分,软件测试可以分为:单元测试、集成测试、系统测试和验收测试。

5、软件调试和测试的区别:测试的目的是找出存在的错误,而调试的目的是定位错误并修改程序以修正错误

六、软件项目管理

1、软件进度管理一般包括活动定义活动排序活动资源估计活动历时估计制定进度计划进度控制 6 个过程。

2、任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式来展示和管理项目活动。

3、软件配置管理(SCM)是一种标识、组织和控制修改的技术。SCM 的目的是:使错误降为最小并最有效地提高生产效率。SCM 的核心内容包括版本控制和变更控制。

4、软件质量保证(SQA)的目的是:使软件过程对于管理人员来说是可见的。SQA 的主要任务是:
● SQA 审计与评审,包括对软件工作产品、软件工具和设备的审计,评审开发组的行为符合预定的过程。
● SQA 报告。
● 处理不符合问题。

5、软件风险管理的主要目标是预防风险应对发生的风险

相关推荐

  1. - 软件架构设计师 - 架构风格

    2024-04-04 20:38:05       24 阅读
  2. 系统架构设计师(摘抄)01

    2024-04-04 20:38:05       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-04 20:38:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-04 20:38:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-04 20:38:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-04 20:38:05       20 阅读

热门阅读

  1. 动态规划 Leetcode 647 回文子串

    2024-04-04 20:38:05       15 阅读
  2. 【Python语法实例】-13发牌游戏代码高阶

    2024-04-04 20:38:05       14 阅读
  3. 【Leetcode】279.完全平方数

    2024-04-04 20:38:05       17 阅读
  4. Docker资源管理和分配指南

    2024-04-04 20:38:05       15 阅读
  5. qt实现文本高亮

    2024-04-04 20:38:05       17 阅读
  6. python 自制黄金矿工游戏(设计思路+源码)

    2024-04-04 20:38:05       16 阅读
  7. 【PostgreSQL】- 1.4 PostgreSQL 业务规划(创建 Schema)

    2024-04-04 20:38:05       14 阅读
  8. QT 线程的启动

    2024-04-04 20:38:05       15 阅读
  9. Dockerfile怎么写及运行启动方法

    2024-04-04 20:38:05       15 阅读