详细设计和概要设计的思考

        概要设计面向需求分析的结果,通常而言是系统用例图。系统用例图可以帮助分析人员确定系统边界,明晰系统功能,利于概要设计过程中分析系统的组成部分。概要设计可以了解为将系统用例图(需求文档)向程序框架转化,这个阶段不涉及程序语言,只是以程序员的思路转化需求,即实现了需求和程序员眼中的系统构建之间的转移。这个时期,对程序员产生的结果主要是模块划分与系统功能的对应。模块的划分不一定是完善的,细节的,而是对系统粗略的程序员感知。
        详细设计阶段,面向的是模块和用例图。这个时候的用例图不再是系统用例,而是更细层次的用例如功能用例,更多使用的是时序图。同样的,这个阶段的模块不再是粗略的,系统级别的模块,而是更细致的,体现出“模块如何实现功能”这样的更小的模块。
         这个阶段,开始展现的是系统的交互细节。系统的交互即涉及到模块的划分和模块间的相互作用和时序。这种相互作用主要实现的是业务逻辑。
        这个阶段的有利工具除了能反映系统功能的用例图,反映交互顺序的时序图,还有更贴近程序员的数据流图。数据流图可以帮助我们很好的界定模块的功能边界和模块间的接口。
        详细设计考察的是设计人员的能力。设计过程是不断反复,完善的过程,设计人员的能力决定了重复修改的次数和修改的影响。
 
        在任务分配上,以前的误区是以功能需求为导向的。“某某某,去实现某个功能”。现在才发现这样的思维是我们项目无法顺利分配,开发完成后难于维护的一个主要原因。举个例子如下:
        在一个农庄里面,一块地种葡萄,一块地种苹果,种葡萄和苹果都需要肥料,所以还有个地方是生产肥料的。于是我派A去种葡萄,B 去种苹果。A需要肥料了,就在肥料地上建了产葡萄肥料的工厂,B在那建了产苹果肥料的工厂。结果,A,B都实现了要求的生产水果的功能,但是肥料就有可能出现混乱。
         体现在我们的系统中,是同一个class中,存在几个类似的函数完成类似的功能。这个就是典型的按功能划分任务的结果。功能实现人员不考虑模块的概念-- 或者有模块,但是没有考虑过,需要功能的时候,就在所谓功能模块中添加自己需要的接口。这样的结果,就是导致模块只是功能的聚合,功能之间可能有重复等。并且,最要命的是,每个人都了解或修改了几个模块,不利于模块的内聚和优化,更没有人清楚的知道,这个模块到底实现了那个接口,这极大的增加了维护难度。
       一个合理的分配方案是,按照模块分类。A,B负责自己的土地(不能在肥料用地上瞎忽悠),C负责肥料生产。A,B需要肥料时,向C请求,C来合理安排。比如,A需要磷肥和氨肥,B需要磷肥和钾肥,那么,C只需要生产磷肥,钾肥和氨肥,这样,不用重复建设,并且,C很清楚肥料的生产过程。
      作为设计人员,或者是项目负责人,比较适合的角色就是农场主。他有如下任务:
     1.概要设计:划分系统模块。即划分农庄的功能区域:苹果区,葡萄区,肥料区。
     2.详细设计:思考并管理模块间的关系。这个时候,可以不要求完全把握各模块的接口,而只需要确定各个模块的功能定义和它们之间的
合作关系,具体的合作接口(细节)不用预先设计。
          一定要注意:模块的定义必须确定,即概要设计必须合理,细小模块的划分必须合理。比起模块功能内聚,更重要的是:不该模块内处理的,必须向管理者提问:谁来提供我的需要!
        详细设计的更多任务是在协调的过程中完成的:A需要肥料,必须告诉农场主,农场主告诉C,C返回他的决定(由C实现),农场主把C的结果告诉A,这样,A 知道了C,农场主也了解了整体。在B告诉农场主,农场主告诉C之后,C可能会调整给A的接口,比如,把磷肥和氨肥混合改成磷肥氨肥单独提供,这样,可以节省磷肥的生产部件,具体怎么安排,还是有C处理。农场主只是负责记录,修改这些接口。
         需要注意的情况是,这个阶段必须首先要求模块功能定义合理、明确,要求人员主动参与,并且必须脱离代码去考虑交互,最后产生接口的稳定、详细的定义。一个可以依靠的工具就是时序图和用例图。为实现一个功能,系统中是时序图或用例图规约下的各个模块之间的调用,现实中,是几个程序员之间的沟通。 这样,无生命的模块就变成了有生命的人,人代表模块做沟通,形成群体自治,即系统。所有功能流转之后,各个模块负责人就能清晰的获得模块的具体功能,并组织好功能,同时,详细设计也完成了。
        责任是什么?责任是系统划分的一种方法,在任务分配上,它也是一个很好的策略,虽然,从简单来讲,它就是:特定模块专人实现。但是,我们实验室开发的时候,可以把详细设计下放到小组,这样,能够弥补实验室设计人员经验不足的问题,促进大家对系统的主动了解。
        需要注意:
        底层代码和核心业务逻辑必须由核心人员实现
        
          设计人员在干什么?做需求,做系统分析,做模块分析,做任务分配。详细设计在哪?在任务分配中不断完善,充分利用群体自治。
          杜绝按功能分配任务。
          编码必须放在最后实现时才考虑,其他时候,一概以用例或时序或数据流图为导向工作。
          模块交互时,要涉及具体语言的特性。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《计算机网络》课程设计任务书 一、课程设计要求 通过本课程设计,使学生对计算机网络的基本概念的理解,通过相关的设计学习网络协议和网络工具的开发,从而充分掌握计算机网络体系结构和应用。 学生必须仔细阅读《计算机网络》课程设计任务书,认真主动完成课程设计的要求。有问题及时主动通过各种方与教师联系沟通。 学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时的向教师汇报。 按照教学要求务必在1.5周内完成课程设计并提交所有文档。 二、设计和调试过程的规范化要求 报告除了在封面(封面格有统一规定)中应有专业、班级、姓名、学号和课程设计日期以外,其正文一般有如下几个方面的内容: 1)对每个题目要有设计思想 在设计思想中,将题目中要求的功能进行叙述分析,并且设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。 给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。对有些题目提出算法改进方案,比较不同算法的优缺点。 如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法; 2)对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分): 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环; 3)最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。 三、课程设计的成绩评定 1、由指导教师根据检查学生程序的情况、课程设计报告的质量和课程设计过程中的工作态度等综合打分。成绩评定实行等级制评分(A:90~100分 A-:85~89分 B+:82~84分 B:78~81分 B-:75~77分 C+:72~74分 C:68~71分 C-:64~67分 D:60~63分 F:<60分)。 2、设计程序的检查由指导教师当面在计算机上检查测试,并同时对程序运行中的问题至少提出三个问题,学生当面回答,教师根据以上检查做好记载; 3、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。发现课程设计报告基本雷同,一律不及格。 四、课程设计报告内容 1)需求分析:在该部分中叙述,每个模块的功能要求 2)概要设计:在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。 3)详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 4)调试分析:测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。 5)课设总结:总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对计算机网络这门课程的思考、在课程设计过程中对《计算机网络》课程的认识等内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值