搜索
当前位置:首页 > 智能应用 > 智能终端 > 软件设计

软件设计

作者:莫伟雄 2019-04-19 16:48:43 浏览:199

  随着计算机的大力普及,计算机应用已深入各行各业,在大大提高效率的同时,也在深刻影响着人们的生活。计算机的深入应用离不开软件,软件业的发展关系到一个国家的政治和未来,软件产业将成为21世纪拥有最大产业规模和最具广阔前景的新兴产业之一。软件设计中,怎样提高系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。面向对象设计原则是实现可维护性和可复用性的基础,每一个原则都蕴含了面向对象设计的思想,可从不同的视角提升一个软件结构的设计水平。

  目录

  一、软件设计方案介绍

  二、软件设计的优点

  三、软件设计的原则

  四、软件设计的流程

  五、软件设计的模式

  六、软件设计的原理

  七、软件设计发展现状

  八、软件设计发展前景

  九、软件设计方案开发商

  软件设计公司哪家好?

  软件设计如何收费?

  软件设计前景怎么样?

  软件设计包括哪些内容?

  正文

  一、软件设计方案介绍

  软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

  二、软件设计的优点

  1、定制型软件具有用户针对性功能

  定制型的软件可以满足用户对于特定功能的需求进行设计,对用户的针对性很强,每一个功能的开发都经过了产品经理细致的系统分析,可以针对不同企业的实际情况,编制适用、易用的软件,避免企业花冤枉钱,节省成本为企业创造更大的经济效益。

  2、定制型软件开发成本相对较低

  定制软件的价格不一定就比通用版软件的价格要高,定制软件是对企业完全开放源代码的,也就是如果企业想进行调整软件设计或者增添功能,可进行二次开发,不仅可以提高软件的运行速度,同时也能为企业节省费用,这是通用软件不能做到的事情。

  3、定制型软件的售后保障

  定制软件可完全根据企业现有的工作流程编制程序,用户不需学习别人所谓“规范”的业务流程。而且开发商还可满足用户随时升级软件的需求,简单方便地进行管理定制。同时,定制软件若在使用时出现问题,开发商可提供问题的解决方案,售后服务可以说是更有保障性和针对性的。

  三、软件设计的原则

  1、开放封闭原则

  就是对扩展开放,而对修改封闭。其是所有面向对象原则的核心。软件设计追求的是易于扩展复用、封装实现细节、降低耦合度,开放封闭原则是实现这一目标的最直接的体现。(1)开放,对功能或需求的扩展开放,当有新需求或变化时,可依据现有的程序代码进行扩展,以便适应新要求;(2)封闭,意味着一旦设计完成,便可以独立工作,不能对其进行任何的修改。

  2、单一职责原则

  很好理解,一个类只负责一项职责。针对一个类,其承担的职责越多,被复用的可能性就越小。如果类承担的职责很多,就意味着这些职责耦合在了一起,若其中一项职责发生变化,就可能会影响其他职责的处理。

  3、里式替换原则

  里氏代换原则是由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学JeannetteWing教授提出,其严格的表述为:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这种描述让人非常难以理解,换一句更通俗易懂的解释就是:所有基类出现的地方,都可以使用子类进行替换,子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说基类对象出现的地方,子类对象一定可以出现,但反过来则不行。比如我喜欢车子,那么意味着我喜欢自行车,但反过来就不一定,因为我喜欢自行车并不代表就喜欢所有的车子。

  4、接口隔离原则

  有两项含义:(1)客户需要什么样的接口,就提供什么样的接口,不需要的就删除掉;(2)类之间的依赖关系应建立在最小的接口上。也就是说,接口中的方法要尽量的少,接口功能要尽量的细分。

  5、依赖倒置原则

  依赖倒转原则就是要依赖于抽象,不要依赖于实现。高层模块不依赖于底层模块,二者都依赖其抽象;抽象不依赖于细节,细节应该依赖抽象。(Abstractions should not depend upon details. Details should depend uponabstractions.)要针对接口编程,不要针对实现编程。(Program to an interface, not an implementation.)也就是说应当使用接口和抽象类进行变量类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。而不要用具体类进行变量的类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。要保证做到这一点,一个具体类应当只实现接口和抽象类中声明过的方法,而不要给出多余的方法。

  传统的过程性系统的设计办法倾向于使高层次的模块依赖于低层次的模块,抽象层次依赖于具体层次。倒转原则就是把这个错误的依赖关系倒转过来。

  面向对象设计的重要原则是创建抽象化,并且从抽象化导出具体化,具体化给出不同的实现。继承关系就是一种从抽象化到具体化的导出。

  6、迪米特法则

  迪米特法则,也可称为最少知识原则。一个类对自己所依赖的类知道的越少越好,对于被依赖的类,不论其实现逻辑如何,都将这些逻辑封装在自己的范围内,对外通过public(protected可以通过子类访问)方法进行提供服务,否则不对外泄露任何信息,这也体现了数据保密性。

  7、组合/聚合复用原则

  简单的说是,尽量使用对象的组合/聚合,而不是继承来达到复用的目的。

  组合和聚合都是对象建模中关联关系的一种。聚合表示整体与部分的关系,表示“含有”,整体由部分组合而成,部分可以脱离整体作为一个独立的个体存在。组合则是一种更强的聚合,部分组成整体,而且不可分割,部分不能脱离整体而单独存在。在合成关系中,部分和整体的生命周期一样,组合的新的对象完全支配其组成部分,包括他们的创建和销毁。一个合成关系中成分对象是不能与另外一个合成关系共享。

  四、软件设计的流程

  1、首先制定项目计划,最初计划是里程碑性质的。可以先按瀑布模型设置,里程碑点主要为需求评审、设计评审、经过代码开发和单元测试后进行集成测试、部署上线是一个很重要的里程碑,一般用户会期望系统何时能使用进入试运行期。

  2、需求开发阶段:怎么样写好需求很关键,如何学会进行需求开发可以去看下经典的《需求工程》这个翻译的书,不是很厚,但需要能理解为什么那样做更好,这个需要实践经验锻炼自己。如果有项目成员,可以一起做需求,这个阶段对于业务理解、分析、如何开展调研以及文字表述、业务流程图描述还有文档编辑能力都有不少要求。一般分为《用户需求说明书》和《需求规格说明书》,小项目可以写一个《需求分析报告》,《用户需求说明书》是用用户的语言进行描述,让用户和开发团队对于需求的达成一致的理解,《需求规格说明书》,则是对用户需求的分析,形成系统要具有的功能,这个是真正提供用户可交互操作的文档,也就是后期设计和代码开发的重要基线。

  另外,作为了解需求,拿出用户UI和用户交流也是一项比较重要的需求获取手段,虽然这个属于设计的范畴。

  3、系统设计阶段:系统总体架构,结合用户对系统环境、开发语言以及运行的网络硬件等要求,确定开发工具等,对应用系统关系进行架构性设计,通过需求阶段对用户的分析归类,用图的方式描述出用户和各子系统或模块的全局视图,以及和其他系统的关系。也就是搞清楚系统的边界问题。

  概要设计中除了高层架构设计,还需要设计网络拓扑图,以及系统部署图。概要设计比较重要的还有就是子系统、模块进行合理的划分。模块的名称很大程度上会成为用户的主要菜单,如何用用户的角度去取比较清楚的子系统和模块是很重要的。

  4、代码开发和单元测试阶段:这个阶段一般来说需要改进瀑布模型,类似跌代开发,把模块进行合理划分,把项目总体计划的代码开发测试阶段划分为多个时间段,每个时间段都包括代码开发、单元测试和集成测试,这个阶段还需要对需求变更进行跟踪控制,如果需求有变更,那么要把需求文档、设计文档都重新跟上。跌代开发的好处就是不让代码开发阶段拉的过程,没有进行及时的自我检查,不小心到了提交时间,却不是用户想要的,还有可能都不是自己想要的。

  5、测试工作:测试是项目的很重要的环节,怎么测试,怎么准确测试,怎么有效测试,怎么覆盖测试,时间、人手、经验扽个方面都会有制约。高级测试人员能够分析系统各测试要点,在需求、设计阶段都要参与,提早了解如何去测试,能写出测试用例。

  6、文档工作:文档在项目开发中也占有重要位置,除非你觉得代码是项目唯一的成果,那么你把文档抛掉吧,什么都在你的脑子里,团队中人员一走,项目的一部分也就带走了。代码开发其实也需要文档,代码是成果,代码注释是成果,模块开发卷宗也是重要的成果,因为程序员在开发时候的逻辑是怎么样的,对于今后查问题很有作用。除非你的系统设计程度到了方法、类,把代码逻辑也都设计好了,那么程序员就CODEING去吧。

  8、QA是对项目过程的质量保障:有些公司吧QA和测试工作合成一个岗位叫做QA&测试人员,或者就叫QA人员。QA是对项目全过程的监管,独立于项目之外。监督项目经理在各项目里程碑提交相关成果,入库形成基线。

  五、软件设计的模式

  1、边做边改模式

  其实现在许多产品实际都是使用的“边做边改” 模式来开发的,特别是很多小公司产品周期压缩的太短。在这种模式中,既没有规格说明,也没有经过设计,软件随着客户的需要一次又一次地不断被修改。是一种类似作坊的开发方式,边做边改模式的优点毫无疑问就是前期出成效快。对编写逻辑不需要太严谨的小程序来说还可以对付得过去,但这种方法对任何规模的开发来说都是不能令人满意的。

  2、瀑布模式

  瀑布模式将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模式优点是严格遵循预先计划的步骤顺序进行,一切按部就班比较严谨。瀑布模式强调文档的作用,并要求每个阶段都要仔细验证。但是,这种模式的线性过程太理想化,已不再适合现代的软件开发模式。

  3、迭代模式

  也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。

  与传统的瀑布模式相比较,迭代过程具有以下优点:

  1)降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。

  2)降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。

  3)加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。

  4)由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。因此复用性更高

  4、螺旋模式

  螺旋模式是一种演化软件开发过程模式,它兼顾了kuaisu原型的迭代的特征以及瀑布模型的系统化与严格监控。螺旋模式一个很大的特点在于引入了其他模式不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减小损失。同时,在每个迭代阶段构建原型是螺旋模式用以减小风险的途径。螺旋模式更适合大型的昂贵的系统级的软件应用。

  六、软件设计的原理

  1、抽象:软件设计中考虑模块化解决方案时,可以定出多个抽象级别。抽象的层次从概要设计到详细设计逐步降低。

  2、模块化:模块是指把一个待开发的软件分解成若干小的简单的部分。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。

  3、信息隐蔽:信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。

  4、模块独立性:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。内聚性是信息隐蔽和局部化概念的自然扩展。一个模块的内聚性越强则该模块的模块独立性越强。一个模块与其他模块的耦合性越强则该模块的模块独立性越弱。

  七、软件设计发展现状

  软件设计是目前就业非常热门的专业,市场的需求量很大,但是软件设计又是一门非常难的学科,这主要是因为这门学科集成了非常多的客观因素在里面:首先软件设计这门学科是一门通用学科,涉及到目前教育类的各门学科,比如,通信工程、计算机技术、计算机教育、计算机科学,甚至涉及到文科类的经济管理类学科等等,内容非常丰富;其次,软件设计作为全球信息化技术发展的关键技术,因此要求从事软件设计相关工程专业的人员具备全方位、全面的知识,研究领域要从多方面、多方位的角度去研究,比如管理、工具及技术方法等;再次,软件设计作为一个新兴的学科,还存在着诸多不足,由于这门学科是一门比较难的学科,因此从事相关教学的人员比较少,在学校虽然开设了这门课程,但是由于没有完善、成熟的教学模式,因此,学生没有完全的领会软件设计这门技术与思想;最后,也是最为重要的一点,那就是,软件设计的发展是领跑全世界进步的基础,学科发展的非常快,更新速度比较快,因此需要及时、全面的掌握最新的软件技术,这样才能不会与最新技术严重脱节,才能会跟上信息发展的脚步。

  八、软件设计发展前景

  产业互联网将综合利用物联网、大数据、云计算和人工智能等技术来赋能传统行业,这个过程中程序开发是不可避免的,而且在产业互联网阶段,程序开发任务将需要整合更多的资源,涉及到的领域也会更加广泛。以物联网应用体系为例,整个物联网应用涉及到设备、网络、平台和应用四个部分,在设备层需要掌握嵌入式开发技术,平台层需要了解云计算相关的开发技术(PaaS),在应用层需要了解大数据相关的开发技术,这些技术的整合才能形成一个系统的服务,所以在产业互联网阶段,程序开发将更加系统化、规范化。虽然未来在产业互联网阶段,程序开发的前景会比较广阔,但是对程序开发人员的要求也在提高,需要程序开发人员紧跟技术发展趋势,掌握产业互联网所需要的相关技术,比如大数据、物联网等技术。另外,随着大数据的发展,人工智能领域(包括机器学习、计算机视觉、自然语言处理等)也迎来了更多的发展机会,从事人工智能领域也是一个不错的选择。

  九、软件设计方案开发商

  我爱物联网科技创始人莫伟雄,市场营销出身,但很早就认识到未来技术才是企业最大竞争力,毅然投入技术研发领域,专门针对传统企业如何智能升级,帮助传统企业插上技术的翅膀,在万物互联方面,我爱物联网提供业界物联网PaaS+SaaS 服务,完美结合雾计算和云计算,快速从底层融合各种传感信息和第三方系统,一键搭建 “云+联网模块+APP控制端”基础设施搭建。帮助客户在打造智能产品快速升级迭代,在大数据与AI方面,我爱物联网与腾讯、阿里进行战略合作,实现物联网数据与互联网数据的全面融合。而且和各大硬件厂商合作,为客户提供性价比最佳的硬件模块控制板。软件的快速迭代,硬件的成本控制能力,大数据以及多兼容性的连接是未来企业核心的关键,我爱物联网将坚持与客户共同成长的理念,做客户最可靠的技术研发合伙人。

  软件设计公司哪家好?

  如果你要找软件开发公司给自己开发公司,最好对公司各方面进行考察。下面根据我爱物联网方案多年的软件开发经验,来为大家介绍。

  1、案例

  在选择软件定制开发公司时,必须要留意对方的案例如何,有否做过大型的项目,这种项目多不多。而不要只听取对方售前的话,每一个软件公司的售前说的话都是说得天花龙凤,说什么都能做,速度有多快,做了什么什么项目,但实际上等签约后却什么都做不了,最后白花钱不说,还拖慢整个进度。

  2、专业

  在选择期间,可以去初步筛选出的软件公司那里考察一番,看看那家软件公司的专业程度如何,对于项目的开发、测试、集成、验收是否有做专业的规划,在每个环节期间有否出具一些专业的报告和文档类文件,有否获得过一些著名的奖项,而从这些东西可以直接反映出软件公司的专业程度。

  3、售后

  对于软件公司的售前说的话或许可信度并不高,但对于软件公司的售后来说,往往售后更加可信。在选择软件公司的时候,要看看对方是否承诺过软件的免费维护、紧急情况处理等条件,而且要看是否能处理一些突发情况,而且能否在产品不适用后提供软件二次开发的条件,从这里各方面看出软件公司的售后能力如何。

  4、报价

  要知道对于选择方来说,肯定不会“把所有的鸡蛋都放在一个篮子里”,肯定会“广撒网,多捞鱼”,而用户在选择的时候,可以要求软件公司报价,用户就可以根据多家软件公司的报价进行比较,以对方的功能表、报价单进行判别,判断哪家软件公司的报价是虚高,从而选择更合理的软件公司。

  软件设计如何收费?

  近年来,软件外包还是比较流行,一般来说软件开发的报价按人月来报价,即把程序员分成几个级别,每个级别的价格不一样,然后再看这个项目各个级别中各自工作多少个月来确定报价。那么软件开发怎么收费标准?我爱物联网方案详细介绍。

  1、人员成本:自主研发一个新软件并非是简单的代码堆砌,过程中需要涉及产品负责人、视觉/交互设计师、研发人员、测试人员,最终才能发布并让所有员工安装APP使用;

  2、时间成本:一个软件从零起步到研发上线,一般会经历比较漫长的周期,当业务人员经过半年的等待发现产品终于研发完成时,业务需求却已经产生了变化,研发人员劳动成果作废,重新开始,开发时间再次被拉长……

  3、维护成本:开发人员实力、团队项目经验会直接影响后续维护迭代,企业自主研发软件的团队常常是缺乏经验的,后期复杂的改进与维护几乎是在项目开始的时候就是已经注定的事,更别提因为不断更新的需求带来的二次开发任务。

  软件设计前景怎么样?

  随着计算机的大力普及,计算机应用已深入各行各业,在大大提高效率的同时,也在深刻影响着人们的生活。计算机的深入应用离不开软件,软件业的发展关系到一个国家的政治和未来我爱物联网方案认为,软件产业将成为21世纪拥有最大产业规模和最具广阔前景的新兴产业之一。

  高成长:全球软件市场以每年13%的平均速度增长,远大于世界经济的平均增长速度;

  高智力投入:所需固定资产少,生成成本少,纯脑力活动为主;

  服务性强:软件产品售后服务工作量大,而且软件开发商在做系统集成时必须对用户的需求有深入的了解,在实施项目的过程中得到用户的密切配合,因此兼具制造业和服务业的特点;

  高附加值:软件的相对附加值高,一个软件产品诞生后的附加值大约是CPU的2倍、存储芯片的3倍、硬盘的5倍;

  与国民经济关系密切:软件开发行业与各行业都有关联,几乎绝大多数行业的发展都会促进软件行业的发展。因此,一般情况下,只要国民经济保持增长,软件行业就会增长。甚至当国民经济衰退时,也可以保持增长态势,所以说软件是可以做一辈子的行业;

  全球性强:尤其因特网的出现,给软件开发行业带来巨大的发展机遇,也使得软件产品可以在很短的时间内销售到全球,同时,软件开发又是一个受名族文化、风俗、习惯影响较小的产业;

  软件设计包括哪些内容?

  6108技术小编认为一款完整的软件界面设计主要包括软件启动界面设计、软件主界面设计、软件框架设计、菜单栏设计、界面按钮设计、界面图标设计和安装包装完成。

  1、软件启动界面设计

  软件启动界面设计也叫软件启动封面设计,在设计时应使软件启动封面最终为高清晰度的图像,如软件启动封面需在不同的平台、操作系统上使用将考虑转换不同的格式,并且对选用的色彩不宜超过256色,最好为216色安全色。软件启动封面大小多为主流显示器分辨率的1/6大。

  如果是系列软件将考虑整体设计的统一和延续性。在上面应该醒目的标注制作或支持的公司标志、产品商标,软件名称,版本号,网址,版权声明,序列号等信息,以树立软件形象,方便使用者或购买者在软件启动的时候得到提示。插图宜使用具有独立版权的,象征性强的,识别性高的,视觉传达效果好的图形,若使用摄影也应该进行数位处理,以形成该软件的个性化特征。

  2、软件主界面设计

  即软件的主要面板的设计,软件面板设计应该具有缩放功能,面板应该对功能区间划分清晰,应该和对话框,弹出框等风格匹配,尽量节省空间,切换方便。

  3、软件框架设计

  软件的框架设计就复杂得多,因为涉及软件的使用功能,应该对该软件产品的程序和使用比较了解,这就需要设计师有一定的软件跟进经验,能够快速的学习软件产品,并且在和软件产品的程序开发员及程序使用对象进行共同沟通,以设计出友好的,独特的,符合程序开发原则的软件框架。软件框架设计应该简洁明快,尽量少用无谓的装饰,应该考虑节省屏幕空间,各种分辨率的大小,缩放时的状态和原则,并且为将来设计的按钮,菜单,标签,滚动条及状态栏预留位置。设计中将整体色彩组合进行合理搭配,将软件商标放在显著位置,主菜单应放在左边或上边,滚动条放在右边,状态栏放在下边,以符合视觉流程和用户使用心理。

  4、菜单栏设计

  主要包括菜单设计,滚动条及状态栏设计。

  菜单设计一般有选中状态和未选中状态,左边应为名称,右边应为快捷键,如果有下级菜单应该有下级箭头符号,不同功能区间应该用线条分割。

  滚动条主要是为了对区域性空间的固定大小中内容量的变换进行设计,应该有上下箭头,滚动标等,有些还有翻页标。状态栏是为了对软件当前状态的显示和提示。

  5、软件按钮设计

  软件按钮设计应该具有交互性,即应该有3到6种状态效果:点击时状态;鼠标放在上面但未点击的状态;点击前鼠标未放在上面时的状态;点击后鼠标未放在上面时的状态;不能点击时状 态;独立自动变化的状态。按钮应具备简洁的图示效果,应能够让使用者产生功能关联反应,群组内按钮应该风格统一,功能差异大的按钮应该有所区别。

  6、界面图标设计

  图标设计色彩不宜超过64色,大小为16x16、32x32两种,图标设计是方寸艺术,应该加以着重考虑视觉冲击力,它需要在很小的范围表现出软件的内涵,所以很多图标设计师在设计图标时使用简单的颜色,利用眼睛对色彩和网点的空间混合效果,做出了许多精彩图标。其标签设计应该注意转角部分的变化,状态可参考按钮。

  7、安装过程设计

  安装过程设计主要是将软件安装的过程进行美化,包括对软件功能进行图示化。

  8、包装及商品化

  最后软件产品的包装应该考虑保护好软件产品,功能的宣传融合于美观中,可以印刷部分产品介绍,产品界面设计。

参与评价

最新评价

相关推荐

热文推荐