【软件设计师】软件工程基础知识

1.软件工程概述

1.1 模型

1.1.1 增量模型

        增量模型又称之为渐增模型,也称之为有计划的产品改进模型;可以在增量开发的过程中逐步理解需求。

        它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动,在上一版本基础上纳入一部分需求以完成下一版本,依次类推,直至系统完成(核心产品即优先级高的产品往往首先开发,因此经历最充分的“测试”,第一个可交付版本所需的成本低,时间少,不必等到整个系统开发完成就可以使用),需注意,不是每个增量都必须要进行风险评估

        增量模型是瀑布模型和原型进化模型的综合,对软件设计具有更高的技术要求,特别是对软件体系结构,要求它具有更好的开放性和稳定性,能够顺利地实施构件 的集成(容易理解,管理成本低)

        增量模型是把软件产品作为一系列增量构建来设计,编码,集成和测试,每个构建由多个相互作用的模块组成,并且能够完成特定的功能

        该模型的难点:如何进行模块的划分

        扩展:基于构件的软件开发,强调使用可复用的软件“构件”设计和构建软件系统,对所需的构件进行合格性检验,适应性修改,并把它集成到新系统中。

1.1.2 瀑布模型

        瀑布模型将开发过程描述为从一个阶段瀑布般转换到另一个阶段的过程,将软件生命周期各个活动定为线性顺序连接的若干阶段的模型,规定了由前至后的固定次序

        瀑布模型可以有效地捕获系统需求

1.1.3 原型模型

        开发人员快速地构造整个系统或者系统的一部分以理解或澄清问题。

        原型模型是快速构建软件的原型,从初始的原型逐步演化为最终软件产品,特别适用于对软件需求缺乏准确认识的情况。

 1.1.4 喷泉模型

        开发过程中以用户需求为动力,以对象为驱动,适合于面向对象的开发方法。

        克服了瀑布模型不支持软件重用和多项开发活动集成的局限性

1.1.5 螺旋模型

        是风险驱动的,将开发活动和风险管理结合起来,以减小风险。

        是一种演化软件开发过程模型,它兼顾快速原型的迭代特征以及瀑布模型的系统化与严格监控。螺旋模型最大的特点在于引入了其他模型不具备的风险分析,使软件再无法排除重大风险时有机会停止,以减小损失。

        同时,再每个迭代阶段构建原型是螺旋模型用以减少风险的途径,螺旋模型更适合大型的昂贵的系统级别=的软件应用

1.1.6 演化模型

        在获取一组基本的需求后,通过快速分析构造出该软件的一个初始可运行版本,然后逐步演化成为最终软件产品

1.1.7 模型适用:

        瀑布模型不能适应变化的需求,原型,增量,喷泉均能适应变化的需求   

        原型模型不适合大规模软件的开发,瀑布,螺旋,喷泉均可以

        增量模型不适合大规模团队开发的项目,是适用于商业产品的创新模型试题

        需求清晰,交付时间有严格限制的,最适合瀑布模型

        技术含量高,与客户相关的风险也很多,最使用螺旋过程模型 

        需求不清晰(经常发生变化)且规模不太大(且不太复杂)时采用原型化方法最适合

        数据处理领域的不太复杂的软件(规模不大),适合结构化方法进行开发

        例题:全面采用新技术开发一个系统,以替换原有的系统,适合选用瀑布模型,开发的系统功能与多个部门业务相关,希望系统尽快投入使用并不断改善,这应该使用 迭代(演化)模型(其实也适合原型模型,但是原型模型更适用于需求不明确时以获取需求

        

1.2 体系结构

1.2.1 三层c/s体系结构

        三层c/s体系结构由逻辑上相互分离的表示层,业务层和数据层

        表示层向客户提供数据,业务层实施业务相数据规则,数据层定义数据访问标准。

        优点:逻辑上相对独立,不同层可以用不同的平台,软件和开发语言,而系统的安装,修改和维护在各层都可能进行。

1.3 软件工程的基本要素

        包括方法,工具和过程

        过程是将技术结合在一起的凝聚力,使得计算机软件能够被合理地和及时地开发,过程定义了一组关键过程区域,构成了软件项目管理控制的基础

        方法提供了构造软件在技术上需要“如何做”,它覆盖了一系列的任务,方法也依赖于一些基本原则,这些原则控制了每一个技术区域,而且包含建模活动和其他描述技术

        工具对过程和方法提供了自动或半自动的支持,如计算机辅助软件工程(CASE)。

1.4 软件设计的任务

        任务:基于需求分析的结果建立各种设计模型,给出问题的解决方案。

        从工程管理的角度,可以将软件设计分为概要设计阶段和详细设计阶段

        概要设计将需求转化为软件的模块划分,确定模块与模块之间的调用关系;详细设计将模块进行细化,得到详细的数据结构化和算法

        概要设计文档包含 系统架构,模块划分 ,系统接口,数据设计  这4个主要方面的内容(包括 体系结构设计,数据库设计,逻辑数据结构设计),特别注意,不包括模块内部的算法

        结构化设计方法中,概要设计阶段进行软件体系结构的设计,数据设计和结构设计;详细设计阶段进行数据结构和算法的设计

        面向对象设计方法中,概要设计阶段进行体系结构设计,初步类设计/数据设计,结构设计;详细设计阶段进行构件设计

        结构化设计和面向对象设计是两种不同的设计方法,结构化设计根据系统的数据流图进行设计,模块体现函数,过程和子程序;面向对象设计基于面向对象的基本概念进行,模块体现为类,对象和构件等

1.5 软件需求

        软件需求是软件系统必须完成的事以及必须具备的品质

        软件需求包括功能需求,非功能需求和设计约束三个方面

        功能需求是所开发的软件必须具备什么样的性能

        非功能需求是指产品必须具备的属性或品质,如可靠性,性能,响应时间和扩展性等到

        设计约束通常对解决方案的一些约束说明        

1.6 软件度量

        软件复杂性度量是软件度量的一个重要分支。

        软件复杂性度量的参数有很多,比如:

        1,规模,即指令数或源程序行数

        2,难度,通常由程序中出现的操作数所决定的量来表示

        3,结构,通常用与程序有关的度量来表示

        4,智能度,即算法的难易程度

1.7 其他知识

        软件的三种基本控制结构:顺序,选择,重复

        I/O软件隐藏I/O操作实现的细节,方便用户使用I/O设备;I/O软件向用户提供的是逻辑接口;I/O软件将硬件与较高层次的软件隔离开来,而最高层软件向应用提供一个友好的,清晰且统一的接口,方便用户使用

        可维护性:在系统分析阶段的复审过程中,应该指出软件的可移植性问题以及可能影响软件维护的系统界面;在系统设计阶段的复审期间,应该从容易修改,模块化和功能独立的目的出发,评价软件的结构和过程;在系统实施阶段的复审期间,代码复审应该强调编码风格和内部说明文档这两个影响可维护的因素。可测试性是可维护性的一个评价指标。

2. 软件工具与开发环境

        逆向工程从源代码得到软件系统的规格说明和设计信息,属于软件维护阶段行为,因此逆向工程工具属于软件维护工具

3.软件开发项目管理

        项目风险:

4 软件质量管理

5.软件过程管理

5.1 原型法

        原型方法(系统原型)适用于用户需求不清,需求经常变化的情况,可以帮助导出系统需求并验证需求的有效性。 原型法能够迅速地开发出一个让用户看得见的系统框架,可以用来支持用户界面设计,原型法不能用来指导代码优化。

        探索性原型的目的是弄清目标的要求,确定所希望的特性,并探讨多种方案的可行性,可以用来探索特殊的软件解决方案

5.2 极限编程

        极限编程是一种轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式

        4大价值观:沟通、简单性、反馈、勇气

        5个原则:快速反馈,简单性假设,逐步修改,体长更改和优质工作

        12个最佳实践:计划游戏(快速指定计划,随着细节的不断变化而完善),小型发布(系统的设计要能够尽可能早地交付),隐喻(找到合适的比喻传达信息),简单设计(只处理当前的需求,使设计保持简单),测试先行(先写测试代码,然后再编写程序),重构(重新审视需求和设计,重新明确地描述他们以复合新的和现有的需求),结对编程(有一个非正式的代码审查过程,可以获得更高的代码质量,但是编码速度与传统的单人编程相当),集体代码所有制(任何开发人员可以对系统的任何部分进行改变),持续集成(可以按日甚至按小时为客户提供可运行的版本),每周工作40小时,现场客户和编码标准,系统最终用户代表应该全程配合Xp团队

5.3  CMM   

        CMM是软件过程能力成熟度模型,该模型按照软件过程的不同程度分为5个等级,1级被认为成熟度最低,5级被认为成熟度最高,一般来说,采用成熟度最高的软件过程模型,往往可以得到更高质量的软件产品

        1997年美国将已有的几个CMM模型结合在一起,构成"集成模型"(CMMi)

5.4 能力成熟度(CMMI)

        CMMI是若干个过程模型的综合和改进,提供了连续式模型和阶段式模型两种方法        

        连续式模型包括6个过程域能力等级

        CL0(未完成的):过程域未执行或未得到CL1种定义的所有目标        

        CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换为可标识的输出工作产品,以是西安支持过程域的特定目标

        CL2(已管理的):其共性目标是集中于已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的设计和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都被监控,控制,和评审

        CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程种裁剪得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。

        CL4(定量管理):其共性目标集中于可定了管理的过程的制度化。使用测试和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则。

        CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的该表和持续改进计划种的过程域的功效。

  5.5 敏捷过程

        在敏捷开发过程中,并列争球法使用了迭代的方法,其中,把每段时间(30天)一次迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行的递增实现产品。

        极限编程XP是激发开发人员创造性,使得管理负担最小的一组技术;

        水晶法Crystal认为每一个不同的项目都需要一套不同的策略、约定和方法论;      

        自适应软件开发(ASD)有6个基本的原则:

        1.在自适应软件开发中,有一个使命作为指导,它设立了项目的目标,但不妙时如何达到这个目标

        2.特征被视为客户键值的关键,因此,项目是围绕着构造的构建来组织并实现特征

        3.过程中的迭代是重要的,因此重做与做同样的重要,变化也包含其中

        4.变化不视为是一种更正,而是软件开发实际情况的调整,

        5.确定的交付时间迫使开发人员认真考虑每一个生产版本的关键需求

        6.风险也包含其中,它迫使开发人员首先跟踪最艰难的问题

5. 统一过程UP

        基本特征:以用例和风险驱动,以架构为中心,受控的迭代式的增量开发。

        

       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGLM2-6B 模型基于 [P-Tuning v2]的微调

ChatGLM2-6B-PT 一、介绍 1、本文实现对于 ChatGLM2-6B 模型基于 [P-Tuning v2](https://github.com/THUDM/P-tuning-v2) 的微调 2、运行至少需要 7GB 显存 3、以 [ADGEN](https://aclanthology.org/D19-1321.pdf) (广告生成) 数据集为例介绍代码的使用方法。 模型部署参考…

TypeScript-函数类型

函数类型 指给函数添加类型注解,本质上就是给函数的参数和返回值添加类型约束 function add(a: number,b: number) :number {return a b } let res: number res add(2 3) // 函数参数注解类型之后,不但限制了参数的类型还限制了参数为必填 优点&…

富格林:借助正规技巧实现出金

富格林悉知,现货黄金近年来的表现相当出众,相信上车交易现货黄金的投资者,或多或少都在市场中分得一块蛋糕。不过也并不代表所有人都可以轻松在现货黄金中获利,尤其是投资新手。如果没有正规的投资经验观念,就很难实现…

基于Udp(收发信息使用同一个socket)网络通信编程

想要实现网络通信那么就要有一个客户端一个服务器 客户端发送数据,服务器接收数据并返回数据 网络通信就是进程通信 所以我们用两个程序来分别编写客户端和服务器 服务器 1,设置端口号, 2、ip可以固定位127.0.0.1来用于本地测试&#xff0c…

二刷算法训练营Day15 | 二叉树(2/9)

目录 详细布置: 1. 层序遍历 2. 226. 翻转二叉树 3. 101. 对称二叉树 详细布置: 1. 层序遍历 昨天练习了几种二叉树的深度优先遍历,包括: ​​​​​​前中后序的递归法前中后序的迭代法前中后序迭代的统一写法 今天&…

HCIP-Datacom-ARST自选题库__OSPF多选【62道题】

1.如图所示,路由器所有的接口开启OSPF,图中标识的IP地址为设备的LoopbackO接口的IP地址,R1、R2、R3的LoopbackO通告在区域1,R4的Loopback0通告在区域0,R5的LoopbackO通告在区域2,下列哪些IP地址之间可以相互…

【机器学习】基于tensorflow实现你的第一个DNN网络

博客导读: 《AI—工程篇》 AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效 AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署 AI智能体研发之路-工程篇(三&am…

传统RNN网络及其案例--人名分类

传统的RNN模型简介 RNN 先上图 这图看起来莫名其妙,想拿着跟CNN对比着学第一眼看上去有点摸不着头脑,其实我们可以把每一个时刻的图展开来,如下 其中,为了简化计算,我们默认每一个隐层参数相同,这样看来R…

7. 核心功能(Core Features)

7. 核心功能(Core Features) 本章节深入介绍 Spring Boot 的详细信息。在这里,你可以了解想要使用的和自定义的主要功能。如果您还没有阅读 “Getting Started” 和 “Developing with Spring Boot” 这两节内容,不放先去阅读这两…

添砖Java(十二)——异常,异常捕获,常见异常方法

异常: 定义:异常通俗来讲,其实就是你写出bug来了,编译器给你报错了。 public static void main(String[] args)throws Exception {int z10/0;} 这个代码虽然说是可以运行,但是编译器会报错。 因为10不能去除以0。 异…

【C++】:vector容器的底层模拟实现迭代器失效隐藏的浅拷贝

目录 💡前言一,构造函数1 . 强制编译器生成默认构造2 . 拷贝构造3. 用迭代器区间初始化4. 用n个val值构造5. initializer_list 的构造 二,析构函数三,关于迭代器四,有关数据个数与容量五,交换函数swap六&am…

C# 数组/集合排序

一&#xff1a;基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …

Instagram运营必备工具合集

Instagram的运营不仅仅涉及数据分析&#xff0c;还包括内容规划、发布管理、互动提升和广告优化等多个方面。以下是一些海外社媒Instagram运营必备的工具&#xff0c;这些工具可以帮助您更有效地管理和提升您的Instagram账号。 Instagram 运营必备工具合集 数据分析工具 1、Ins…

10种排序算法总结-(c语言实现与动画演示)

算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。非比较类排序&#xff1a;不通过比较来决定元素间的相对次序&#…

什么叫USDT(泰达币)的前世今生!

一、引言 在数字货币的世界里&#xff0c;USDT&#xff08;Tether USDT&#xff09;以其独特的稳定机制&#xff0c;成为了连接传统金融市场与加密货币市场的桥梁。本文将带您了解USDT的诞生背景、发展历程、技术特点以及未来展望。 二、USDT的诞生背景 USDT是Tether公司推出…

antd:动态获取菜单

修改 app.tsx 文件 修改 getInitialState 方法 export async function getInitialState(): Promise<{...menuData?: MenuDataItem[] | undefined;fetchMenuList?: Promise<MenuDataItem[] | undefined>; }> {...const fetchMenuList async () > {const men…

【服务器部署篇】Linux下Node.js的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

ChatGPT的工作原理,这篇文章说清楚了!

作者&#xff1a;史蒂芬沃尔弗拉姆&#xff08;Stephen Wolfram&#xff09;英、美籍 计算机科学家&#xff0c; 物理学家。他是 Mathematica 的首席设计师&#xff0c;《一种新科学》一书的作者。 ChatGPT 能够自动生成一些读起来表面上甚至像人写的文字的东西&#xff0c;这…

《Docker实际应用场景:开发、测试、CI/CD、微服务和容器编排》

Docker实际应用场景&#xff1a;开发、测试、CI/CD、微服务和容器编排 1. 引言 Docker 已成为现代软件开发和部署的重要工具&#xff0c;其在开发、测试、持续集成/持续交付 (CI/CD)、微服务和容器编排等方面的应用尤为广泛。本篇博客将通过具体的案例和场景说明 Docker 在这…

《庆余年算法番外篇》:范闲通过最短路径算法在阻止黑骑截杀林相

剧情背景 在《庆余年 2》22集中&#xff0c;林相跟大宝交代完为人处世的人生哲理之后&#xff0c;就要跟大宝告别了 在《庆余年 2》23集中&#xff0c;林相在告老还乡的路上与婉儿和大宝告别后 范闲也在与婉儿的对话中知道黑骑调动是绝密&#xff0c;并把最近一次告老还乡梅…