面试准备-软件工程

news2024/11/17 3:04:02

参考:

  1. 《程序员面试笔试宝典》(何昊、叶向阳)

标准的软件开发过程:

1)可行性分析:要确定开发目标和总要求,一般要考虑技术是否可行,收益是否可行、用户操作是否可行,是否有法律风险。战略专家→《可行性分析报告》

2)需求分析:领域专家+系统架构师→《需求分析说明书》

3)设计:概要设计(结构)+详细设计→设计说明书、业务用例文档、技术用例文档

4)编码与实现:接口文档、关键算法文档

5)测试:贯穿整个开发过程。白盒/黑盒测试→单元测试报告、集成测试报告、系统测试报告

6)运行与维护:修改、维护、再开发

常见的软件开发过程模型:

1)瀑布模型

瀑布模型将软件生命周期划分为可行性分析、需求分析、设计、代码实现、测试、安装与维护6个基本活动,并且规定了它们自上而下的固定次序,形如瀑布流水,逐层下落。上一个环节完成后,进行验证,如果验证通过,则该结果可以作为下一环节的输入并继续进行,否则需要返回修改。它的优点是有按阶段划分的检查点,开发者每次只需要关注一个阶段,可以保证最终按时交付,缺点是:a)大量文档 b)用户只有在开发末期才能看到结果,难以调整 c)早期的错误(比如设计上的)要在最后才能发现,导致放大问题。

2)原型模型

原型模型是增量模型的一种形式。在开发真实系统之前,首先要构建一个简单的系统模型,实现客户与系统的交互。客户在使用过程中,不断发现问题,进而细化系统要求。开发者在已有模型的基础上,通过调整原型来满足客户需求,进而开发出客户满意的系统。它的重点是必须快速建立原型,并快速修改。

3)螺旋模型

综合了瀑布模型与原型模型的特点,强调风险分析。每一轮原型都要做风险分析,因此缺点是要求客户接受风险分析,因此需要相关知识,也需要用户参与平价,同时过多的迭代次数也会增加开发成本和时间。

4)增量模型

软件被视作一些列的构件来设计、实现、集成和测试。每次交付的是部分可运行的子系统。优点是较好地适应用户需求的变化;缺点是每次加入新子系统时,可能破坏已构建好的部分;也容易破坏整体性。第一个增量是核心产品。

5)RUP模型

Rational Unified Process,是Rational公司提出的一个通用框架。每个阶段都可以分解、迭代,每一个迭代都是完整的开发循环,都会产生可运行版本。
在这里插入图片描述

横轴是时间组织,纵轴是开发中的活动。前者常用属于有cycle,phase,iteration,milestone;后者有activity,artifact,worker,workflow.

1)初始阶段Inception:以需求分析为主,建立整体结构,确定项目边界,结束时候milestone是生命周期目标里程碑,用于评价项目基本的生存能力。

2)细化阶段Elaboration:设计及确定体系结构,制定工作计划与资源要求。结束时候的milestone是生命周期结构里程碑,为系统的结构建立了管理基准并使项目能在构建阶段中进行衡量。

3)构建阶段Construction:构建产品并继续演进需求、结构、计划直到提交。它的milestone是初始功能里程碑,决定了是否可以在测试环境中部署。

4)交付阶段Transition:交付客户,综合测试。milestone是产品发布里程碑。

几种模型的比较

模型特点适用范围
瀑布模型分阶段,每个阶段完成后有评审,允许反馈,要求提前确定需求需求定义完善,不易变更的系统
原型模型不需要完备定义,支持用户参与,能适应用户需求的变化需求复杂、动态变化、难以确定的系统
螺旋模型综合了瀑布和原型,引进了风险分析需求难以获取和确定,开发风险较大
增量模型增量式开发,允许开发活动并行技术风险较大,用户需求较为稳定的系统
RUP模型可改造、扩展和建材,可设计、开发、维护复杂、需求不确定的系统,开发组拥有丰富的软件开发和管理经验

敏捷开发

是将一个大项目分成多个相互联系,但也可以独立运行的小项目并分别完成,在此过程中软件一直处于可使用状态。强调团队合作及与业务专家之间的协作、面对面交流、频繁交付新软件、紧凑而自我组织型的团队、能很好地适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用。

常见的敏捷开发方法:

自适应软件开发Adaptive Software Development、水晶方法Crystal Method、特性驱动开发Feature Driven Development、动态系统开发方法Dynamic Systems Development Method、极限编程Extreme Programming

敏捷开发的12条原则:

1)按优先级安排,尽早、持续地交付有价值的软件给用户。通过用户故事来罗列需求,虽然编写文档但是工作重点在口头交流

2)即使到了系统开发的后期,也欢迎改变需求

3)经常性地交付可以工作的软件

4)开发期间,业务人员和开发人员要一起工作

5)激励个人构建项目,提供必须的环境和支持

6)采用面对面交谈

7)使用可以工作的软件作为首要的进度度量标准

8)敏捷过程要保持可持续的开发进度

9)不断地关注优秀的技能、设计

10)简单的方式完成

11)使用自组织团队。管理者不发号指令,而是让团队自己寻找最佳工作方式

12)每隔一段时间,团队要反思如何梗有效地工作,改进工作

UML中最常用的图:类图、对象图、用例图、交互图(时序图、协作图)、状态图、活动图、构件图、部署图

SCM(Software Configuration Management)

软件配置管理贯穿于整个软件生命周期,是一种标识、组织和控制修改的技术,用于界定软件的组成项目,对每个项目的变更进行管控,并维护不同项目之间的版本关联,使得项目可以被追溯。包括标识、版本控制、变更控制、配置审计、配置报告几个部分

常见工具:SourceSafe, CVS,ClearCase

使用SCM的好处:

1)解决了由于经费和时间有限带来的问题,减少升级次数

2)使得开发过程得到规范化管理,节约人力和时间

3)能有效管理人员流动,减少人工错误

4)避免了未经测试的软件加入到产品中

5)使得用户与开发商之间能有效沟通,保障用户的利益

6)使得软件生产规模化、构件化,降低成本

CMMI (Capability Maturity Model Integration)

由美国国防部、美国国防工业协会、卡内基梅隆大学共同开发的一项标准。CMMI共有5个级别,级别越高,风险越低,效率和质量越高。

1)初始级

也称无政府状态anarchy或混乱状态chaos。指没有规范过程的项目

2)可重复级

有需求管理、项目规划、项目监督与控制,也有审查等,可以保证项目实施取得成功

3)定义级

不仅对项目实施有整套的管理措施,也能将其制度化,因此可以在不同类的项目上取得成功

4)管理级

在定义级的基础上还实现了数字化管理,能通过量化实现流程的稳定。

5)优化级

在管理级的基础上,能主动改善流程,能根据实际不断调整软件生产过程以求达到最佳。

如何提高软件质量?

软件质量不是一个纯技术问题,而是一个系统的工程性问题。包括:

1)符合目标:开发者是否在做客户要求做的事情

2)符合需求:软件产品是不是在做客户需要做的事情

3)符合实际需求:包括客户明确说的和隐含的

提升软件质量的方向

1)规范产品开发过程

2)做好需求分析→面向对象设计、UML等

3)做好设计

4)加强规范:编程规范、版本控制

5)全面的质量控制:每个步骤上做严格的验证与确认

6)加强文档管理

7)加强代码管理:走读、评审

8)进行简单的度量分析活动

9)进行软件测试:全流程的测试,包括开发前期的静态测试

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

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

相关文章

【C++】如何使用RapidXML读取和创建XML文件

2023年10月11日,周三下午 目录 RapidXML的官网使用rapidXML读取XML文件中的元素的属性和值此次要读取的XML文件:ReadExample.xml用于读取此XML文件的C代码运行结果使用rapidXML创建XML文件用于创建XML文件的C代码 如果上面的代码无法运行运行结果​编辑…

Peter算法小课堂—DP背包问题

大家好,我是Peter,我又来啦🎈🎄✨ 🎈🧨🎉《动态规划》专栏来啦,目前为止,此专栏已经有四篇文章啦🎁🎀🎄 1.DP概念与编程方法 DP概念…

交叉熵Loss多分类问题实战(手写数字)

1、import所需要的torch库和包 2、加载mnist手写数字数据集,划分训练集和测试集,转化数据格式,batch_size设置为200 3、定义三层线性网络参数w,b,设置求导信息 4、初始化参数,这一步比较关键,…

bootz启动 Linux内核涉及do_bootm_linux 函数

一. bootz启动Linux uboot 启动Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 本文只分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。具体分析 do_bootm_linux函数执行过程。 本文继上一篇文章,地址…

vue3 + element Plus实现表格根据关键字合并行,并实现行的增删改操作

根据关键字合并表格 1.实现初始化表格2.实现添加班级与学生的功能3.添加的弹窗4.删除班级5.删除学生 首先看最终实现的效果 1.实现初始化表格 <template><div class"main-page"><div class"flex-end"><div class"public-search…

Service Weaver:以单体形式编码,以微服务形式部署

分布式应用的主流架构模式演化为微服务架构已经有些年头了。微服务、DevOps、持续交付和容器技术(k8s)是构成最初云原生概念[1]的核心要素。它们相生相拌&#xff0c;共同演进&#xff0c;并推动了云计算全面进入云原生时代。 云原生应用普遍采用微服务架构&#xff0c;遗留的单…

阿里云r7服务器内存型CPU采用

阿里云服务器ECS内存型r7实例是第七代内存型实例规格族&#xff0c;CPU采用第三代Intel Xeon可扩展处理器&#xff08;Ice Lake&#xff09;&#xff0c;基频2.7 GHz&#xff0c;全核睿频3.5 GHz&#xff0c;计算性能稳定&#xff0c;CPU内存比1:8&#xff0c;2核16G起步&#…

HBase 表如何按照某表字段排序后顺序存储的方法?

首先需要明白HBase表的排序规则&#xff1a; &#xff08;1&#xff09;rowkey排序&#xff08;字典排序&#xff09;——升序 &#xff08;2&#xff09;Column排序&#xff08;字典排序&#xff09;——升序 &#xff08;3&#xff09;时间戳排序——降序 rowkey 字典序排序…

DeskHIL桌面级仿真测试平台

硬件在环测试系统&#xff0c;一直是汽车电子功能测试的重要工具。随着测试工程师对硬件在环系统的要求越来越高&#xff0c;对其高集成性、便携性的需求也愈发强烈。由于硬件在环系统设计复杂、定制化程度高等因素&#xff0c;成本一直居高不下&#xff0c;因此&#xff0c;市…

C++基础入门学习笔记

问题1&#xff1a;什么是 C 中的多态&#xff1f;如何实现多态&#xff1f; 回答1&#xff1a;C 中的多态是指同一种类型的实体&#xff0c;可以在不同的情况下表现出不同的行为。实现多态的方式有两种&#xff1a;虚函数和模板函数。虚函数是在基类中声明为虚函数的函数&…

c++视觉处理---仿射变换和二维旋转变换矩阵的函数

仿射变换cv::warpAffine cv::warpAffine 是OpenCV中用于执行仿射变换的函数。仿射变换是一种线性变换&#xff0c;可用于执行平移、旋转、缩放和剪切等操作。下面是 cv::warpAffine 函数的基本用法&#xff1a; cv::warpAffine(src, dst, M, dsize, flags, borderMode, borde…

嵌入式Linux裸机开发(七)UART串口、IIC、SPI通信

系列文章目录 文章目录 系列文章目录前言UART串口通信介绍UART配置 IIC介绍I.MX6U 的 I2C SPI介绍I.MX6U ECSPI 结语 前言 大概学完这三种通信后&#xff0c;之后就先去学系统移植&#xff0c;其他的先暂时放下 UART串口通信 介绍 串口全称叫做串行接口&#xff0c;通常也叫…

Maven创建父子工程详解

引言 在微服务盛行的当下&#xff0c;我们创建的工程基本都是父子工程&#xff0c;我们通过父工程来引入jar&#xff0c;定义统一的版本号等&#xff0c;这样我们在子工程中就可以直接引用后使用了&#xff0c;而不需要去重复的声明版本号等&#xff0c;这样会更方便对整个项目…

Linux中Locate命令查找不全

Locate locate(locate) 命令用来查找文件或目录。 locate命令要比find -name快得多&#xff0c;原因在于它不搜索具体目录&#xff0c;而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统会自动创建这个数据库&#xff0c;并且每天…

【ElasticSearch】深入探索 DSL 查询语法,实现对文档不同程度的检索,以及对搜索结果的排序、分页和高亮操作

文章目录 前言一、Elasticsearch DSL Query 的分类二、全文检索查询2.1 match 查询2.2 multi_match 查询 三、精确查询3.1 term 查询3.2 range 查询 四、地理坐标查询4.1 geo_bounding_box 查询4.2 geo_distance 查询 五、复合查询5.1 function score 查询5.2 boolean 查询 六、…

2023年中国溶瘤病毒药物上市产品、研发现状及行业市场规模前景[图]

溶瘤病毒&#xff08;Oncolyticvirus&#xff09;&#xff0c;是一类具有复制能力的肿瘤杀伤型病毒&#xff0c;溶瘤病毒根据所采用的毒株类型可以被分为天然病毒株&#xff08;野生型病毒株&#xff09;和基因改造病毒株两类&#xff0c;溶瘤病毒的种类也从最初的疱疹病毒发展…

使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测

使用c视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加…

网络-网络状态网络速度

文章目录 前言一、网络状态二、网络速度 前言 本文主要记录如何监听网络状态和网络速度。 一、网络状态 获取当前网络状态: navigator.onLine // true:在线 false:离线监听事件&#xff1a;online&#xff08;联网&#xff09; 和 offline&#xff08;断网&#xff09; windo…

全国A级旅游景区清单数据(2023年更新)

全国A级旅游景区清单数据&#xff08;2023年更新&#xff09; 1.样本量&#xff1a;14847条 2.来源&#xff1a;政府公布资料 3.指标&#xff1a;景区名称、等级、所属省份、所属城市、所属区县、地址、当前等级评定时间、相关文件发布时间、坐标(GCJ02)Lng、坐标(GCJ02)Lat…

【Redis实战】分布式锁

分布式锁 synchronized只能保证单个JVM内部的线程互斥&#xff0c;不能保证集群模式下的多个JVM的线程互斥。 分布式锁原理 每个JVM内部都有自己的锁监视器&#xff0c;但是跨JVM&#xff0c;就会有多个锁监视器&#xff0c;就会有多个线程获取到锁&#xff0c;不能实现多JV…