详解软件开发的标准过程(生命周期):跟着标准搞,设计没烦恼

news2024/11/17 17:41:09

目录

一.软件开发的生命周期总括

二.项目架构分类

C/S架构

B/S架构

三.详解软件需求

需求分类

需求获取

需求分析

四.详解面向对象分析(OOA)

概念理解:

统⼀建模语⾔UML

UML的重要组成部分:

⽤例图的元素

识别参与者

合并需求获得⽤例 

细化⽤例描述 

定义概念类

确定类之间的关系

为类添加职责

建⽴交互图 

软件需求规格说明书


一.软件开发的生命周期总括

软件⽣命周期中以划分为可⾏性研究、需求分析、概要设计、详细设计、实现、组装(集成)测试、
确认测试、使⽤、维护、退役10个阶段,如下图:

我们对软件开发的过程进行简单易懂的描述:

  • 可⾏性研究:简单来说,可行性研究就是对我们所要设计软件使用当前技术能否完成,完成消耗的时间和资本是否在合理范围内,软件的功能是否能解决当前存在的问题,当前软件的开发是否能给公司带来正面效益。
  • 需求分析:分析软件的功能和效率,对整个软件的开发起决定性作用,最后根据软件的功能和效率生成软件需求规格说明书
  • 概要设计:设计软件的公共部分,包括接口,协议和约束(总体约束),主要对程序进行一个总体的设计,不涉及各个功能的细节实现
  • 详细设计:对软件的各个业务和流程进行详细的设计,包括每一个业务的具体操作和设计
  • 实现:对每个业务进行实现
  • 组装(集成)测试:对软件进行部署,测试所有功能
  • 确认测试:让用户确认所有功能是否符合预期,对整个软件进行验收
  • 维护:通过各种必要的维护活动使系统持久的满⾜⽤⼾需要
  • 退役:⽌对软件产品的⽀持,软件停⽌使⽤

二.项目架构分类

一般项目的架构主要分为两种:C/S架构和B/S架构

C/S架构即客⼾端 / 服务器架
B/S架构即浏览器 / 服务器架

C/S架构

C/S 架构全称是客⼾端 / 服务器(Client / Server)架构,是常⽤的两层架构。客⼾端需要安装客⼾
端软件,服务端程序运⾏在服务器上,提供Socket或数据库服务。
优点:
⼤部分业务都可以在客⼾端完成,充分利⽤本地的计算机资源
响应速度快
个性化定制能⼒强
⾯向相对固定的⽤⼾群,对信息安全的控制能⼒强
缺点:
需要安装客⼾端才能使⽤
维护成本⾼,任何⼀台电脑上的客⼾端出现问题都需要进⾏维护,升能过程繁琐

B/S架构

B/S架构全称是浏览器 / 服务器(Browser/Server)结构,分为Web浏览器、服务器程序、数据库服
务三部分,可以理解为是对C/S架构⼀种改进。由于所有的业务逻辑都由服务器程序处理,所以客⼾端 仅使⽤浏览器就可以完成所有操作,⼤⼤降低了客⼾端的维护成本。
我们目前使用java设计的程序属于BS架构

 

优点:
客⼾端零维护,只需要安装⼀个浏览器即可
所有业务都集中在服务器端,业务扩展⾮常⽅便
维护成本低,只需要维护服务器即可
缺点:
通过⽹络发送请求和接收响应,受⽹络影响较⼤
服务器安全与业务处理能⼒需要花费很⼤精⼒与成本
不同浏览器⽀持不尽⼈意

三.详解软件需求

需求分类

a. 业务需求:指反映企业或客⼾对系统的⽬标要求,通常来⾃与企业内部,即软件的主要业务
b. ⽤⼾需求:描述的是⽤⼾的具体⽬标,或⽤⼾要求系统必须能完成的任务。(除业务需求之外的用户自己的需求)
c. 系统需求:从系统⻆度来说明软件的需求,包括功能需求(系统必须实现的功能)、⾮功能需求
(⽐如软件的质量,可维护性,效率等等)和设计约束(交付时的⼀些限制条件,⽐如必须采⽤国 有⾃主知识产权的数据库,必须运⾏在某个操作系统下)等等。

需求获取

需求获取的⽅式主要有以下⼏种:
a. ⽤⼾访谈:最基本的⽅式。
b. 问卷调查:由于对⽤⼾进⾏逐⼀访谈⽐较耗时且⽤⼾时间不⼀定允许及时参与访谈,所以可以 预先准备问卷调查表让⽤⼾填写,再根据结果进⾏⼩范围访谈,可以看做是对⽤⼾访谈的⼀种 优化。
c. 采样:对特定种群进⾏采样,研究所选出的样本,得到有⽤信息。对于信息系统的开发,现在 ⽂档就是采样种群。
d. 情节串联板:通过⼀系统图⽚、幻灯⽚来进⾏讲解,说明系统应该如何运⾏。

需求分析

获取需求后,进⾏具体的需求分析⼯作,最终形成软件需求规格说明书做为向下⼀个阶段交付的
成果
a. 绘制系统上下⽂范围关系图:⽤于定义系统与系统外部实体间界限和接⼝的简单模型,为需求
确定范围;
b. 创建⽤⼾界⾯原型:可以通过快速开发⼯具开发⼀个原型或者通过幻灯⽚、Flash等演⽰⼯具制 作⼀个演⽰原型,甚⾄可以通过纸笔画出⼀些关键的界⾯接⼝⽰意图,从⽽帮助⽤⼾更好的理 解要解决的问题,理解系统;
c. 分析需求的可⾏性:对获取到的需求进⾏成本、性能和技术实现⽅⾯的可⾏性研究,以及是否 与其他的需求存在冲突,是否有对外部的依赖等;
d. 确定需求的优先级:是制订迭代计划的⼀个重要的依据,可以使⽤满意和不满意指标进⾏说 明。满意度表⽰当需求被实现时⽤⼾的满意程度,不满意度表⽰当需求未被实现时⽤⼾的不满 意程度;
e. 为需求建⽴模型:表现形式主要是图表加上少量的⽂字描述,图形化的描述使需求更加清晰、 易懂。需求分析模型主要描述系统的数据、功能、⽤⼾界⾯和运⾏的外部⾏为,并不会涉及软 件的具体实现细节,同时,为后续的软件设计提供了系统的表⽰视图;
f. 创建数据字典:对系统⽤到的所有数据项和结构进⾏定义,以确保开发⼈员使⽤统⼀的数据定

四.详解面向对象分析(OOA)

概念理解:

1 ⾯向对象分析(OOA)
发⽣在需求分析阶段,解决“做什么”的问题,主要任务是确定对象的属性与⽅法,对象与对象
之间的关系,各个操作的具体流程,但不考虑系统具体实现有关的因素;
2.2 ⾯向对象设计(OOD)
发⽣在系统设计阶段,解决的是“怎么做”的问题,其基本思想包括抽象、封装和可扩展性,其
中可扩展性主要通过继承和多态来实现。主要任务是把实现对象进⾏⼯程化规范,管理程序内部各部 分的相互依赖,为⾯向对象编程提供指导与依据;
2.3 ⾯向对象编程(OOP) 发⽣在系统开发阶段,使⽤

统⼀建模语⾔UML

UML(Unified Modeling Language)是⼀种易于表达、功能强⼤且普遍适⽤的建模语⾔,它的
作⽤不限于⽀持OOA和OOD,还⽀持从需求分析开始的软件开发全过程。

UML的重要组成部分:

事物:事物也称为建模元素,包括结构事物、⾏为事物、分级事物和注释事物,这些事物是 UML模型中最基本的OO构造块;
关系:UML⽤关系把各个事物结合在⼀起,主要的关系有:依赖(dependency)、关联
(association)、泛化(generalization)、实现(realization);
图:主要包括类图、对象图、构件图、组合结构图、⽤例图、顺序图、通信图、定时图、状态 图、活动图、部署图、制品图、包图、交互概览图等。
从⽤⼾的⻆度来看,他们并不想了解系统的内部结构和设计,他们关⼼的是系统所能提供的服
务,把从⽤⼾那⾥获取的需求记录下来,进⾏合成与提炼,从⽽建⽴⽤例模型。在OOA⽅法中,构 建⽤例模型⼀般需要经历以下阶段,分别的,识别参与者、合并需求获得⽤例、细化⽤例描述和调 整⽤例模型,其中前三个阶段是必需的。

⽤例图的元素

⽤例是⼀种描述系统需求的⽅法,在⽤例图中,主要包括参与者、⽤例和通信关联三种元素:
如图所⽰:
参与者:参与者是指存在于系统外部并与系统进⾏交互的任何事物,既可以是使⽤系统的⽤
⼾,也可以是其他外部系统和设备等;
⽤例:指在系统中执⾏的动作,这些动作将⽣成参与者可⻅的结果。也就是说⽤例表⽰系统所 提供的服务,它定义了系统是如何被参与者所使⽤,描述的是参与者为了使⽤系统提供的服务 与使⽤发⽣的⼀段对话;
 通信关联:表⽰的是参与者和⽤例之间的关系,或者⽤例与⽤例之间的关系。箭头所指⽅是对 话的被动接受者,箭尾所指⽅是对话的主动发起者,如果不想强调对话中的主动与被动关系, 可以使⽤不带箭头的关系实线。

识别参与者

参与者是与系统交互的所有事物,不仅可以由⼈承担,还可以是其他系统和硬件设备,要注意
的是,参与者⼀定在系统之外,不是系统的⼀部分。执⾏系统功能的参与者可能有多个,有主次之
分,开发⽤例的主要⽬的是找到主要参与者。
可以通过下列问题来帮助分析和发现系统的参与者:谁使⽤这个系统?谁安装这个系统?谁启
动这个系统?谁维护这个系统?谁关闭这个系统?哪些系统使⽤这个系统?谁从这个系统获取信
息?谁为这个系统提供信息?
⽰例:
我们以当前准备开发的论坛系统为例,前期获取到如下⽤⼾需求:
注册登录
帖⼦列表, 发布帖⼦, 删除帖⼦, 回复帖⼦等功能.
⽀持个⼈主⻚的展⽰/编辑, ⽀持头像上传.
⽀持帖⼦按版块分类.
⽀持发布图⽚表情
⽀持站内私信
管理员可以添加/删除/修改版块
管理员可以管理所有帖⼦
综合以上需求描述,可以明显的提到到两个参与者,⼀个是管理员,⼀个是普通⽤⼾。

合并需求获得⽤例 

将参与者都找到之后,接下来就要仔细检查参与者,为每个参与者确定⽤例。
⾸先,要将获取到的需求分配给参与者,⽐如,普通⽤⼾可以进⾏注册,登录,编辑个⼈信
息,发贴⼦,修改⾃⼰发的贴⼦,发站内信等等,管理员不仅可以进⾏普通⽤⼾的操作还可以进⾏ 版块管理等等。
其次,进⾏需求合并操作,并产⽣⽤例,⽐如对于帖⼦来说,有发布帖⼦,修改帖⼦,删除帖 ⼦,在这⾥合并为操作帖⼦。注:⽤例并不需要包括具体的操作流程(事件流),事件流将在细化⽤ 例描述中体现。
然后,将识别到的参与者和合并⽣成的⽤例通过⽤例图的形式表⽰出来,⾄此以获得⽤例模型 的框架。如下图所⽰:

细化⽤例描述 

⽤例描述可以迭代完成,先对⼀些重要的⽤例编制相对细致的描述,对于那些不重要的⽤例可
以留待以后再补充完成,⽤例描述通常包括⽤例名称、简要说明、事件流、⾮功能需求、前置和后
置条件、扩展点、优先级。
以操作帖⼦⽤例中的发布帖⼦为例,有如下描述:
1. ⽤例名称
发布帖⼦
2. 简要说明⽤⼾发布新帖,同时增加对应版块帖⼦数量
3. 事件流
1. ⽤⼾向系统发出发布新贴请求
2. 系统展⽰编辑新帖界⾯
3. ⽤⼾选择对应的版块类别,写⼊帖⼦标题与正⽂,并提交
4. 系统检查版块类别、标题、正⽂是否有效
5. 系统将所输⼊的信息存储建档,帖⼦发布成功
4. 备选事件流
5. ⾮功能需求
⽆特殊要求
6. 前置条件⽤⼾必须登录系统进⾏权限校验
7. 后置条件修改对应版块下帖⼦的数量
8. 扩展点
9. 优先级最⾼(满意度5,不满意度5)
针对以上⽤例细化描述⽰例可知,⽤⼾发贴前要对登录状态进⾏检查,发贴操作中包含⾝份检
验,⾝份检查在其他操作中也都会涉及,所以我们抽象出⼀个⾝份检验的⽤例,使⽤⽤例图描述⽤
例之间的关系如下所⽰:

定义概念类

概念类:模型中可以代表事物与概念的对象。
OOA的主要任务就是找到系统中的对象和类,这些类将反映到OOD中的软件类和OOP中具体的实
现类。
发现类的⽅式有很多种,其中应⽤最⼴泛的是名词短语法,具体步骤如下:
阅读和理解需求⽂档或⽤例描述
筛选出名词或名词短语,建⽴初始类清单(候选类)
将候选类分为三类:分别是显⽽易⻅的类,明显⽆意义的类和不确定类别的类
舍弃明显⽆意义类别的类
⼩组讨论不确定类别的类,直到把他们合并或调整到其他两个类别。
根据4.2.4⼩节,发布帖⼦⽤例的事件流,可以获取到候选概念类的清单,如下

经过简单分析:“版块类别” 和 “版块帖⼦数量” 都可以归结到 “版块” 类,做为 “版块” 类
的属性;“帖⼦标题” 和 “帖⼦正⽂” 都可以归结到 “帖⼦” 类,做为 “帖⼦” 类的属性;“权
限” 可以归结到 “⽤⼾”类,做为“⽤⼾”类的属性。⾄此,针对发布帖⼦这个⽤例,就确定了三个
类,分别是:⽤⼾、版块、帖⼦。

确定类之间的关系

当完成了类的寻找⼯作之后,就是理清这些类之间的关系,类之间的关系有:关联、依赖、泛
化、聚合、组合和实现,他们在UML中的表⽰⽅式如下:
关联关系:提供不同类的对象之间的结构关系,⽽不是类与类之间的关系,两个对象之间⼀般 以动词连接,⽐如,⽤⼾-发布-帖⼦;可以⽤⼀个箭头连接,表⽰关联关系对象可以从⼀个端得 到另⼀端对象,如果没有箭头,认为是⼀个双向关系或是⼀个未定义的关联;

依赖关系:两个类A 和 B,如果B变化可能会引起A的变化,则称类A依赖与B,⽐如,⼀个类是 另⼀个类的数据成员,⼀个类是另⼀个类的某个操作的参数等;
聚合关系:共享聚集关系通常简称为聚合关系,他表⽰了类之间整体与部分的关系,“部
分”可以属于不同的“整体”,“部分”与“整体”的⽣命周期可以不同,⽐如,汽⻋和⻋轮
就是聚合关系,⼀个汽有⼀多个轮⼦,汽⻋坏了,轮⼦还可以⽤,轮了坏了可以再换⼀个;
组合关系:组合聚集关系通常简称为组合关系,他也表⽰了类之间整体与部分的关系,与聚合 关系的区别在于,组合关系中的“部分”只能属于⼀个“整体”,“部分”与“整体”的⽣命
周期相同,⽐如:⼀个公司有多个部⻔,他们之间就是组合关系,公司⼀旦倒闭,部分也就不 存在了;
实现关系:描述的是类和接⼝之间的关系,⼀个类可以实现接⼝中声明的⽅法;
泛化关系:描述的是⽗类与⼦类之间的关系,继承关系是泛化关系的反关系,也就是说⼦类继 承了⽗类,⽽⽗类是⼦类的泛化。
对于⽤⼾发布帖⼦的⽤例,在确定类与类之间关系之后,可以⽤UML的类图把这些关系记录下 来,如下图所⽰:⽤⼾发布帖⼦,帖⼦聚合成版块

为类添加职责

在找到概念类并且理清了他们之间的关系后,就可为类添加职责,主要包括两⽅⾯内容:
类所维护的知识,即成员变量或属性
注意要保持属性的简单性,即:只定义与系统责任和⽬标相关的属性;使⽤简单数据类
型定义;不为类关联定义属性。

类能够执⾏的⾏为,即成员⽅法或责任
可以根据动词来判断,再进⾏筛选,与识别类的过程类似。
这个阶段只找出⼀些主要的、明显、与业务规则相关的部分,切切忌在这个阶段不断地细化
根据分析得出的类的职责,⽤类图表⽰如下:

 

建⽴交互图 

多个对象的⾏为通常采⽤交互图来表⽰,UML中最常⽤的是顺序图,⼏乎可以⽤在任何系统的
场景。
顺序图的基本元素有对象、参与者、⽣命线、激活框、消息和消息线,其中消息是顺序图的灵
魂。以⽤⼾登录过程为例,使⽤顺序图描述如下:

软件需求规格说明书

通过识别参与者、合并需求获取⽤例、细化⽤例描述、定义概念类、确定类之间的关系、为类添
加职责、建⽴交互图等步骤,已经完成了需求的定义,并把现实世界中的事物抽象成了⾯向对象中的 类,同时也确定了系统的主要功能和范围,上述的⼯作是编写软件需求规格说明书的基础,只要这些 需求汇总起来就形成了软件需求规格说明书中的需求部分。
软件需求规格说明书做为需求分析阶段交付的成果,对系统设计与系统开发有重要的指导意义,
它的具体组成部分,如:范围、引⽤⽂件、需求、合格性规定、需求可追踪性、尚未解决的问题、注 解、附录等有关内容的详细介绍,这⾥不作过多讨论,有兴趣的同学可以参考国家标准中的相关章节

 国家标准|GB/T 8567-2006

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

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

相关文章

怎么搭建个人小型渲染农场?搭建渲染农场配置

渲染农场是众多机器组成的渲染集群,通常用来渲染你的单帧效果图或动画项目,我们借助渲染农场的力量,可以满足3D项目交期时间迫在眉睫的需求,当你试着在自己的机器上渲染一个复杂的动画项目时,可能需要几十小时的等待时…

gdb与symbol符号表文件的调试

目录 1,剥离命令 2,gdbdebug 文件的调试 今天在调试程序的时候发现,在测试部测试的程序都是剥离了符号表的,导致用gdb无法调试,只有找到符号表文件才能继续gdb调试,好在符号表文件是和程序一起发布的。之…

浅谈作为程序员如何写好文档:了解读者

我作为从一名懵懂的实习生转变为工程师的工作经历中,伴随着技术经验的成长,也逐渐意识到了编写文档是知识和经验传递给其他人的最有效方式。通过文档,可以分享我的技术知识和最佳实践,使其他人更好地理解我的工作。在这里&#xf…

Postgres : 创建schema、创建表空间与指定用户权限

1. 创建新的Schema 要创建 PostgreSQL 中的一个新的 schema,并创建一个只有该 schema 权限的新用户,请按照以下步骤操作: (1)打开 PostgreSQL 客户端并连接到数据库服务器。 (2)创建一个新的…

如何在Oracle存储过程发生异常时获取out类型参数的值

Oracle存储过程关于在出现(自定义/自带)异常下out类型参数的获取问题的分析 ✈️ 场景: 有一些关于金额和时间的精确且量大的计算需要在存储过程中完成。存储过程中有一些自定义的异常。并且将在RAISE前通过out类型的参数将详细的异常原因返回。 但是在…

商业智能BI分析报表很慢是什么原因?应该如何优化?

当下,数据计算已成为了分析工作中必不可少的高频次操作之一,而且在大数据的发展背景下,应用性能往往关系着项目的成败,成为了大家最为关注的产品技术参数。那么我们先来分析一下BI分析表计算很慢的原因是什么,再对症下…

Microsoft Dynamics 365 Business Central 生产订单扣料的几种方法

学习目标: 掌握生产订单扣料的几种方法 学习内容: Forward flush by routing operation(通过工序:向前扣料)Backward flush by routing operation(通过工序:向后扣料)Forward flus…

Java-Redis持久化之RDB操作

Java-Redis持久化之RDB操作 1.为什么redis需要持久化?2.什么是RDB操作?3.请你用自己的话讲下RDB的过程?4.如何恢复rdb文件? 1.为什么redis需要持久化? Redis是内存数据库,如果不将内存数据库保存到磁盘,那么服务器进程退出&am…

匿名对象的特性和使用场景你知道吗?

目录 一、匿名对象的概念 二、单参数和多参数构造场景的匿名对象 ①只有一个参数的构造函数 ②多个参数的构造函数 三、使用匿名对象作为函数的参数的缺省值 四、只为调用类中的一个函数时 五、匿名对象的特性 1、匿名对象的生命周期只有一行 2、匿名对象具有常性 3、当匿…

今天去面一个点工,HR要我会数据库,Linux还有Python,这合理吗?

软件测试出路在哪? 业务编程!! 1、软件测试的变化趋势 变化趋势1: 功能测试是核心,但是价值降低 目前测试这个行业,还是有大量的点工。但是行业的进步,技术的创新,导致了企业的需求…

不用下载的网页版Axure在这里

作为一名产品经理,你一定需要一款能够帮助你更好更快地制作原型,更方便地和团队协作的软件。网页版Axure工具替代即时设计无需下载激活,就可免费使用。那么,Axure网页版工具替代即时设计是如何进行的呢? 首先&#xf…

【数据结构】双向带头循环链表

文章目录 一、什么是带头双向循环链表二、带头双向循环链表的实现(一)链表中结构体的声明(二)头节点的创建(链表的初始化)(三)新节点的创建(四)链表的尾插&am…

( 位运算 ) 231. 2 的幂 ——【Leetcode每日一题】

❓231. 2 的幂 难度:简单 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n 2 x n 2^x n2x ,则认为 n 是 2 的幂次方。 示例 1&…

软考高级架构师笔记1-计算机硬件

目录 1. 前言 & 更新2. CPU组成3. CPU的指令集:4.存储器5. 总线1. 前言 & 更新 注意:绪论不考,直接略过。 计算机硬件章节19-21年没考过,在22年真题考过磁盘调度,根据趋势分析,以后考的概率也不大,了解即可。 本节删掉了第一版中的编码、海明码等内容。 2. CP…

一篇文章搞定《Android异常处理》

------《Android异常处理》 异常种类(简述)编译时异常运行时异常 运行时的异常和崩溃受检时的异常第一种做法:第二种做法: 不受检时的异常(崩溃Crash)异常的传播崩溃的兜底Looper 循环问题主流程抛出异常问题 安全气囊的实现方案设…

计算机组成原理---第六章总线系统 习题详解版

(一)课内习题 (二)课后习题 1.比较单总线、多总线结构的性能特点。 答: (1) 单总线结构:它是用单一的系统总线连接整个计算 机系统的各大功能部件,各大部件之间的所有的信息传送都通过这组总线…

【企业信息化】第6集 免费开源ERP: Odoo 16 MRP + 维护+ PLM +质量全面生产制造管理

文章目录 一、MRP 物料需求计划1.一款软件,满足您的所有需要2.工作中心控制面板3.优化您的库存等级4.条形码,即开即用5.出色报告关键绩效指标6.与其他Odoo应用程序完全集成 二、PLM 产品生命周期管理1.管理工程变更2.集成文件管理3.智能版本管理4.与其他…

还在为项目初始化、依赖管理问题困扰?Dubbo Initializer 来了!

作者:Dubbo 社区 通过这篇文章,你将学习如何在 1 分钟内用 Dubbo Initializer 模板快速创建 Dubbo Spring Boot 项目,帮你解决项目初始化问题。 什么是 Dubbo Initializer? Dubbo Initializer 是一款帮助开发者快速生成 Dubbo …

【0基础也能学会】JMeter:如何开始简单的WEB压力测试?

背景 最近工作上被安排针对Web网站进行性能压测,以评估特定的硬件配置下Web网站可支持的并发用户数。考虑到JMeter是流行的Web性能压测工具,因此趁着这次机会上网查阅了很多关于JMeter的资料,也自己动手进行软件的配置和调测,从最…

前瞻洞察|借助机器学习,揪出利用DNS隐蔽隧道作恶黑手

黑客会利用DNS协议进行违法犯罪活动,那DNS协议到底是什么?它有何作用?为什么会被选作进行作恶的手段?会造成什么危害?怎么检测及研究现状如何?一连串疑问接踵而至。本篇文章中,我们会为大家一一…