软件工程——快速掌握结构化开发方法

2024-01-12 20:58

本文主要是介绍软件工程——快速掌握结构化开发方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一个案例

小王在一家IT公司担任项目经理,主要负责IT项目的开发。公司老板找到小王,要求小王开发一个名片自动识别APP产品,人们用手机扫描一下名片,名片上的信息就能自动识别并存储起来,当然需要使用者登录APP才可以。老板要求小王带领团队尽快完成名片自动识别APP产品的系统分析、设计和编码,让产品早日上线。小王决定使用他熟悉的结构化开发方法来开发该产品。在后面的叙述中,名片自动识别APP产品也称为系统或项目。

 

结构化开发方法的阶段

一般来说开发方法都会将开发过程分为几个阶段,结构化开发方法将开发过程分为系统规划阶段、系统分析阶段、系统设计阶段、系统实施阶段和系统维护阶段,这五个阶段也是软件项目的开发生命周期,面向对象开发方法也遵循这五个阶段。在结构化开发方法中,系统分析阶段也称为结构化分析,系统设计阶段称为结构化设计,系统实施阶段称为结构化编程。

系统规划阶段主要是从技术、资金、市场前景等方面确定软件是否可做,该怎么做的问题?例如,课程案例产品涉及到图像识别技术,项目团队是否有足够的技术力量完成图像识别的研发,如果没有图像识别的技术力量,该如何做,是否可以考虑对接百度的AI接口。

在结构化分析阶段主要是确定软件要解决哪些问题?用什么方式来解决这些问题? 软件最终提供哪些功能。 例如,在课程案例中,老板只是提到了用手机扫描名片,至于具体怎么扫描、用户操作流程、识别名片哪些信息、对识别的名片有无质量要求,这些问题都需要小王调研和细化需求,并最终确定软件的功能。

在结构化设计阶段主要是确定软件的技术架构、功能模块、用户界面、数据构成等内容,软件采用何种技术架构?功能模块是如何划分的?用户看到的软件是什么样子?数据库有哪些表?这些都是要在结构化设计阶段完成的。

在结构化编程阶段主要确定软件开发平台的选型、软件产品的测试计划、软件部署等内容。例如,在课程案例中,APP开发肯定要选择Java平台,如果要支持iPhone手机的话,还要选择IOS平台;在编码过程中,为保障编码质量,还需要确定测试计划,对产品进行单元测试和集成测试;部署软件时是选择阿里云,还是腾讯云。

系统维护阶段主要完成系统维护,虽然经过严格测试,系统在运行过程中,依然会出现各种各样的问题需要维护,同时新的需求也要求系统不断地升级版本。

公司老板让小王尽快带领团队对项目进行系统分析、设计和编码。因此小王只需注重结构化开发方法的结构化分析、结构化设计和结构化编程三个阶段就可以了。

 

结构化分析阶段

系统分析阶段也称为结构化分析,该阶段定义系统需要做什么(功能需求),系统需要存储和使用哪些数据(数据需求),需要什么样的输入和输出,以及如何把这些功能结合在一起来完成任务。在系统分析阶段使用的主要图形模型是数据流图(DFD),它显示了系统的输入、处理、存储和输出以及它们如何在一起协调工作。

小王首先要做的工作是做详细的系统需求调查,搜集系统数据流动和业务处理过程的资料和数据,以便深入了解系统中数据的流动、业务处理过程和方法,为建立系统分析阶段的模型提供充分的依据。在课程案例中,小王需要调查用户对自动识别名片这个产品的看法和需求,用户对产品的期望,有哪些类型的名片,名片上具体有哪些信息,用户希望怎么管理名片等内容。

在系统需求调查中,小王通过识别引起系统以某种方式做出响应的所有事件,来识别系统功能需求,关于事件在需求分析课程会详细讲述。下表是名片自动识别APP产品功能需求的主要事件。

 

该项目的主要事件是命名识别事件,触发器是用户使用系统APP扫描名片,事件的来源是由用户发起,事件的目的是将识别的名片信息存储到数据库,事件的响应是系统识别名片并获取名片的信息,该事件的前置条件是使用者要登录系统,技术要求是,一是调用手机摄像头拍摄名片,二是调用百度AI接口识别名片信息,三是只能识别印刷体的名片,事件的性能要求是在通用情况下,请求响应事件小于2秒。

小王将识别的事件(功能需求)使用数据流图建立系统功能需求模型。数据流图的建模一般是自上而下,最顶层的是系统的概括模型,然后逐步分解为第一层数据流图、第二层数据流图、……、第N层数据流图。

 

图 1 名片自动识别APP数据流图顶层图

 

图 2 名片自动识别APP数据流图一层图

上图是数据流图的一层图,一层图是对顶层图的任务分解,从一层图可以看出,任务被分解为使用者注册、使用者登录、扫描名片、识别名片四个模块,外部实体有使用者、名片、百度AI接口,存储的信息有使用者信息、名片信息。

数据模型根据系统需要存储信息的事物类型来创建(实体)。例如,在表格1所示的事件中,系统需要知道使用者、名片的细节信息。这种模型被称为实体—联系图(ER图),实体—联系图中实体对应于数据流图中的需要存储信息的事务。

 

图 3 纸质名片识别入库ER图

 

结构化设计阶段

该阶段主要完成系统的技术架构、各模块的功能设计、数据项以及UI界面设计等内容。技术架构主要描述系统的结构组成,包括系统的各个模块、模块间的关系、系统的对外接口等内容。在结构化分析方法中,技术架构可以由分层的数据流图转换而来,技术架构的主要模型是结构图。

 

图 4 名片自动识别APP结构

上图是项目的技术架构图,项目分为四个模块,分别是使用者注册、使用者登录、扫描名片、识别名片,图中用虚线表示的模块为第三方公司提供的模块,百度AI接口由百度公司提供。识别名片模块调用百度AI接口完成名片图像的信息识别。

在结构化设计阶段,模块的功能设计主要模型是每个模块详尽的数据流图(包括数据字典)、业务流程图、界面图。下面给出使用者注册模块的数据流图和数据字典。

 

使用者注册模块数据流图

 

图 5 使用者注册数据流图

使用者在注册页面填写注册信息,使用者提交注册信息后,注册模块将注册信息存储到数据库。

数据字典

 

数据字典是对数据流图的数据进行详细的说明,这是注册模块数据流图中使用者信息的数据字典,通过数据字典可以看出使用者信息主要有用户名和用户登录密码两个数据项,数据类型都是字符串,用户名的有效范围为3至50个字符,用户登录密码的有效范围为20个字符以内。

结构化编程阶段

结构化编程主要完成系统编码、系统测试、项目部署等相关工作。系统编码主要采用结构化编程技术,在结构化设计阶段划分的每个模块都可以作为一个子程序,子程序内部采用顺序、选择、重复三种基本控制结构。系统测试和项目部署工作同其它开发方法都基本相同,这里就不再详细说明。

 

总结回顾

1、结构化开发方法是使用结构化分析、结构化设计、结构化编程技术的系统开发方法。结构化分析帮助开发人员定义系统需要做什么(功能需求),系统需要存储和使用哪些数据(数据需求),需要什么样的输入和输出,以及如何把这些功能结合在一起来完成任务;结构化设计采用自顶向下的程序设计,把复杂的程序分解为多个程序模块;结构化编程将复杂的程序分解为多个子程序,每个子程序只有一个入口和一个出口,在子程序内部采用顺序、选择、重复三种基本控制结构。

2、在结构化开发方法中。首先要调查并识别系统需求,使用事件描述系统功能需求是常用的方法;然后使用数据流图建立功能需求模型,建模一般是自上而下,最顶层的是系统的概括模型,然后逐步分解为第一层数据流图、第二层数据流图、……、第N层数据流图;数据流图中的实体或需要存储信息的事务可以使用ER图建立数据模型。

这篇关于软件工程——快速掌握结构化开发方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599141

相关文章

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

MybatisX快速生成增删改查的方法示例

《MybatisX快速生成增删改查的方法示例》MybatisX是基于IDEA的MyBatis/MyBatis-Plus开发插件,本文主要介绍了MybatisX快速生成增删改查的方法示例,文中通过示例代... 目录1 安装2 基本功能2.1 XML跳转2.2 代码生成2.2.1 生成.xml中的sql语句头2

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完