[架构之路-247]:目标系统 - 设计方法 - 软件工程 - 结构化方法的基本思想、本质、特点以及在软件开发、在生活中的应用

目录

前言:

一、什么是非结构化方法

1.1 什么是非结构化方法

1.2 非结构化方法的适用场合

二、什么是结构化方法

1.1 结构化方法诞生的背景:软件规模发展:大规模、复杂系统的需要

1.2 概述

1.3 主要特点与核心思想

三、结构化方法在软件开发中的应用

四、结构化方法在生活中的应用

五、结构化方法的本质

附录:软件架构开发流程


前言:

一、什么是非结构化方法

1.1 什么是非结构化方法

非结构化方法是一种与结构化方法相对的软件开发方法论。与结构化方法注重将系统分解为模块化、可管理的组件不同,非结构化方法更加灵活,没有明确的模块化和严格的控制流程

以下是非结构化方法的一些特点:

  1. 自由形式的设计和开发:非结构化方法中,系统的设计和开发没有严格的规定或特定的流程,开发者可以根据自己的理解和喜好来进行设计和开发。这种自由性的好处是可以灵活地调整和改变系统的功能和结构,适应不同的需求和变化。

  2. 缺乏明确的模块化和接口定义:与结构化方法不同,非结构化方法中的系统通常没有明确的模块化结构和明确定义的接口。相反,系统中的组件和功能往往是紧密耦合的,彼此之间缺乏明确的分离和独立性。

  3. 较低的可维护性和可重用性:由于缺乏明确的模块化和接口定义,非结构化方法开发的系统往往较难维护和修改。当需要对系统进行修改或添加新功能时,开发者可能需要涉及整个系统,而不仅仅是局部的某个模块。

  4. 度依赖开发者经验和技能:非结构化方法要求开发者具备较高的经验和技能,能够凭借个人能力和判断力来设计和开发系统。这也意味着非结构化方法的学习曲线较陡峭,并且项目的成败很大程度上取决于开发者个人的素质

尽管非结构化方法在某些情况下可能提供了一定的灵活性和自由度,但它也存在一些潜在的问题和挑战,包括难以维护、无法复用、缺乏可靠性和可扩展性等。因此,在实际软件开发中,结构化方法更常用,因为它提供了一种更系统化和可管理的方式来构建、测试和维护软件系统。

1.2 非结构化方法的适用场合

非结构化方法适用于以下场合:

  1. 创新性和实验性项目:对于一些具有探索性质和创新性的项目,非结构化方法可以提供更大的自由度和灵活性。这样的项目通常没有明确定义的需求和预期结果,需要通过不断尝试和调整来达到最终目标。

  2. 小规模项目:对于规模较小、简单的项目,非结构化方法可能更为合适。在这种情况下,过度的结构和约束可能会显得过于繁琐,而非结构化方法则能够更快速地进行开发,满足项目的需求。

  3. 快速原型开发:当需要快速开发原型以验证概念或进行用户测试时,非结构化方法可以提供更好的途径。这种方法注重快速迭代和试错,以尽快生成可演示的原型,并通过用户反馈进行迭代和改进

  4. 艺术和创意领域:在一些艺术、创意或设计领域,非结构化方法被广泛使用。这是因为创意过程有时更注重自由表达和想象力的发挥,而非结构化方法可以提供更大的自由度和创造力。

需要注意的是,尽管非结构化方法在某些情况下具有优势,但它也具有一些潜在的风险和挑战。缺乏明确的规范和流程可能导致项目失控,增加开发难度和风险,降低可维护性和可扩展性。因此,在选择使用非结构化方法时,需权衡其优缺点,并根据项目需求和团队条件做出合理的决策。

二、什么是结构化方法

1.1 结构化方法诞生的背景:软件规模发展:大规模、复杂系统的需要

结构化方法是20世纪60年代末到70年代初期随着信息技术和软件开发的飞速发展而崛起的一种软件开发方法论。在此期间,许多组织和企业开始开发越来越复杂、规模越来越大的软件系统庞大而复杂的软件项目往往难以处理和维护,而且很容易出现混乱和不可预测的问题

因此,许多软件开发者开始探索新的软件开发方法,并试图解决与复杂系统开发相关的问题。在此背景下,结构化方法应运而生。结构化方法正是为了应对这些问题而设计的——它们强调将复杂的系统分解为更小、更简单且易于管理的部分,从而使得项目更加可控和容易管控。

此外,70年代初期,尼克劳斯·沃斯(Niklaus Wirth)和埃德加·戴克斯特拉(Edsger Dijkstra)等软件开发领域的顶尖人才推广了模块化和结构化软件开发的概念。这促使结构化方法在计算机行业得到更广泛的应用和推广。

最初,结构化方法主要是用来支持大型企业级应用的设计和开发。但是,随着计算机技术和软件开发的迅速发展,结构化方法已经成为了一种普适的、通用的软件开发范式,为软件开发者提供了一种强大和有条理的方法。

1.2 概述

结构化方法是一种软件开发方法论,旨在帮助开发人员构建可维护、可理解和可扩展的软件系统。它强调将软件系统划分为模块化的组件,并定义它们之间的关系和交互,以及清晰而精确地描述数据流和控制流(数据面、控制面)

结构化方法的概述可以归纳如下:

  1. 模块化设计(分解):结构化方法强调将软件系统划分为相互独立、可重用的模块。每个模块具有明确的功能和职责,并定义了与其他模块之间的接口和交互方式。模块化设计使系统更容易理解、测试和维护。

  2. 高内聚低耦合:结构化方法鼓励每个模块具有高内聚性,即模块内的组件紧密相关并协同工作,同时与外部模块保持较低的耦合,以减少系统之间的依赖。这样可以提高软件的可重用性、灵活性和可扩展性,减少系统修改时产生的影响。

  3. 明确定义的接口:在结构化方法中,每个模块都有一个明确定义的接口,该模块的所有外部交互都通过该接口进行。这些接口定义了每个模块如何与整个系统互操作,还有如何通过模块接口进行数据传输和调用其他模块。这种接口定义使得整个系统更加透明和可控。

  4. 逐步求精、逐步分解(串行):结构化方法鼓励迭代和渐进式开发。开发人员通过不断地分析、设计、编码和测试,逐步完善软件系统。这种逐步求精的方式可以提高开发效率、减少风险,并确保软件系统满足最终用户的需求。

  5. 结构化控制流程:结构化方法注重使用结构化的控制流程,如顺序结构、选择结构和循环结构,以提高代码的可读性和清晰度。结构化控制流程的优点是能够更好地控制程序逻辑,并减少潜在的错误。

总体而言,结构化方法的核心思想是将复杂的软件系统划分为更小、更简单的部分,并利用清晰的数据流和控制流来设计和实现这些部分。这种方法能够提高软件系统的可理解性、可维护性和可扩展性,使开发过程更加可控和可预测

1.3 主要特点与核心思想

结构化方法是一种软件开发方法论,具有以下方法论特点:

  1. 独立模块化设计:结构化方法的主要思想是将“大系统”分解为相互独立的小模块,并对每个模块进行设计和开发,以便它们能够独立测试和修改。设计人员和程序员应该专注于单个模块,并确保该模块内部的所有组件相互协作,从而为更大的软件系统奠定了基础。

  2. 明确定义的接口:在结构化方法中,每个模块都有一个明确定义的接口,该模块的所有外部交互都通过该接口进行。这些接口定义了每个模块如何与整个系统互操作,还有如何通过模块接口进行数据传输和调用其他模块。这种接口定义使得整个系统更加透明和可控。

  3. 结构化控制流程:这种方法还强调采用结构化的流程控制,即顺序结构、选择结构和循环结构等,以提高代码的可读性和可理解性。良好的代码结构可以使开发人员更轻松地管理代码,从而更准确和快速地定位错误。

  4. 分阶段串行开发:结构化方法要求分阶段的开发,即将整个开发过程分为不同的部分,从整体规划开始,到具体实现。这些不同的开发阶段具有不同的目标和要求,从而能够更好地控制开发进度和保证质量。

  5. 逐步求精:该方法鼓励开发人员逐步求精,即通过不断迭代和完善,不断提高软件质量和可维护性。每个迭代周期都会对上一版本的软件进行测试和分析,从而使得软件不断接近最终用户的需求。

结构化方法的方法论强调模块化、低耦合、高内聚、结构化控制流程和分阶段逐步完善等原则,这些原则能够提高软件开发效率和质量。而且结构化方法并不能解决所有的软件系统问题,有些情况下也会受到历史因素、组织限制和技术因素等因素的影响。因此,开发人员需要根据实际情况合理地选用和应用结构化方法,才能更好地构建高质量的软件系统。

三、结构化方法在软件开发中的应用

结构化方法是一种软件开发方法论,其目的是通过建立结构化的设计和分析过程来有效地开发和维护高质量的软件系统。

以下是结构化方法在软件开发中的几个常见应用:

  1. 结构化分析-需求阶段=》分解功能:结构化分析是一个系统化的过程,通过对问题领域的需求进行分解和定义,确定系统的功能和数据流程。在结构化分析中,可以使用工具如实体关系图(功能划分)数据流图数据字典来表示系统的逻辑组件数据流动,以便更好地理解和描述系统的需求和功能。

  2. 结构化设计-设计阶段=》分解模块:结构化设计着重于将系统的功能(需求阶段)划分为模块化的组件(设计阶段),以便于系统的开发和维护。在结构化设计中,可以使用工具如结构图和层次图来表示系统的模块结构和模块之间的关系。通过结构化设计,可以提高系统的可扩展性和可维护性。

  3. 结构化编程-编程阶段=》分解语句结构化编程是一种编码风格,通过使用结构化语句(如顺序、选择和循环)来编写清晰、可读性高的代码。结构化编程强调良好的程序结构和模块化,使得程序更易于理解、测试和维护

  4. 结构化测试-测试阶段=》分解用例结构化测试是一种以系统的结构为基础的测试方法,通过执行特定的测试用例来验证系统的功能和正确性。在结构化测试中,通过控制流和数据流覆盖来确保测试用例覆盖系统中的所有代码路径,检测潜在的错误和缺陷。

  5. 结构化文档-所有阶段=》分解文档结构化方法强调对软件系统进行良好的文档记录。通过结构化文档,可以清晰地描述系统的需求、设计、实现和测试过程,以便于后续的维护和开发工作。

结构化方法在软件开发中的应用有助于提高开发效率、降低错误率,并提供清晰的架构和文档支持。然而,随着软件开发方法的不断演进和新技术的出现,结构化方法已经和其他方法相结合使用,以满足不同项目和需求的要求。

四、结构化方法在生活中的应用

结构化方法不仅可以应用于软件开发,还可以在日常生活中帮助我们更有效地组织和管理各个方面。以下是结构化方法在生活中的几个应用:

  1. 时间管理:结构化方法可以帮助我们更好地管理时间,确保高效利用每一天。通过设定目标、制定计划和优先级,可以将时间分配给不同任务和活动,并确保按计划完成

  2. 任务和项目管理:在生活中,我们经常面临多个任务和项目,如家庭事务、个人目标、工作项目等。结构化方法可以帮助我们将任务和项目分解为可管理的子任务,并为每个子任务设定具体的时间和资源限制,以便更好地组织和执行。

  3. 目标设置和追踪:结构化方法可以帮助我们明确并设定具体、可衡量的目标。通过将目标细分为可行动的步骤和阶段,并制定明确的时间表和行动计划,可以更有序地追踪和实现目标。

  4. 决策制定:结构化方法可以在决策制定过程中提供指导和框架。通过对问题进行分析和评估,收集相关信息并权衡不同的选项,可以帮助我们做出理性、明智的决策。

  5. 笔记和记录管理:结构化方法可以应用于笔记和记录的管理,使得信息更易于查找和回顾。例如,可以使用分类和标签来组织笔记,使用时间表或日志来追踪进展和事件。

总体而言,结构化方法可以帮助我们更好地组织、规划和管理生活中的各个方面,提高效率、减少混乱,并增加我们的生活质量。但需要根据自己的需求和偏好来对方法进行个性化调整,以适应个人的生活方式和目标。

五、结构化方法的本质

结构化方法的本质在于提供一种系统化、有组织的方式来处理复杂问题和任务,以产生高质量的结果。因此,结构化方法,并非仅仅用于软件需求分析、软件架构设计、软件编程等领域,其思想可用于解决任何复杂问题

结构化方法强调以下几个重要的方面:

  1. 分解和组织:结构化方法鼓励将大问题或任务分解为更小、更可管理的部分。通过将复杂的系统或任务分解为模块化的组件,并定义它们之间的关系和交互,可以更容易地理解和处理问题。

  2. 层次和逻辑:结构化方法注重层次和逻辑的建立。通过建立清晰的结构和层次关系,可以使问题或任务的处理过程更清晰、有条理。层次结构可以使得问题的不同层次可分解为更小的子问题,并有效地处理各个层次之间的关系。

  3. 逐步求精、逐步分解(串行):结构化方法鼓励迭代和渐进式开发。开发人员通过不断地分析、设计、编码和测试,逐步完善软件系统。这种逐步求精的方式可以提高开发效率、减少风险,并确保软件系统满足最终用户的需求。

  4. 规范和标准结构化方法倡导使用规范和标准化的方法来进行问题和任务的处理。这有助于确保一致性、可重复性,并提高结果的质量。通过遵循规范,可以减少不确定性和错误的可能性,结构化方法把软件的生产分为了几个标准化的阶段:需求分析、架构设计、详细设计、软件编程、测试验证等。

  5. 可视化和表达结构化方法鼓励使用可视化工具和技术来表达问题和任务的结构和关系。例如,使用图表、流程图、结构图等来表示系统结构和流程。这有助于促进理解、交流和共享知识。

  6. 可管理性和可维护性结构化方法的目标之一是提高问题和任务的可管理性和可维护性。通过将复杂的问题分解为可管理的部分,建立清晰的关系和规范,可以更轻松地进行追踪、测试和维护。

结构化方法的本质是将复杂性以结构化和系统化的方式处理,以便更好地理解、组织和解决问题。它提供了一组原则和技术,以促进高效、可靠和可维护的结果的产生。

附录:软件架构开发流程

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

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

相关文章

flutter iOS 视频mov格式转MP4格式

flutter iOS 视频mov格式转MP4格式 前言一、使用video_compress压缩视频总结 前言 今天在写项目的时候,突然发现iOS 里面的有些视频格式是mov的格式,这就导致在视频播放组件无法播放的问题,期间试过替换视频格式,但是又不想存储文…

注解方式优雅的实现 Redisson 分布式锁

1前言 日常开发中,难免遇到一些并发的场景,为了保证接口执行的一致性,通常采用加锁的方式,因为服务是分布式部署模式,本地锁Reentrantlock和Synchnorized这些就先放到一边了,Redis的setnx锁存在无法抱保证…

Ubuntu Server download

前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来,Ubuntu 一直在获得市场份额,截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…

MT8735/MTK8735安卓核心板规格参数介绍

MT8735核心板是一款高性能的64位Cortex-A53四核处理器,设计用于在4G智能设备上运行安卓操作系统。这款多功能核心板支持LTE-FDD/LTE-TDD/WCDMA/TD-SCDMA/EVDO/CDMA/GSM等多种网络标准,同时还具备WiFi 802.11a/b/g/n和BT4.0LE等无线通信功能。此外&#x…

O-Star|再相识

暑去秋来,岁月如梭,几名"O-Star"们已经入职一段时间,在这期间他们褪去青涩,逐渐适应了公司的工作环境和文化,迈向沉稳~ 为了进一步加深校招生之间的交流与了解,提高校招生的凝聚力和…

LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型

根据图片生成推广文案, 用的HuggingFace中的image-caption模型 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数…

Libvirt-Qemu-Kvm 操作手记

(持续更新~) 本文主要用于记录在操作libvirt qemu kvm过程中遇到的问题及原因分析。 Hugepage 让qemu使用大页可以减少tdp的size,一定程度上可以提高性能;使用大页可以用memfd或者file backend。 memfd 操作步骤如下: 在系统中reserv…

idea Maven Helper插件使用方法

idea Maven Helper插件使用方法 文章目录 idea Maven Helper插件使用方法📆1.安装mavenhelper🖥️2.使用教程📌3.解决冲突📇4.列表展示依赖🧣5.tree展示依赖🖥️6.搜索依赖🖊️7.最后总结 &…

Springboot+vue的社区医院管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的社区医院管理系统(有报告),Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的应急物资管理系统,采用M(model)V&am…

Logstash同步MySQL数据到ES

简介 1.1 什么是Logstash? Logstash作为一个具备实时流水线功能的开源数据收集引擎,拥有强大的能力。它能够从不同来源收集数据,并将其动态地汇聚,进而根据我们定义的规范进行转换或者输出到我们定义的目标地址。 1.2 Logstash的…

练习7-在Verilog中使用任务task

在Verilog中使用任务task 1,任务目的2,RTL代码,交换3,测试代码4,波形显示 1,任务目的 (1)掌握任务在verilog模块设计中的应用; (2)学会在电平敏感…

【C++】set和map的底层结构(AVL树红黑树)

文章目录 一、前言二、AVL 树1.AVL树的概念2.AVL树节点的定义3.AVL树的插入4.AVL树的旋转5.AVL树的验证6.AVL树的删除、AVL树的性能 三、红黑树1.红黑树的概念2.红黑树的性质3.红黑树节点的定义4.红黑树结构5.红黑树的插入操作6.红黑树的验证7.红黑树与AVL树比较 四、红黑树模拟…

3.8-镜像的发布

如果我们想将image push到docker hub里面,那么我们的image的名字一定要是这种格式:docker hub id/imageName,例如:lvdapiaoliang/hello-docker docker hub个人账户设置地址: 在push之前要先登录: docker l…

解决开着代理情况下pip或魔搭下载失败

解决开着代理情况下pip或魔搭下载失败 一、前言 最近由于经常配环境导致,老是要来回切clash关掉代理,非常的不方便 如下面的,魔搭模型下载失败 ValueError: invalid model repo path HTTPSConnectionPool(host‘www.modelscope.cn’, port4…

Spark---核心介绍

一、Spark核心 1、RDD 1)、概念: RDD(Resilient Distributed Datest),弹性分布式数据集。 2)、RDD的五大特性: 1、RDD是由一系列的partition组成的 2、函数是作用在每一个partition(split…

C语言回文数(1106:回文数(函数专题))

题目描述 一个正整数&#xff0c;如果从左向 右读&#xff08;称之为正序数&#xff09;和从右向左读&#xff08;称之为倒序数&#xff09;是一样的&#xff0c;这样的数就叫回文数。输入两个整数m和n&#xff08;m<n)&#xff0c;输出区间[m&#xff0c;n]之间的回文数。 …

子虔科技亮相2023工业软件生态大会 以先进理念赋能工业软件发展

作为云化工业软件领先企业&#xff0c;子虔科技携多项全新云原生产品亮相2023工业软件生态大会。 本届大会以“共建新一代工业软件体系&#xff0c;引领制造业高质量发展”为主题&#xff0c;集结行业领先企业、行业专家探究工业软件在核心技术、产业链创新和生态建设等方面创…

Java Finalization‘s Memory-Retention Issues 及Reference类解析

引言 《Effective Java Programming Language Guide》 一书中强烈建议不要使用java的finalize()方法去做对象消亡前的清理。因为jvm调用finalize()方法的时机并不确定&#xff0c;容易导致Memory-Retention Issues。通俗点讲就是内存没办法及时回收。 详细的见oracle的官方说明…

matlab设置背景颜色

matlab默认的背景颜色是纯白RGB(255,255,255)&#xff0c;纯白太刺眼&#xff0c;看久了&#xff0c;眼睛会酸胀、疼痛&#xff0c;将其改成豆沙绿RGB(205,123,90)&#xff0c;或者给出浅绿色RGB(128,255,255), 颜色就会柔和很多&#xff0c;眼睛感觉更舒适。     下面介绍在…

hm商城微服务远程调用及拆分

RequiredArgsConstructor是Lombok库中的一个注解 它会自动在类中生成一个构造函数&#xff0c;这个构造函数会接收类中所有被标记为final的字段&#xff0c;并将其作为参数。这个注解可以帮助我们减少样板代码&#xff0c;例如手动编写构造函数。 eg&#xff1a; public fin…