我们常见的软件设计中,它设计目标都是比较抽象、概括的方式,确定目标系统如何完成预定任务的,因此说软件设计是确定系统的物理模型。同时软件设计还是将需求准确地转化为完整的软件产品或系统的唯一途径,由此可见,软件设计师开发阶段的最重要步骤。说了这么多,到底什么是软件设计?软件设计都设计什么?
什么是软件设计?
软件设计是从软件需求规格说明出发,形成软件的具体设计方案的过程,也就是说在需求分析阶段明确软件是“做什么”的基础上,解决软件“怎么做”的问题。结构化设计方将把软件设计分为概要设计和详细设计两个阶段。概要设计的主要任务是,通过分析需求规格说明对软件进行功能分解,确定软件的总体结构;详细设计阶段确定每个模块功能所需要的算法和数据结构,设计出每个模块的逻辑结构。软件设计阶段结束时的工作成果是软件设计说明书,它描述软件系统的组成模块结、模块间的调用关系,以及每个模块的输入、输出和详细的过程描述。
软件设计都设计什么?
软件设计的部分大概包含以下内容(以较复杂带RTOS的单片机项目为例---嵌入式Linux项目除了技术栈不一样,设计思路是一样的):
1.需求分析和应用评估
需求分析就是根据产品经理根据市场的要求,提出的产品需求(一般包含具体的功能需求,和成本等), 软件人员要根据这些需求分析,确定MCU型号,外围器件,评估设计难度和成本,确定产品的进度规划。
2.软件框架设计
现在主流的嵌入式产品都支持,本地端对端访问(如智能音箱 --- 手机通过蓝牙/wifi直接APP访问), 以及远程网络访问(如停车场终端 -- 云服务器 -- 手机APP/网页前端/软件), 所以软件框架设计包含整个产品的框架和嵌入式产品内部框架,这里详细讲述嵌入式产品内部框架,借用我之前的一张图,就是我简化的本地端对端访问的产品框架。
到了这一步,基本对于项目的后续执行开发就有底了, 大致就分为RTOS的移植和任务,驱动模块开发及单元测试实现,通讯协议的移植和开发,应用层功能开发,下面详细讲述
3.RTOS的移植和任务
RTOS的移植主要任务就是让系统在平台正常执行,完成任务创建,同步,这部分因为主流单片机都已经支持,文档也很清晰,比较简单。
4.驱动模块的开发及单元测试实现
驱动模块的开发不仅指GPIO,UART,I2C,SPI这些硬件的配置,这部分因为现在的底层固件库的封装已经很简单了,还包含外围器件如SPI-FLASH,传感器,EPPROM,CMOS,LCD等的调试,要考虑兼容性和稳定性,即使嵌入式Linux开发中,后面也是工作的大头,此外涉及到通讯相关的,还要能够独立测试,以避免集成后出问题很难分析。
5.通讯协议的移植和开发
对于通讯协议,主要包含通用的标准协议(如TCP/IP, BLE, Modbus),厂商自定义的协议和用于用户自定义协议,这部分一般来说是产品中的重难点,需要有丰富的C语言以及行业相关知识。
6.应用层功能开发
应用层开发虽然能讲的不多,但其实这部分是工作量最大的部分,如按键请求的处理,菜单的实现和显示,数据的分发和处理,以及和上述实现模块接口的读写访问,这部分是最后产品功能实现的核心,会根据需求实时变化,也是产品设计中最经常维护修改的部分。
7.产品测试和维护
完成上述所有步骤,一款产品就能够运行了,但是仅通过自己开发中的测试,和量产还有距离,后续就需要专门的测试,而软件开发人员只要发现问题-解决问题,进行版本维护或者新功能完善就可以,如果这个时间接手项目,还没有重构的权限和时间,工作就很枯燥了。
上面就是一款产品的软件人员主要参与和执行的流程,大部分人只参与其中一部分,但最终产品都是靠这些小部分累积起来的,因此合理的架构设计和模块解耦很重要,不过设计再好的架构,随着代码容量的增大,时间进度的要求以及不同风格人员的维护,到最后都会偏离最初的设计,这也是工程上的难题。
综上所述,什么是软件设计,软件设计都设计什么相信大家已经清楚了吧,想了解更多关于软件设计的信息,请继续关注中培教育。