建材秒知道
登录
建材号 > 设计 > 正文

软件设计是什么

追寻的羽毛
洁净的面包
2023-03-05 10:50:12

什么是软件设计?

最佳答案
明理的大山
认真的小蚂蚁
2025-10-07 18:55:55

什么是软件设计?软件设计是采用编程或脚本语言优雅地表达并解决现实需求的一门科学和艺术。“优雅地表达”想传递的意思是,所设计出来的软件应当能容易被人理解、方便扩展和维护。从这一定义可以看出软件设计首先是一门科学,是一门解决用户需求的软件科学。既然是科学,不可避免的要掌握相关的科学知识,比如数据结构、计算机组成原理、编程语言等等,而这些内容也正是大学计算机相关专业所传授的知识。科学知识或许更加容易被量化,拿数据结构为例,一种算法比另一种算法是否更优可以从算法的时间冗余度和空间冗余度进行衡量。

除了科学的部分,软件设计还涉及艺术的范畴。既然是一门艺术,那就一定存在欣赏的问题,也就意味并不是每个从业人员都能欣赏这种艺术,而只有达到了一定的层次且形成了自己的思想后才能欣赏它。由于设计中艺术的非直观性,造成其在现实中不容易被量化,因此难以形成相应的评估准则,进而造成在软件行业容易被忽视。试想想,大学课程有多少内容是在教我们将软件设计当作艺术进行欣赏并追求?

好的软件设计能相对方便(甚至是很方便)地实现新的需求问题。需求分析是告诉我们“做什么”,其显然非常的重要,而设计更多地涉及“怎么做更好”。既然对于设计的好坏不能完全通过量化的方式进行衡量,那如何去评价一个软件设计的好坏呢?或者在进行软件设计时,如何去思考以做出一个好的设计呢?这可以通过对一些软件设计原则的把握来做到。设计原则可能有很多,但并不是每一个项目都要同时满足所有的设计原则,另外,不同的项目其特性有可能使得有些设计原则并不适用。另外,设计原则也不是一成不变的,可能因项目的特点又可以抽取出另外的设计原则。笔者将在后续的文章中阐述日常工作中所遵守的软件设计原则。

软件设计是一个不断提炼和抽象的过程。说它是一个提炼的过程,是因为在设计之初会想到很多需要考虑的因素,这些因素在设计工作没有深入之前,并不能发现它们有些是重叠的,或者有些根本就不需要考虑。随着设计的深入,会从众多的因素中得到其中的关键因素并将这些因素付之于实践。设计也是一个抽象过程,需要从众多的表象中找到它们的共性,通过表达共性从而最终描述每个个性,而不应当局限于直接去描述每一个个性。设计的深入过程并不只是一味地思考,除非设计者以前有过类似的设计经验,否则设计过程通常需要进行一定的代码编写工作,以辅助思考,这一点对于开发软件架构师(系统架构师不包括在内)也应当是一样的。

软件设计是一个创造模型的过程。通过对需求的理解和抽象,好的设计将最终构造出一个模型,而且这个模型与现实世界的某样东西可能是相类似的。这个模型除了实现了用户的需求,还向他人展示了她自己是“什么模样”以及可能会如何行事。打个比方,如果有人发明了一种新的交通工具,他如何最为有效地表达这一新的交通工具到底是什么样的呢?是直接拿一张图纸给他人并说“你看看图纸就知道了”好呢?还是打一个大家都耳熟能详的比方好呢?显然,后者更好。如果他说“这个新的交通工具与现在的轿车很像,只不过…”,如此一来,听众马上就会想,这个新的交通工具有四个轮子、也有方向盘等等。显然,后者能很快地让听众利用其生活经验快速的接收信息,而好的软件设计也应当做到这一点。软件设计时的模型创造过程,其实就是赋予软件代码“生命”的过程,由此看来一个好的设计应当是

“有生命的”。

软件设计是一个做选择的过程。人有时没有选择反而轻松。一个刚毕业的大学生如果只拿到了一个offer,他可能没有选择单位的烦恼,不论单位好坏都去报道就是了。但是,如果他拿了两个offer,选择的烦恼也就有了

——

是去A单位好呢?还是B单位好?不幸的是,软件的设计过程往往存在大量的选择。是用空间换时间好呢?还是用时间换空间好?是现在考虑可扩展性呢?还是将来?等等。因此,毫不夸张地说,设计是“痛苦”的,除非设计主题很简单或直接了当。有苦当然也就有乐,在设计没有最终定下来时,需要痛苦地思考和选择,往往是一个觉得这个也不行、那个也不好的过程。但是,一旦设计最终定稿,会发现“这就是我想要的设计”,随之而来的是三百六十度的大转变,觉得这个也应当就是这样,那个也应当是这样,其结果是设计者能从中体会到一种美,并从中收获乐趣。

软件设计是一个在有限理性范围内追求完美的过程。有限理性非常重要,设计者需要在各种条件允许的情况下做出合理的设计选择。另外,促使设计者用心并“痛苦地”进行设计的动力是设计者追求完美的品德。可以说,如果没有这种追求,就很难获得一个好的软件设计。

最新回答
尊敬的电灯胆
明理的冬日
2025-10-07 18:55:55

软件设计是一系列创造活动,是借助编程语言以简单和优雅的方式表达并解决现实需求的一门科学和艺术。

- 软件设计是一门技术

数据结构,组成原理,操作系统,编程语言…

科学的特点是有规律可循,因此软件设计者需要掌握相关的专业知识。而这些科学知识通常容易被量化和评估。

- 软件设计是一门艺术

并不是技术知识的简单堆砌,而是分析,抽象,取舍…

一个好的设计必然给人带来没敢,也让人值得欣赏。

软件设计的意义(架构的意义)

如下图所示,现代软件设计包含了功能实现、部署、代码扩展性、代码维护性、代码复用性、用户交互。那么为什么需要考虑那么多呢?

关于软件设计的问题

1.是不是开发前一定需要进行软件设计?不能马上编写代码吗?

当软件结构复杂的时候,如果直接编写代码的话,会造成后期一系列的问题,而这个时候软件产品的维护和扩展举步维艰、难以测试和差错,从而直接影响项目的开发效率和产品的最终指令,以及工程师的生活质量。

2.用户需求,需要实现什么功能?使用什么用户交互方式?

软件开发时根据用户所需的功能进行设计开发的。我们需要以用户为中心来思考设计功能的实现。

3.如何部署到用户的设备上去呢?

我们需要考虑软件的部署是因为我们开发使用的设备与最终用户使用的设备可能不一样。所以我们需要考虑软件部署的问题。不能出现开发和测试过程时候软件可以正常运行,到了用户设备时不能正常运行的现象。

4.为什么要考虑扩展性、维护性、复用性?

a)我们需要考虑代码的扩展性是因为,到产品需要升级或者功能增加的时候,我们是否可以很快的吧功能添加上去?

b)当开发人员离职时,后面接手工作的人员是否可以很快的熟悉这份代码并且容易进行维护?

c)当有新项目需要开发时,我们是否可以重复使用这个项目的代码呢?

这些都需要在软件设计的时候考虑的要点。

软件设计的特点

软件设计是一个塑造模型(概念)的过程

软件设计是一个取舍的过程

软件设计是一个分而治之的过程

软件设计是一个在理性范围内追求完美的过程

虚幻的棒球
无私的鸡翅
2025-10-07 18:55:55
你好,很高兴回答你的问题, 软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。软件设计即“…the process of applying various techniques and principles for the purpose of defining a device, a process or a system in sufficient detail to permit its physical realization. ”“ … 应用各种各样的技术和原理,并用它们足够详细的定义一个设备、一个程序或系统的物理实现的过程。 ”对任意的工程产品或系统,开发阶段绝对的第一步是确定将来所要构建的制造原型或实体表现的目标构思。这个步骤是由多方面的直觉与判断力来共同决定的。这些方面包括构建类似模型的经验、一组引领模型发展的原则、一套启动质量评价的标准、以及重复修改直至设计最后定型的过程本身。计算机软件设计与其他工程学科相比还处在幼年时期,仍在不断变化中,例如更新的方法、更好的算法分析、以及理解力的显著进化。软件设计的方法论的出现也只有三十年多一点,仍然缺乏深度、适应性和定量性质,通常更多的与经典工程设计学科相联系。尽管如此,现今的软件技术已经存在、设计质量的标准也可使用、设计符号亦可以应用。带着这些意见,我们一起来看看什么有助于程序员们找到他们的软件涅盘 ( 天堂的意思 ) 。软件设计包括软件的结构设计,数据设计,接口设计和过程设计。结构设计是指:定义软件系统各主要部件之间的关系。数据设计是指:将模型转换成数据结构的定义。接口设计是指:软件内部,软件和操作系统间以及软件和人之间如何通信。过程设计是指:系统结构部件转换成软件的过程描述。

英勇的草莓
友好的铅笔
2025-10-07 18:55:55
UI设计英文叫User Interface翻译成中文意思就是(用户界面)。UI设计是指对软件的人机交互,操作逻辑,界面美观的整体设计。说到这个界面设计,其实非常好理解,因为我们每天都在使用。我们手机里面的APP软件,QQ和微信的界面图标设计都属于UI设计师的工作内容移动端互联网时代,每位同学都有一部智能手机,手机里面看APP界面图标,我们可以称为用户界面,也就是我说的UI设计。简单的来说,UI设计师就是负责设计这些在电子屏幕上显示的产品,(包括游戏UI,网页端,手机,以及目前比较火的VR,AR,其他设备端等)比如微信界面、里面的图标 文字 图片整个操作点击 都属于UI设计师要设计的范畴。所以UI设计一直存在于我们的生活!UI设计起源于美国硅谷,UI设计是2012年由硅谷传入中国,UI设计随着互联网行业的兴起和智能手机的普及而火的一发不可收拾。UI设计是最近几年在国内火起来的,目前UI设计师的平均薪资是国内设计界薪资最高的行业,在北上广深杭这些一线城市UI设计师的平均薪资1万以上。从薪资不难看出UI设计这个行业目前在国内真的很火。UI设计师需要做的工作有,APP界面图标设计,视觉设计,运营插画设计,交互动效设计,原型图设计,平面设计,小程序设计等。好的UI设计不仅是让软件变得有个性有品位,还要让软件的操作变得舒适简单、自由,充分体现软件的定位和特点。UI设计按行业一般分为4种行业分别是移动端UI设计,PC端UI设计,游戏端UI设计,以及其它端UI设计。第一种:移动端UI设计那么什么叫移动端UI设计呢,移动端UI设计就是手机平板上的APP设计,比如微信聊天界面,QQ聊天界面,手机桌面,手机上看到的所有图标界面点了后会有反应的我们都可以理解成移动端UI设计。那么我们来讲解一下移动端UI设计师的工作内容有哪些?移动端UI设计师的工作就是我们的APP界面图标文字按钮等,这一块就是我们移动端UI设计师要做的工作,要做好这份工作的话我们需要学习的东西有很多,比如说要懂理论,要懂用什么颜色,要用什么字体,要用什么版试这些都是需要学习的,看似简单的一个设计往往来说难度性都挺高的,并没有看上去那么简单。不然现在的UI设计师的工资也不会这么高了。第二种:PC端UI设计PC端UI设计就是我们电脑上的软件和网页按钮,比如电脑版的QQ,微信,电脑管家和网页的一些按钮图标等都属于PC端UI设计。其实移动端UI设计和PC端UI设计是差不多的,只不过平台不一样。PC端的载休是电脑,移动端的载体是手机。第三种游戏UI设计那么什么是游戏端UI设计咧?比如王者荣耀,英雄联盟和一些其它游戏中的登录界面、都是属于游戏端UI设计。目前游戏端UI设计在近几年发展并以前没有那么好了,主要是因为现在腾讯网易这些大公司已经把游戏的市场站领了,其它的都是一些小公司,所以这个行业发展没有之前那么好了。而且游戏UI对美术基础要求也比较高。这就是类似游戏的界面,这里面的按钮就是游戏UI设计师用手绘板画出来的,做这个工作的话必需要有美术基础,大公司还要求科班出身,所以这个工作也是比较累的,所以我建议大家做UI工作的话可以选择移动端UI设计,因为目前移动端UI设计比较火。第四种:其它UI设计最后一种就是其它端UI设计,像VR界面、AR界面、银行取款机界面、这些都属于其它端UI设计,其它端UI设计用户较少,但又需要,未来有可能很火,有可能保持现状。

大气的电脑
多情的火
2025-10-07 18:55:55
软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。软件分为系统软件和应用软件,并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。 软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。软件开发的前景还是很不错的,软件开发的毕业生,起点都很高,入职既可做数据库工程师、软件安全工程师、软件管理员,随着经验的积累可以做高级网路工程师、项目主管、项目经理,如果你有魄力的话,还可以自己创业。目前,我国对软件人才的需求已达80万,在未来5年内,合格软件人才的需求将远大于供给。因此,学软件开发,就业成香饽饽。

天真的乐曲
重要的魔镜
2025-10-07 18:55:55
1基本内容

基本内容详细设计详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。

传统软件开发方法的详细设计主要是用结构化程序设计法。详细设计的表示工具有图形工具和语言工具。图形工具有程序流程图、PAD(Problem Analysis Diagram)图、NS(由 Nassi和 Shneidermen开发,简称 NS)图。语言工具有伪码和 PDL(Program Design Language)等。

主要任务:

1.为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;

2.确定每一模块使用的数据结构;

3.确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部模块的接口,以及模块输入数据、输出数据及局部数据的全部细节。

在详细设计结束时,应该把上述结果写入详细设计说明书,并且通过复审形成正式文档。交付给下一阶段(编码阶段)的工作依据。

4.要为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。

详细设计的工具:

1.图形工具

利用图形工具可以把过程的细节用图形描述出来。

2.表格工具

可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的条件。

3.语言工具

用某种高级语言(称之为伪码)来描述过程的细节。

秀丽的火龙果
细心的抽屉
2025-10-07 18:55:55
就我理解来说,软件设计应该是站在一个比较高的高度了,比方说,在我们现在的开发团队中的架构师,他就是软件设计者,因为我们后期的全部活动都在他的架构下产出的。比如说,数据库的设计,表的关联等等,非常非常重要的角色。可以这么说,如果一个好的设计师,那么后期非常容易做,因为他回考虑可扩展性啊、灵活性啊等等的。而如果一个不及格的架构师,那么会累死你。

而开发,说的白点就是代码工,就是日常开发的。

就这么理解吧。

感性的酸奶
饱满的诺言
2025-10-07 18:55:55
软件设计师属于软考中级资格考试,软考也就是软件水平考试,是由人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)领导的级考试。通过软考获得证书的人员,表明其已具备从事相应专业岗位工作的水平和能力,用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务。软件设计师属于软考中级,取得中级资格可聘任工程师职务,可以申请中级职称,对于升职加薪是有一定好处的。通过软考软件设计师考试拿到了相应的软考证书,除了可以申请职称外,在一些城市落户还可以申请积分,对于想要在大城市落户的人来说有一定帮助。其次,有了软件设计师证书在一定程度上也提高了自己在同行业中的竞争优势,对未来发展也是有好处的。