什么是软件设计?
展开全部
什么是软件设计 ?就笔者的观点来看:软件设计是采用编程或脚本语言优雅地表达并解决现实需求的一门科学和艺术。优雅地表达想传递的意思是,所设计出来的软件应当能容易被人理解、方便扩展和维护。从这一定义可以看出软件设计首先是一门科学,是一门解决用户需求的软件科学。既然是科学,不可避免的要掌握相关的科学知识,比如数据结构、计算机组成原理、编程语言等等,而这些内容也正是大学计算机相关专业所传授的知识。科学知识或许更加容易被量化,拿数据结构为例,一种算法比另一种算法是否更优可以从算法的时间冗余度和空间冗余度进行衡量。
除了科学的部分,软件设计还涉及艺术的范畴。既然是一门艺术,那就一定存在欣赏的问题,也就意味并不是每个从业人员都能欣赏这种艺术,而只有达到了一定的层次且形成了自己的思想后才能欣赏它。由于设计中艺术的非直观性,造成其在现实中不容易被量化,因此难以形成相应的评估准则,进而造成在软件行业容易被忽视。试想想,大学课程有多少内容是在教我们将软件设计当作艺术进行欣赏并追求?
好的软件设计能相对方便(甚至是很方便)地实现新的需求问题。需求分析是告诉我们做什么,其显然非常的重要,而设计更多地涉及怎么做更好。既然对于设计的好坏不能完全通过量化的方式进行衡量,那如何去评价一个软件设计的好坏呢?或者在进行软件设计时,如何去思考以做出一个好的设计呢?这可以通过对一些软件设计原则的把握来做到。设计原则可能有很多,但并不是每一个项目都要同时满足所有的设计原则,另外,不同的项目其特性有可能使得有些设计原则并不适用。另外,设计原则也不是一成不变的,可能因项目的特点又可以抽取出另外的设计原则。笔者将在后续的文章中阐述日常工作中所遵守的软件设计原则。
软件设计是一个不断提炼和抽象的过程。说它是一个提炼的过程,是因为在设计之初会想到很多需要考虑的因素,这些因素在设计工作没有深入之前,并不能发现它们有些是重叠的,或者有些根本就不需要考虑。随着设计的深入,会从众多的因素中得到其中的关键因素并将这些因素付之于实践。设计也是一个抽象过程,需要从众多的表象中找到它们的共性,通过表达共性从而最终描述每个个性,而不应当局限于直接去描述每一个个性。设计的深入过程并不只是一味地思考,除非设计者以前有过类似的设计经验,否则设计过程通常需要进行一定的代码编写工作,以辅助思考,这一点对于开发软件架构师(系统架构师不包括在内)也应当是一样的。
软件设计是一个创造模型的过程。通过对需求的理解和抽象,好的设计将最终构造出一个模型,而且这个模型与现实世界的某样东西可能是相类似的。这个模型除了实现了用户的需求,还向他人展示了她自己是什么模样以及可能会如何行事。打个比方,如果有人发明了一种新的交通工具,他如何最为有效地表达这一新的交通工具到底是什么样的呢?是直接拿一张图纸给他人并说你看看图纸就知道了好呢?还是打一个大家都耳熟能详的比方好呢?显然,后者更好。如果他说这个新的交通工具与现在的轿车很像,只不过,如此一来,听众马上就会想,这个新的交通工具有四个轮子、也有方向盘等等。显然,后者能很快地让听众利用其生活经验快速的接收信息,而好的软件设计也应当做到这一点。软件设计时的模型创造过程,其实就是赋予软件代码生命的过程,由此看来一个好的设计应当是 有生命的。
软件设计是一个做选择的过程。人有时没有选择反而轻松。一个刚毕业的大学生如果只拿到了一个offer,他可能没有选择单位的烦恼,不论单位好坏都去报道就是了。但是,如果他拿了两个offer,选择的烦恼也就有了 是去A单位好呢?还是B单位好?不幸的是,软件的设计过程往往存在......余下全文>>问题二:计算机软件设计这个属于什么专业? 计算机软件设计属于 IT(Internet Technology)专业。
户件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。问题三:软件设计工程师主要是做什么的 软件设计师能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档;户织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。
除了科学的部分,软件设计还涉及艺术的范畴。既然是一门艺术,那就一定存在欣赏的问题,也就意味并不是每个从业人员都能欣赏这种艺术,而只有达到了一定的层次且形成了自己的思想后才能欣赏它。由于设计中艺术的非直观性,造成其在现实中不容易被量化,因此难以形成相应的评估准则,进而造成在软件行业容易被忽视。试想想,大学课程有多少内容是在教我们将软件设计当作艺术进行欣赏并追求?
好的软件设计能相对方便(甚至是很方便)地实现新的需求问题。需求分析是告诉我们做什么,其显然非常的重要,而设计更多地涉及怎么做更好。既然对于设计的好坏不能完全通过量化的方式进行衡量,那如何去评价一个软件设计的好坏呢?或者在进行软件设计时,如何去思考以做出一个好的设计呢?这可以通过对一些软件设计原则的把握来做到。设计原则可能有很多,但并不是每一个项目都要同时满足所有的设计原则,另外,不同的项目其特性有可能使得有些设计原则并不适用。另外,设计原则也不是一成不变的,可能因项目的特点又可以抽取出另外的设计原则。笔者将在后续的文章中阐述日常工作中所遵守的软件设计原则。
软件设计是一个不断提炼和抽象的过程。说它是一个提炼的过程,是因为在设计之初会想到很多需要考虑的因素,这些因素在设计工作没有深入之前,并不能发现它们有些是重叠的,或者有些根本就不需要考虑。随着设计的深入,会从众多的因素中得到其中的关键因素并将这些因素付之于实践。设计也是一个抽象过程,需要从众多的表象中找到它们的共性,通过表达共性从而最终描述每个个性,而不应当局限于直接去描述每一个个性。设计的深入过程并不只是一味地思考,除非设计者以前有过类似的设计经验,否则设计过程通常需要进行一定的代码编写工作,以辅助思考,这一点对于开发软件架构师(系统架构师不包括在内)也应当是一样的。
软件设计是一个创造模型的过程。通过对需求的理解和抽象,好的设计将最终构造出一个模型,而且这个模型与现实世界的某样东西可能是相类似的。这个模型除了实现了用户的需求,还向他人展示了她自己是什么模样以及可能会如何行事。打个比方,如果有人发明了一种新的交通工具,他如何最为有效地表达这一新的交通工具到底是什么样的呢?是直接拿一张图纸给他人并说你看看图纸就知道了好呢?还是打一个大家都耳熟能详的比方好呢?显然,后者更好。如果他说这个新的交通工具与现在的轿车很像,只不过,如此一来,听众马上就会想,这个新的交通工具有四个轮子、也有方向盘等等。显然,后者能很快地让听众利用其生活经验快速的接收信息,而好的软件设计也应当做到这一点。软件设计时的模型创造过程,其实就是赋予软件代码生命的过程,由此看来一个好的设计应当是 有生命的。
软件设计是一个做选择的过程。人有时没有选择反而轻松。一个刚毕业的大学生如果只拿到了一个offer,他可能没有选择单位的烦恼,不论单位好坏都去报道就是了。但是,如果他拿了两个offer,选择的烦恼也就有了 是去A单位好呢?还是B单位好?不幸的是,软件的设计过程往往存在......余下全文>>问题二:计算机软件设计这个属于什么专业? 计算机软件设计属于 IT(Internet Technology)专业。
户件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。问题三:软件设计工程师主要是做什么的 软件设计师能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档;户织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。
展开全部
软件设计出现的较早。由于早期程序变得越来越大,那么模块化程序,让不同的开发人员相互配合就形成了一个主题。多个程序员之间要遵从一定的规范进行编程,然后相互调用,最终使用各个模块进行组合。这种最早的形式也伴随着新的面向过程语言的出现。
软件设计的原始目的是非常简单的,就是我们要去理解一个完成的功能(软件的雏形),然后把不同的功能分化成细节的模块,然后使用一个团队进行协同开发。在这个设计活动中又找出了诸多的开发方法论(如面向过程,面向对象及现在的面向切片等等),同时也发现了诸多开发的模型(如瀑布模型,原型模型,极限编程及敏捷开发等等)。进而形成一个涉及到管理、设计等方面的细化工作,形成统一的软件工程学。同时对于软件设计也相当细化和规范(如算法、时空代价——占用空间及占用运算时间的代价)。所以现在基本上软件设计就是根据系统分师所指派的横块内进行细分(更小的模块),不同的方法论下,不同的开发模型下将功能块分为更细致的小模块(如面向对象的类,结构等)完成更细致的功能。
基本上来说,软件设计与程序设计被混为一谈,狭义的软件设计指就是程序设计,重点在于算法上的设计;广义上的软件设计其实就是对系统进行的设计,要考虑到将来软件的部署及要部署的硬件(包括软件方面与硬件方面)。也就是说,程序员不管是在算法设计上还是程序设计上都是称自己软件设计,而系统分师也在设计整个系统也称为软件设计。这是由于习惯的问题而出现的两种理解——系统设计师与分析师设计的是整个软件系统,涉及内容巨大,从部署到软件性能功能移植性等各个方面的考虑,其目的就是构造一个当前适用并具有一定前瞻性、扩展性的软件系统来支撑整个或大部分公司运行的系统。他们再把系统细分为子系统以对应公司或系统中某个相对独立的系统功能。软件设计师把自身分派到的子系统任务再进行细分,实现不同的层与模块的调用(子系统可以理解为可以相互配合的一个完整的某个方面的功能),其目的就是将理解系统进而设计为可以开发的或进行开发准备的工作;而高程与程序员则对模块功能进行分析,然后进入到开发,开发出相应的功能模块。他们所谓的软件设计设计模块内调用层次(如分层开发等),设计算法与程序以达到指定的功能要求或非功能要求。
软件设计的原始目的是非常简单的,就是我们要去理解一个完成的功能(软件的雏形),然后把不同的功能分化成细节的模块,然后使用一个团队进行协同开发。在这个设计活动中又找出了诸多的开发方法论(如面向过程,面向对象及现在的面向切片等等),同时也发现了诸多开发的模型(如瀑布模型,原型模型,极限编程及敏捷开发等等)。进而形成一个涉及到管理、设计等方面的细化工作,形成统一的软件工程学。同时对于软件设计也相当细化和规范(如算法、时空代价——占用空间及占用运算时间的代价)。所以现在基本上软件设计就是根据系统分师所指派的横块内进行细分(更小的模块),不同的方法论下,不同的开发模型下将功能块分为更细致的小模块(如面向对象的类,结构等)完成更细致的功能。
基本上来说,软件设计与程序设计被混为一谈,狭义的软件设计指就是程序设计,重点在于算法上的设计;广义上的软件设计其实就是对系统进行的设计,要考虑到将来软件的部署及要部署的硬件(包括软件方面与硬件方面)。也就是说,程序员不管是在算法设计上还是程序设计上都是称自己软件设计,而系统分师也在设计整个系统也称为软件设计。这是由于习惯的问题而出现的两种理解——系统设计师与分析师设计的是整个软件系统,涉及内容巨大,从部署到软件性能功能移植性等各个方面的考虑,其目的就是构造一个当前适用并具有一定前瞻性、扩展性的软件系统来支撑整个或大部分公司运行的系统。他们再把系统细分为子系统以对应公司或系统中某个相对独立的系统功能。软件设计师把自身分派到的子系统任务再进行细分,实现不同的层与模块的调用(子系统可以理解为可以相互配合的一个完整的某个方面的功能),其目的就是将理解系统进而设计为可以开发的或进行开发准备的工作;而高程与程序员则对模块功能进行分析,然后进入到开发,开发出相应的功能模块。他们所谓的软件设计设计模块内调用层次(如分层开发等),设计算法与程序以达到指定的功能要求或非功能要求。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。设计基础软件设计的基本目标是用比较抽象、概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。
从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计;(1)结构设计定义软件系统各主要部件之间的关系 ;(2)数据设计将分析时创建的模型转化为数据结构的定义;(3)接口设计描述软件内部、软件和协作系统之间及软件与人之间如何通信;(4)过程设计则把系统结构部件交换为软件的过程性描述。软件设计阶段通常分为两步:一是系统的总体设计或概要设计,采用结构化的设计方法来确定软件的系统结构,主要任务是把需求分析阶段得到的系统扩展用例图转换为软件结构和数据结构;二是系统的详细设计,即进行各模块内部的具体设计,它的任务是为软件结构图中的每一个模块确定实现的算法和局部数据结构,并用某种工具描述出来。
从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计;(1)结构设计定义软件系统各主要部件之间的关系 ;(2)数据设计将分析时创建的模型转化为数据结构的定义;(3)接口设计描述软件内部、软件和协作系统之间及软件与人之间如何通信;(4)过程设计则把系统结构部件交换为软件的过程性描述。软件设计阶段通常分为两步:一是系统的总体设计或概要设计,采用结构化的设计方法来确定软件的系统结构,主要任务是把需求分析阶段得到的系统扩展用例图转换为软件结构和数据结构;二是系统的详细设计,即进行各模块内部的具体设计,它的任务是为软件结构图中的每一个模块确定实现的算法和局部数据结构,并用某种工具描述出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
软件设计即是指从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |