软件设计的内容和工作是什么?

软件设计就是把很多东西和问题抽象出来,从不同的层面和角度进行抽象。建议用数学语言来抽象事务和问题,因为数学是最好的抽象语言,它的本质是抽象。把复杂的问题分解成容易处理的部分更容易。对问题或事物进行分解和模块化,使问题的解决变得容易,分解越细,模块越多。它的副作用是让设计者考虑更多模块间的耦合。

软件设计包括软件结构设计、数据设计、界面设计和流程设计。

结构设计是指定义软件系统主要组件之间的关系。

数据设计是指将模型转换成数据结构的定义。

界面设计是指软件内部、软件与操作系统之间、软件与人之间如何沟通。

过程设计是指将系统结构组件转化为软件的过程描述。

软件设计-设计原则

(图)软件设计软件设计

首先,设计应该可追溯到分析模型:软件模块可以映射到多个需求。

第二,设计结构要尽可能模拟实际问题。

第三,设计应该表现出一致性。

第四,不要把设计当成写代码。

5.当你创建一个设计时,你应该能够评估质量。

第六,审核设计,减少语义错误。

软件设计-设计过程

软件设计是将需求转化为软件语句(表达式)的过程。该语句给出了软件的全局视图。通过逐步细化,系统使设计语句逐渐接近源代码。

有两个基本步骤:第一步是设计初步设计,重点是如何将需求转化为数据和软件框架。

第二步是详细设计Detail design,重点是将框架逐步细化为具体的数据结构和软件算法表达式。发生的设计行为、数据、算法和程序设计都需要通过现代程序所要求的界面设计的明确行为来组合。界面设计界面设计建立程序布局和人机交互机制。整个设计过程的质量由一系列正式的技术评审或设计走查来评估。

软件设计指南

(图)软件设计软件设计

1.设计应该显示层次结构,使软件部件之间的控制更加智能。

2.设计应该是模块化的;也就是说,软件要在逻辑上划分成实现特定功能和子功能的部分。

3.设计应该由清晰可分的数据和过程表达式组成。

4.设计应使模块显示独立的功能特征。

5.接口的设计应减少模块和外部环境之间的连接复杂性。

6.设计应该从使用由软件需求分析期间获得的信息确定的可重复方法中得出。

拥有好的设计特性并不是偶然的,而是通过在设计过程中综合运用基本的设计原则、系统方法论以及透彻的评估和评审,才能促成好的设计。软件设计方法每天都在发展。作为一种经过检验和提炼的方法,一个好的设计应该具备以下四个特征,并且在所有这些特征之间保持一致。

1.信息场表达转化为软件设计表达的机制。

2.代表功能部件及其接口的符号。

3.逐步细化和细分的探索。

4.质量评估指南。

开发软件时,无论采用什么设计方法,都必须能够熟练运用一套关于数据、算法和程序设计的基本原理。

软件设计-设计基础

(图)软件设计软件设计

这个软件设计方法的基本原则已经发展了很多年。每一种观念都有不同程度的影响,但都经历了时间的洗礼。基于这些基本原则,设计师可以采用越来越成熟的设计方法。这些基本原则有助于设计师回答以下问题:

1.将软件划分为独立组件时将使用什么标准?

2.如何将软件的原理表示详细划分为函数或数据结构?

3.软件设计的技术质量有统一的标准吗?

M.A .杰克逊曾经说过:“对于一个计算机程序员来说,区分让程序运行和让程序正确运行之间的区别是一个好的开始。”为了“使程序正确”,基本设计原则提供了必要的框架。

抽象抽象,在最高层,指的是在要解决的问题域中用术语描述的解决方案。相对低级的抽象更面向程序,最低级的抽象是描述解决方案的直接可实现的方式。软件设计的每一步都是对相应级别解决方案的抽象的逐步细化。

精化,也叫逐步精化,是指通过不断精化程序细节来开发程序系统的策略。逐步分解程序抽象直到它成为编程语言的过程也创建了程序的层次结构。在这一点上,我们更应该关注细节,这也说明了细化其实是一个煞费苦心的过程。

模块化是指软件可以分为命名的和可寻址的组件(也称为模块),模块可以集成以满足问题的需要。"软件的模块化是允许智能管理程序的唯一属性."换句话说,当你把一个复杂的问题分解成小问题时,解决它会更容易。需要说明的是,即使一个系统必须像“单片机”一样实现,也可以采用模块化设计。

(图)软件设计软件设计系统(架构)

软件架构涉及到程序的两个重要特征:1)模块的层次结构。2)数据结构。这源于需求分析中将现实世界问题的隐式定义与软件解决方案的元素相关联的分割过程。当问题的每个部分被一个或多个软件元素解决时,与问题的定义和解决方案一致的软件和数据结构的进化就开始了。这个过程代表了软件需求分析和设计之间的位置。

控制层次结构,也称为程序结构,描述了程序组件的组织,意味着控制层次结构。它没有描述软件的程序方面,如过程序列、决定的事件/命令或工作周期。下面的分层图显示了模块之间的通信流,并显示了哪些模块是重复的。这个图表描述了一个人可以读取一个文件,计算每个记录的值,并编写一个报告来显示记录的信息和完成的计算。

数据结构数据结构描述了各个数据之间的逻辑关系。数据结构规定了数据组织、存取方法、关联度以及信息选择和处理。数据结构的组织和复杂性只受设计者灵活性的限制。唯一的限制是经典数据结构的数量阻止了更多经过时间考验的结构出现。

软件程序侧重于每个模块的细节,必须提供准确的处理规范,包括事件顺序、准确的决策点、重复操作甚至数据结构。软件的程序表达是有层次的,处理方法应该包括其所有子模块的引用。

信息隐藏的规则表明,由设计决策表征的模块的特征对于其余模块应该是不可见的。换句话说,一个模块应该被设计和指定为包含在该模块内部并且其他模块不可访问的内容对于其他模块来说是不必要的。隐藏是指通过定义一组独立的模块可以实现有效的模块化,这些模块之间的通信只包含实现软件功能所必需的信息。当系统在测试或未来维护期间需要修改时,使用信息隐藏作为设计标准会带来最大的好处。

软件设计-设计方法学

(图)软件设计软件设计

在设计过程中,使用四个领域来促进模块化设计:模块化、数据资料、系统架构和程序设计。

模块化设计降低了复杂度,易于修改,更容易支持系统不同部分的并行开发。模块类型提供的操作特性通过结合时间历史、激活机制和控制模式来表达。在程序结构中,模块可以分为:

1.顺序模块,由应用程序引用和执行,但不能明显中断。

2.增量模块,可以先被应用程序中断,然后从断点重新启动。

3.并行模块,可以在多处理器环境中与其他模块同时执行。

单独的模块更容易开发,因为功能是可以划分的,接口只是用来保证功能的独立性。功能独立性可以用两个定性标准来衡量:内聚性——衡量模块功能强度的相关性,耦合性——衡量模块间相互依赖的相关性。

数据设计数据设计首先是最重要的设计行为,有些人坚信这一点。数据结构的影响和程序的复杂性导致了数据设计对软件质量的深刻影响。这种品质是通过以下原则实现的:

1.适用于功能和行为分析的系统分析原则也应该适用于数据。

2.应该确定所有的数据结构和它们各自的操作。

3.创建一个数据字典,用它来详细解释数据和程序的设计。

4.底层数据设计决策应该推迟到设计过程的后期。

5.数据结构的声明(规范)应该只有那些直接使用包含在该结构中的数据的模块才知道。

6.适当的时候可以使用有用的数据结构和操作库。

7.软件设计和编程语言应该支持抽象数据类型的规范和实现。

架构设计的主要目标是开发模块化的程序结构,表达模块之间的控制关联。此外,系统设计整合了程序结构和数据结构,以及使数据能够在程序中流动的接口定义。这种方法鼓励设计者关注系统的整体设计,而不是系统中的单个组件。选择不同的方法会以不同的方式接近系统的起源,但是所有这些方法都应该认识到拥有软件全局概念的重要性。

程序设计程序设计在数据、程序结构、详细算法描述已经用类似英语的自然语言呈现出来之后,确定程序设计。使用自然语言进行陈述的原因是,当开发团队的大多数成员使用自然语言进行交流时,团队之外的一个新手在不学习的情况下会更容易理解这些指令。这里有一个问题:编程必须详细解释程序,不能有歧义,但是我们都知道,没有歧义的自然语言是不自然的。

软件设计-设计文档

(图)软件设计

在任何系统中,开发文档都是有价值的东西。现在有许多不同的开发文档计划供您在创建系统时选择。其中一个相当不错的模型就是所谓的设计规范(译者注:此处原超链接无效,无法获取其原模板。但是CKER也有一套文档模板叫APM,看起来不错。也许我以后会给你看..._).当你看这个文件的大纲时,请注意各个层次的细节。第一部分显示了从系统描述和其他定义文档中得出的设计结果的总体范围。第二部分显示支持文档的详细描述。第三部分,也称为设计描述,在初步设计阶段完成。第四、五部分将初步设计阶段的内容发展到详细设计阶段。第六部分展示了交叉引用矩阵,以确保以下两个原则:

1.满足软件设计的所有要求。

2.指出实现具体需求的关键模块。

在第七部分中,需要在开发测试程序的第一步(步骤)中测试系统的功能性和正确性。如果详细的测试程序规范已与设计规范同时制定,则可删除本节。第八部分详细说明了系统包装和运输到用户现场的注意事项和要求。剩下的第九和第十部分文档包括算法描述、选型程序、列表数据、流程图、伪代码、数据流程图,所有设计规范开发中用到的相关信息都可以放在这里。

软件设计-面向对象

(图)软件设计软件设计

面向对象设计(OOD)通过模块化的信息和处理方法,而不仅仅是处理方法,将数据对象和处理操作联系起来。这个过程依赖于三个极其重要的设计概念:抽象、信息隐藏和模块化。所有的设计方法都力求表现出这些特征;但是只有OOD的机制能够使设计者在不增加复杂性或不妥协的情况下获得所有三个特征。在OOD中,我们有对象、操作和消息。对象,也称为类,可以是人、机器、命令、文件、汽车、房子等等。操作,包括私有数据结构和转换数据结构的处理方法。消息用于激活调用操作控件和对象的程序结构。也就是说,一个对象的* * *共享部分是它的接口,消息在接口之间移动,指定你要用对象做什么操作,但是你不知道操作是怎么实现的。对象决定在收到消息后如何执行它。现在让我们看看一些工具是如何在面向对象的系统中使用的:

1.伪代码-接近计算机编程语言的指令,但使用类似英语的语言而不是真正的编程语言,以便于查看程序逻辑。以下是处理文件中记录的示例:

开始(开始)

初始化程序(初始化程序)

读取记录(读取记录)

过程记录(过程记录)

将记录移动到打印区域。

写一行(写一行)

结束作业(结束任务)

别跑了。(停止运行)

2.原型——开发软件包的第一个版本或模型的步骤,或者计算机硬件准备好进行生产前测试的步骤。它通常可以使用您最喜欢的RAD工具创建。

3.TOE图(task task,Object,Event diagram)用于显示要完成的任务或工作,执行工作的对象,以及完成这个过程的事件或动作。请看TOE图表,它将两个数字相加:

任务、对象、事件

在启动时启动程序主窗体

输入用户键入的第一个数字。

输入用户键入的第二个数字。

总和EdtResult OnClick

程序退出BtnExit OnClick。

正如你在上面的例子中看到的,这正确地解释了做什么,谁做,什么时候做。

软件设计-应用领域

(图)软件设计软件设计kd机柜设计软件

在现代社会中,软件被用在许多方面。典型的软件包括电子邮件嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。

Kd橱柜设计软件

几乎所有的行业都有计算机软件应用,比如工业、农业、银行、航空、政府部门等等。这些应用促进了经济和社会发展,提高了人们的工作效率,改善了生活质量。

软件设计存在于各种应用程序和软件开发的各个方面。编程通常包括编程和编码的迭代过程,这是软件开发的一个阶段。

软件工程试图指导软件项目的各个方面,从软件的可行性分析到软件完成后的维护。软件工程认为,软件开发与各种市场活动密切相关。如软件销售、用户培训、相关软硬件安装等。软件工程的方法论认为,一个独立的程序员不应该在没有团队的情况下进行开发,同时编程也不应该脱离软件的需求、设计和客户的利益。

软件工程的发展是计算机编程产业化的体现。

软件设计-发展方向

(图)软件设计软件设计

软件开发过程随着开发技术的发展而改进。从早期的瀑布式开发模式,到后来出现的螺旋式迭代开发,乃至最近开始兴起的敏捷开发方法,都表现出了不同时代对开发过程的不同理解,以及对软件行业不同类型项目的理解方法。

注意软件开发过程和软件过程改进的重要区别。诸如ISO 15504、ISO 9000、CMM、CMMI等术语描述了一些软件过程改进框架,这些框架提供了一系列标准和策略来指导软件组织改进软件开发过程的质量和软件组织的能力,而不是给出开发过程的具体定义。

敏捷开发是软件工程的一个重要发展。它强调软件开发应该能够充分应对未来可能的变化和不确定性。

敏捷开发被认为是一种“轻量级”方法。轻量级方式中最著名的应该是“ExtremeProgramming”(简称XP)。与轻量级方式相对应的是“重量级方式”的存在。重量级方法强调以开发过程为中心,而不是以人为中心。重量级方法的例子有CMM、PSP和TSP。

面向方面编程(AOP)被认为是近年来软件工程的又一重要发展。这里的方面指的是完成一个功能的对象和功能的集合。在这方面,有通用程序和模板。[1]