如何设计一款软件的一些感想

        想想入行已经1年有余,天天出了拿需求写代码,完成一个个功能外,自己对整个软件的开发如何诞生,如何设计却了解的很有限。这些天一直在思考着一款软件在让我编码之前都做了什么?一款软件到我这样的程序员开始功能代码的编写之前都是由谁完成的?都是怎么设计的?都是怎么规划的?

        我觉得是时候思考这个问题了,我不是什么牛人,相反我和大多数人一样是一个大学啥都没有学过的超级菜鸟,只是顶个计算机系毕业的头衔混混沌沌的加入了程序员的行列。如果一直这么编写功能下去,我想以后再也走不出代码民工的范畴,其实这也没有什么,关键是思想上已经不可能再有什么进展了,无疑是人生的悲哀。思想被禁锢在一个狭小的范围内,永远不能指点江山。我追求思想上的开放和整体的感知,我觉得这是每个热爱生活的人都该具备的基本素质,具体到软件开发,我觉得每个人都应该把软件架构师等顶级职位当成自己的量化目标。因为当你实现这个目标的时候,意味着你的思想高度也已经达到了思考生活,享受生活的地步了。

        讲了一些自己的想法,说说我最近的感触吧。(设计主线和代码主线)

        一款软件从需求调研,到概要设计,再到详细设计,再到可以形成文档,紧接着编程,测试,发布。以前在软件工程上学到这些条条框框都扔给了老师。现在重新找回来,发现其实树上说的和现实中的差别并不大。我们很多时候的软件都是这样设计出来的。我就以这个作为一个设计主线说说吧。

        需求调研: 说白了,这个就是向软件的使用者罗列一些处理功能需求。其实这个就是问和答的问题。有的时候我们想到我们的软件需要什么功能,然后写出来,参考别人的类似软件放到自己这里来。这个阶段决定了你的软件具备什么样的功能和软件的特色和定位。一款软件有个清晰的定位很重要。(PS:软件不该是万能的,功能的明确才会让你的软件有特色)。

       概要设计:这就是整合用户的需求,列出一个列表来。把整个软件具有的功能划分一个个功能区域和模块。(PS:这里不是程序逻辑模块, 仅仅是功能模块)。这个完成了,基本软件90%的功能就确定了下来。一个概要设计主要完成的其实就是让你明确加深对软件功能的熟悉,更加明确软件的方向。让你接下来的详细设计变的更符合逻辑更通用。(PS:这个概要设计在一些公司应该被什么策划部门列为最详尽的文档吧,其实我想对开发者来说这就是一份功能性文档)。

       详细设计:在我的想法里,这个详细设计是应该由一个项目组的项目经理来主导完成,整个项目成员参与进来的过程。这里是整个软件开发的关键所在。因为这里要完成整个软件的功能的细分,功能模块和逻辑模块的结合。(PS:我所说的逻辑模块是相对于代码来说,由各个逻辑模块联合完成某个功能模块的需求,也可以是一个逻辑模块对应了一个功能模块,如果非要划分,我想把它划分为:一对多的关系。一个功能模块对应了一个或者多个逻辑模块)。在详细设计里我觉得要做到以下几点:

      1、用户的角度来看:结合一项功能如何展现给用户,用户如何操作,将这些场景一个个和概要设计里的功能对应起来。说到代码里这就对应一个函数块或者一个模块的功能

      2、分析概要设计里的关键元素,我记得有术语,不过我忘了。我就叫他关键的对象吧。然后抽象出对象的属性。设计出基本的数据结构。(PS:说到代码里我觉得enum, 

             struct,class, define, const等主要的你能够感知到的对象(再次PS:什么是你能感知到的,说白了就是你能很快想到的,玄吧,比如说人这个对象:身高,年龄等这个就是

            可感知,比如,一个通知类,这种就是非可感知,因为这个是你虚构的)在这个时间确定的)

     3、基本的元素有了,元素要完成的功能有了,这个时候就可以设计整个功能的活动图了,用功能为一条精神指引,用元素作为支撑点,一步步的搭建起来一个活动图。(PS:

           这个是我觉得画活动图的最高境界),两个元素,或者功能无法直接产生联系的时候,那就开始发挥你的想象吧,这就像一条公路的修建,遇水架桥,遇山开山。(PS: 程序

           中的一些“现实中不存在的对象类”我个人觉得就是这么产生的)

     4、当你能够把整个软件的功能以这样一种形式跑通的时候,我觉得整个软件的逻辑模块基本上就定型了,接下来的类图,数据流图,接口的设计应该在前面都思考过,这个

            时候只是整理出来而已了。把这些东西搞好,这个软件的骨架应该就算完成。

     5、以上基本上还没有牵扯到代码,下面的就是我所说的代码主线的主要部分。这个时候,项目经理开始用编译器或者什么神器之类的工具搭建软件的基础框架。不需要写什

           么详细的类啥的,只是把工程的类型,编译选项,要使用的库,以及主要使用的技术等糅合起来,让一个软件的代码基础都显示出来(PS:我不想说这类似人体的骨架,我

           想把他比喻成人体的表皮他们是把骨架和血肉组合起来变成了一个活人,你说呢,不要踹我)

    6、我想到了这个阶段就是我现在从事的代码编写阶段了,大家各司其职。项目经理应该在小组成员开始之前把基本的数据结构等相关代码编写完毕,每个人需要通用的代码

          编写完毕。紧接着我想就是想我这样的程序员开始登场了。写,写,写...

    7、基本就是测试,修改BUG了,就不详述..

综上:其实我把一个软件的需求分析,概要设计,详细设计的前1和2两点划分为软件中的纯设计主线,详细设计的3,4有设计的影子也有代码的影子,属于设计和代码的结合部分,而详细设计第四点以后的部分就被我划分为代码主线的部分了,这时候代码是整个软件项目的主导。前面设计是主导。

       其实我只是说了一个软件设计的大概流程,只是最近的一些感想。具体的实施在这个过程中有很多需要细化的地方。

       有的时候我们在看书,看很多关于软件设计的书,但却忘了停下来思考,停下来结合实际反思。书有的时候仅仅是给了我们一种思考的方式,或者说给了我们一种扩展视野的方式。尤其是软件工程和软件设计类的书,大都泛泛而谈。所以结合实际形成一套自己设计软件的方式才是最重要的,工作1年有余,我感受到自己这方面必须要加强了,代码的功底时间长了机器人都能熟悉,只有思想需要时刻的磨练着。

           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章