其实这系列文章的第一篇就应该写软件设计,却因为软件设计更需专业,感觉沉甸甸的。所以一直在找资料、看书,验证我的想法的合理性或者修正我的想法。经过两个月左右的不断总结,形成此篇。
我把软件设计分为四个重要部分,产品规划,架构设计,模块设计与编程修养。从各个侧面分析一个产品设计成功所需要的要素。
良好规划。产品有生命周期,在不同的阶段产品的使命不同,或者说根据研发规律来开发产品,不冒进,不迟缓。一家做汽车行业管理软件的公司,他们把一个产品分为七个阶段,具体如下:
-
第一版,漂亮的包装,专业软件界面,统一操作,专业词条(业务宣传用);
-
第二版,稳定,实现主要功能(现场应用);
-
第三版,增强功能,稳定,易用,易维护,便捷升级(业务扩大);
-
第四版,兼容,容错,易阅读,内部代码重构优化;
-
第五版,性能优化;
-
第六版,功能分类萎缩,分类增强;
-
第七版,补丁,维护版本,团队萎缩,下一代产品酝酿。
从中可以看到产品很明显的成长过程,同时过程中不同的阶段的规律,有计划、有目的的实施研发,使研发过程顺畅合理。在我们的研发过程中,强调功能性能一步到位。殊不知,这对软件设计,特别对复杂的软件来说是及不科学且不现实的。我们的产品,第一版的目标就是功能完备,接下来程序员就像消防队员一样,哪里有火就扑向哪里,进行无休止维护。而我们的产品较为复杂,像下行抄表模块,任务繁多,逻辑复杂,而用户需求各不相同,三个客户一小改动,五个客户一大改动,如果载波厂家有较大变动,我们的程序可能要伤筋动骨。虽然我们的产品和洗车管理软件不同,他的生命周期与我们的产品也不一样,但是我产品也应该有相应该的阶段性使命,尊重并突显研发产品生命过程,就如我们之前所说的过程控制,根据不同的阶段的特点重点把握。根据我们产品及市场需求的特点,我拟定了一个产品开发阶段:
-
第一版,实现主要功能,稳定,便捷升级(现场挂试);
-
第二版,增强功能,稳定,易用,易维护(业务扩大);
-
第三版,性能优化,兼容,容错,易阅读,内部代码重构优化(降成本);
-
第四版,功能分类萎缩,分类增强,团队萎缩,下一代产品酝酿。
架构设计。最近京东商城后院起火,他用10年前的编程思想无法承载现今数据量的冲击,不是扩硬件,买服务器就可以解决的,所以架构亟需优化和重组。淘宝后台也是四易架构,现在已经达到4.0,满足双11节大流量的压力,相反几大商业银行服务后台却几次宕机。看来架构设计对一个产品的发展多么重要。我们的产品逻辑复杂,功能繁多,特别是用户需求各不相同,每个用户都要有不同的程序来支持,所以我们的产品也需要良好的架构来满足功能扩展和功能个性化修改。有国外研究数据表明,好的构架能减少50%以上的维护工作量。
我认为对我们产品来说好的架构应该做到以下两点:
-
良好的功能扩展,比如扩展协议或扩展一个载波模块;
-
各功能模块低耦合;
低耦合就是软件在构造的时候,各个模块、各个功能都不会过度依赖于它周围的环境。只有这样,才能使我们的模块在周围发生变更时不受影响,做到易于维护和易于适应变更。正因为如此,也使它更易于重用到其它功能类似的环境中,提高了重用性。高内聚则使软件中的各个模块能够各尽其能而又充分合作,也就是对于软件问题空间中需求的各个功能,系统可以合理地把它分配给各个模块来共同完成,而不是一个或几个八面玲珑、包打天下的超级类一个人完成。而对于该系统中的某一个模块,具有自己高度相关的职责,即该职责中的几个任务是高度相关的。每一个模块都决不去完成与自己无关职责的任务。
模块化设计。我们已经形成了模块化设计的意识,但是现有产品模块间耦合太强,不适合模块的移植复用。模块化设计应该做到把功能模块做成类似Windows中的插件一样灵活方便。模块化设计不仅指功能模块化,应该把模块化向下延展,达到程序结构的共同,函数共用。因为模块化的目的就是为了功能及代码的复用,降低程序复杂度,使程序设计、调试和维护等简单化,更提高了软件质量。
编程修养。按理论编程修养对个人来说最为重要。软件设计新员工的入职的第一课应该是编程修养。编程修养最基本的要求就是书写格式,正如语言,普通话最易沟通,若每位显其个性,用方言交流,结果会是交流不畅,甚至接收信息错误。编程风格也要有个统一的标准,以便大家交流和后续维护。在大学时我看过林锐博士的《高质量C++编程指南》,比较浅显易懂,也适用于我们。如果说规范书写格式是为了大家的沟通与交流,那么编程修养更深层次的意义就是实现高质量的编程,少出错误。我和张涛沟通,发现平时最容易出问题的是对函数入口参数没有加入口判断,导致一些莫名其妙的结果,很难查,所我们设计了一个函数编写规范,如下:
/*
函数注释
P为入口参数,Q为返回值
*/
INT8U
ABC(*P,*Q)
{
INT8U
err;
*P、*Q有效性判断;
代码;
Return
err;
}
在这个规范中,参数与返回值都以入口指针实现,减少使用全局变量,减少代码的耦合性;如有入口参数,必须对入口参数进行有效性判断;返回值为错误代码,易查错。这个规范看似简单,却能把一些隐含的逻辑问题处理在设计过程中,减少不必要的问题,提高编程质量。这个函数规范只是其中一个例子,相信很多人都能做到这些,但是编程需要一惯性,一如继往,一次不留心都可能出错,所以把一些好的习惯整理成规范,时刻遵守更有效果。什么是修养?什么是能力?在我看来,在某种程度上他们是一致的,就是看自己有多少学习的或总结的可为我所用的习惯及技能。在网上看到有人说一个程序员要做到以下几点算好的程序员,拿出来与大家共勉。
-
有专研精神,勤学善问、举一反三。
-
积极向上的态度,有创造性思维。
-
与人积极交流沟通的能力,有团队精神。
-
写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。
分享到:
相关推荐
施工日记管理软件为施工企业项目部各级管理人员以及现场监理、业主代表提供统一的每日施工情况记录和管理追踪服务功能,同时包括查询、增加、打印等功能。 日记管理软件设计成为多用户管理模式,即可以为多人提供...
大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发...
58.时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)毕业设计项目管理系统计算机软件工程大数据专业 详细设计文档链接:http://t.csdnimg.cn/ievGA 内容概要: 时间管理...
海文项目管理一款为《工程项目经理》设计的软件,有施工进度,关键点编纂,工作安排,施工日记,文件档案经管,主动考勤情况分为五种:√ 出勤、☆ 加班、○ 事假、■ 矿工(扣二个出勤)、△ 半个班,工资主动计较...
资源包含文件:lunwen文档+软件安装说明书+源码清单+项目源码及数据库文件 日记平台共分两个部分,一部分是面向用户的部分,包括:时间、天气、心情、位置、背景音乐模块,顾客在线注册、登陆、修改信息、编写日记、...
第二章软件需求分析,在本章节中,我们将逐一分析制作过程中遇到的问题,例如:看日记,写日记,删除日记,日记管理等,并且把相关数据做成数据字典;第三章软件概要设计,在这一章节中,我们将把各个问题一一作以...
第二章软件需求分析,在本章节中,我们将逐一分析制作过程中遇到的问题,例如:看日记,写日记,删除日记,日记管理等,并且把相关数据做成数据字典;第三章软件概要设计,在这一章节中,我们将把各个问题一一作以...
人力资源管理软件对单据设计模块进行了优化 针对98环境做了优化(感谢中秋月) 2008-03-25 人力资源管理软件发布1.4版本,做了以下改进 人力资源管理软件员工资料增加了辅助分组(感谢中秋月,天隼) 保险基数支持...
Android Studio项目+报告+app文件
基于javaEE健康管理系统SSH设计软件源码+数据库+word毕业论文文档. javaEE健康管理系统主要功能包括:教师登录退出、教师饮食管理、教师健康日志、体检管理等等。本系统结构如下: (1)用户模块: 实现登录功能 ...
天星财务管理软件是一款专业的企业财务软件产品,它具有中小企业财务管理所需要的所有必要元素,从企业的财务收支管理到款项凭证管理,从企业的投资资金控制到人员工资管理,从企业的差旅费用报销到帐款借出借入,它...
第二章软件需求分析,在本章节中,我们将逐一分析制作过程中遇到的问题,例如:看日记,写日记,删除日记,日记管理等,并且把相关数据做成数据字典;第三章软件概要设计,在这一章节中,我们将把各个问题一一作以...
基于SpringBoot+Vue的时间管理系统源码+数据库(毕业设计) 高分通过项目,已获导师指导。 本项目是一套基于Springboot的时间管理系统,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也...
基于Android平台的星座查询软件设计.doc 基于Android手机平台的买火车票软件的设计与实现.doc 基于android手机平台的吃豆人游戏设计与开发.doc 基于Android手机平台的音乐播放器-毕业论文.doc 基于android手机通讯录...
毕业设计:Java项目之jsp个人网站管理系统(源码 + 数据库 + 说明文档) 论文目录: 二 需求分析 7 2.1 开发工具以及技术 7 2.1.1开发语言 7 2.1.2开发工具 8 2.2 业务流分析 9 2.2 .1 数据流分析 10 2.2.2系统模块...
个人中心、用户管理、日记信息管理、美食信息管理、景点信息管理、新闻推荐管理、日志展示管理、论坛管理、我的收藏管理、管理员管理、留言板管理、系统管理,前台首页;首页、日记信息、美食信息、景点信息、新闻...
本毕业设计首先对Jsp日记本系统的基本情况进行了分析,提出开发本系统要实现的功能和需要解决的问题,对系统进行了详细的需求分析。 系统的主要功能是提供用户日记的记录和管理功能。用户可以通过本系统进行日记的写作...