Print

关于举办“软件详细设计师”高级培训班

主办单位:中培网   中培管理咨询

时间地点:2011-06-15至2011-06-18 在 深圳

学员对象:各类 IT/软件企业和研发机构的技术总监,软件架构师、软件设计师、程序员。最好你工作2年以上,并且遭受过客户需求经常变更的折磨和蹂躏。

费  用: 4500元

【培训对象】

各类 IT/软件企业和研发机构的技术总监,软件架构师、软件设计师、程序员。最好你工作2年以上,并且遭受过客户需求经常变更的折磨和蹂躏。

【课程收益】

【课程大纲】

时间地点:2011年6月15日-18日深圳

培训费用:4500元/人(含教材、培训费、培训期间午餐以及学习用具等)食宿统一安排,费用自理。

培训对象:各类 IT/软件企业和研发机构的技术总监,软件架构师、软件设计师、程序员。最好你工作2年以上,并且遭受过客户需求经常变更的折磨和蹂躏。

各有关单位:

如果你是具有多年经验的软件设计师,请问什么是好的设计?

如果你不知道什么是好的设计? 怎么可能实现优秀设计呢! 那就听听世界大师们怎样定义什么是好的设计.

软件大师Peter Code认为一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性。

在《敏捷开发的艺术》一书中,James Shor,他为设计质量下了一个非常具体的定义:“一个良好的软件设计在最小化软件的创建、修改和维护时间的同时,保证了运行性能。”

他们为什么都认为软件的可维护性是非常重要呢. 这是因为:

30年前, Ed Yourdon在Structure Design一书将经济学作为软件设计的底层驱动力.软件的成本Cost(total)可以分解为初始开发成本Cost(develop)和后期维护成本Cost(maintain):

Cost(total)= Cost(develop)+ Cost(maintain).

而维护成本包括以下几个部分:

Cost(maintain)= Cost(understand)+ Cost(change)+Cost(test)+Cost(deploy).

随着软件开发经验知识积累,我们意识到软件维护成本远远高于它的初始开发成本.这是因为理解现有代码需要成本,修改代码需要成本,修改之后还需要测试和部署这也需要大量成本. 最终发现软件的维护成本远远大于初始创建成本.

Cost(maintain)>> Cost(develop)

但是我们的软件设计师却很少关注设计的可维护性,设计师会发现现实中的软件系统几乎总是会慢慢变为一个烂摊子. 开始漂亮的设计随着时间的推移会慢慢“发出腐化的臭味”.去年才构建的漂亮小巧的系统,到了今年却变成了由一堆纠缠不清的函数和变量搅和在一起的“代码浆糊”.

为什么会这样?为什么一个原先好好的设计会逐渐“发出腐化的臭味”?为什么它们不能保持原先那样的清晰简洁呢?

有时候设计人员会把原因归咎于客户,责怪他们总是改变需求.自我安慰地认为,只要客户的需求仅限于他们最初所声明的,那么我们的设计就是没问题的,所以错就错在客户改变了他们的需求.然而问题在于:需求总是在改变.那些不能适应未来需求变更的设计是糟糕的设计.能够适应未来需求变更的设计是每一位合格的软件开发者的目标.

如果你是技术总监或者技术经理,请问怎样才能提高我们技术团队人员的设计能力? 为什么我们的团队经常加班,但是效率非常低? 仅仅靠加班和加人就可以吗?

现在国内的项目成员经常离职,平均技术积累的才3年经验左右,这样导致我们的团队经常必须面对大量的新设计师. 我们学习了面向对象,设计原则,设计模式. 可惜有几个真正可以把这些思想应用到实际项目之中. 往往这些思想变成了一种谈资,变成了面试和入职的门槛问题. 我们的开发团队经常加班, 加人,可以总感到人手不够? 我们的开发效率非常低,.

为协助国内软件企业及软件设计师快速掌握以上技能,在国内组织了一批“源于实践,指导实践”的专家,结合多年国内外项目开发的实战经验,让学员如果做详细设计,什么样子的设计才是好的,什么样子的设计是拙劣的.如果才能提高我们的设计能力. 帮助大家学以致用,消除“知与行”之间的鸿沟。

课程特色:

本课程注重实战,采用案例贯穿方式完成授课,让学员体验软件详细设计的完整过程,掌握软件详细设计的基本原则和模式,同时课程也以大量失败案例来警示学员,避免重蹈覆辙。

课程目标:

1:优秀设计的特征?什么是优秀设计?如何实现?

2:什么是架构?什么是设计?详细设计做的什么程度?编码就是低级工作吗

3: 预先设计可以搞定所有问题吗?软件需求为什么老是变化?设计应该怎样应对变化?

4:设计复用? 为什么我们总是重复劳动,个人重复,小组成员重复?不同小组之间重复.

5:设计原则/设计模式? 我们为什么学习了设计模式,却根本不会使用?

6:软件设计实现功能就可以了吗? 怎么考虑设计质量? 我们老是赶进度而忽略软件质量?

7:为什么我们的软件开发团队整天加班? 软件仍然很难维护?我们做错了什么?

8:UML到底可以帮助我们做什么?可以提高设计质量吗?为什么我们真正很少使用?

9: 设计如何评价? 如何度量? 为什么我们设计评审经常吵?谁也说服不了谁?

10: 其他大型项目的详细设计是如何做的? 和我们到底有什么不同?有什么值得学习的?

学员基础:

学员学习本课程应具备下列基础知识:

1)了解OOP(面向对象)编程相关概念;熟悉Java/C#或者C++语言;

2)简单了解UML基本语法(主要使用类图和顺序图等常见几类UML图)。

核心要点:

本课程主要包含以下几个方面的内容:

1、结合电信、电力、税务和金融,互联网等多个项目实战案例进行分析。详细介绍相关项目设计思想.

2、鉴赏经典的开源项目,如临摹钢笔字贴一样,让我们看看好的设计应该如何去做。该开源项目均出自世界大师之手.

3、软件设计基本原则:结合案例分析这些原则,特别是一些最基本的设计原则,是如何应用在软件详细设计之中的。

4、设计模式: 知道模式是什么是一回事,而真正理解如何应用模式就完全是另一回事了。借助真实项目案例,展示如何在实际开发之中正确的选择和运用模式,而不是靠所谓的艺术感而进行设计堆砌。

5、常见设计的坏症状: 介绍目前我们常见的糟糕的设计坏症状,以告诫学员,今后如何避免出现这样的拙劣设计。

6、重构和持续集成:软件并不是在一开始就可以设计的完美无缺,因此可以通过预先设计,经过不断的重构进行改善,重构是实现优秀设计的一种重要手段,设计模式往往是重构的目标。

7、UML建模技术如何在设计之中进行应用。避免目前UML语法式的学习,以避免过度滥用UML。

8、软件通用机制的设计与实现:介绍常见详细设计之中必备的通用机制(比如异常处理框架,日志处理,事务,Cache,工作流,通信,接口,安全)。

9、敏捷设计:学习敏捷设计方法的思想,价值观、原则和实践,对敏捷设计有一个清晰全面的认识。

10、应用框架(Application framework)设计:结合具体案例进行分析,如何应用和设计Framework。

课程大纲:

第一单元 什么优秀设计以及如何实现

内容一:什么是好的设计

1.什么是好的软件详细设计和衡量的手段

2.世界大师的观点(Robert C Martin , Peter Code,` James Shor)

3.我们现实项目的情况,随时需求的变化,我们自以为豪的设计,都逐渐变烂,变成纠缠不清的代码浆糊.

4.可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标

5.灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标

6.可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标

7.分析真实项目,如何做的详细设计,给我们哪些启示,我们可以学习到什么

8.分析我们在项目之中是那些原因导致了没有实现这些目标.

内容二:案例- 某省移动基站综合管理项目案例

1.某省移动项目,必须考虑支持多种设备厂商

2.初始设计的问题分析

内容三:如何实现优秀设计—预先设计与分析

1.设计基本原则

2.发现和封装变化的原则

3.面向对象的基本原则(OCP/SRP/ DIP等基本设计原则)

4.共性和可变性分析原理

5.根据共性性分析,进行行为职责或者数据的抽象

6.根据可变性分析,进行职责的结构分析和实现

7.结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化

内容四:案例- 某省电信网管项目

1.某省移动项目,必须考虑支持多种设备厂商

2.初始设计的问题分析

内容五:如何实现优秀设计—发现变化/封装变化/隔离变化

1.发现变化

2.封装变化的原则

3.隔离变化

4.局部化变更-可修改性战术目标是减少由某个变更直接影响的模块数量.

5.防止连锁反应-目标是限制对局部化的模块的修改.减少间接受变更影响的模块.

6.推迟绑定时间-尽量不要静态编译,应该运行期间决定组件之间关系

7.结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化

第二单元 架构/详细设计/源代码也是设计

内容一:软件架构和设计概述

1.软件架构和详细设计关注点和区别

2.软件架构师职责

3.软件架构视图和软件架构文档

4.详细设计师必须知道的架构决策

5.软件详细设计师和职责

6.结合多个案例进行分析, 根据项目的不同类型,进行合适的架构视图. 展现多个大型项目的架构视图

内容二:案例-多项目案例架构分析

1.通过多个电信/金融/电力系统架构分析,项目案例视图

2.分析项目案例视图—分视角/分等级

内容三:软件详细设计

1.传统详细设计的局限性

2.什么是好的软件详细设计和衡量的手段

3.软件详细设计的过程和内容

4.敏捷设计新思想

5.过度详细设计(Over-engineering)问题和注意事项,

6.设计不足(Under-engineering)问题和注意事项分析真实项目,设计与实现的新思想

内容四:代码新思维----源代码就是设计

1.传统代码认识的误区

2.设计与施工分离的误区

3.源代码就是设计

4.破窗效应和技术债务

5.分析真实项目代码, 认识代码的重要性.垃圾代码的危害

内容五:案例- 多项目详细设计分析

1.通过多个电信/金融/电力系统设计分析

第三单元 软件设计过程—敏捷设计与反思性设计

内容一:软件不可预测性

1.软件需求的不可预测性

2.预先设计的局限性

3.传统瀑布型设计的问题

4.案例分析, 根据课程介绍的坏症状,进行重构合理的设计

内容二:敏捷设计思想---演化式设计

1.敏捷设计思想--强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。

2.演化设计--重构带来了一种新的构设计方法,称为反思性设计(Reflective Design)。除了创建一种设计并用代码实现它之外,你现在还可以分析已有代码的设计并改善它。寻求改进的一种最好的方法是通过代码嗅觉(code smells).

3.在详细设计之中,如何对发现问题的设计进行重构

4.案例分析, 根据课程介绍的坏症状,进行重构合理的设计

内容三:案例---某电信项目系统

1.故障单管理系统

2.流程审核的改变

3.故障单类型的增加

4.传统设计的问题与如何通过代码进行演化

第四单元 软件设计度量—怎样评价设计

内容一:软件设计质量评审---世界难题----如何评价设计?

1.通过指标进行重构设计

2.UML设计图的难以度量

3.代码度量

4.软件设计师能力的考核

5.Talk is cheap,show me the code.-Linux之父 Linus Torvalds

6.案例分析, 根据课程介绍的工具进行分析代码问题,从而找到设计问题

第五单元 重构与设计

内容一:重构和持续集成

1.重构概述

2.何时重构

3.如何发现哪些地方需要重构

4.如何保证重构的正确

5.代码静态分析思想和工具

6.持续集成

7.案例分析, 根据课程介绍的工具进行分析,如果提高代码质量

第六单元 软件设计复用—怎样避免重复劳动

内容一:软件复用设计

1.在详细设计之中,分析发现共同的行为的抽象和共同的机制来实现

2.软件通用服务组件的设计

3.复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用。

4.软件复用的管理策略

内容二:软件通用机制的设计与实现

1.异常的机制设计与实现

2.系统的配置管理机制的设计与实现

3.系统的Cache缓存机制的设计与实现

4.异步消息和通知机制的设计与实现

5.认证授权以及安全/加解密的机制设计与实现

6.事务管理机制的设计与实现

7.定时触发的机制设计与实现

8.后台批处理机制设计与实现

9.校验机制设计与实现

10.通信机制设计与实现

内容三:框架(Application framework)设计

1.应用框架概述

2.框架vs.类库的不同

3.在软件详细设计时如何应用框架和设计新的框架

4.典型案例分析:结合多个项目实例,在实际项目中如何进行应用和开发框架

内容四:某电信项目案例-异常处理框架设计

1.系统的异常处理策略

2.设计一个通用异常处理子系统

3.分析如何应用设计模式在该案例

4.分析通过应用设计模式,带来了哪些好处(表现在软件的灵活性)

5.分析如何转换为Framework

典型案例分析:该框架已经在多个大型项目之中应用

内容五:某电信项目案例的详细设计分析

1.项目背景(

2.使用AOP思想改造项目设计

3.AOP与软件复用

第七单元 软件建模与设计文档

内容一:UML建模技术在详细设计之中的应用(强调如何应用UML)

1.UML在详细设计阶段的应用方式(4种方式)

2.UML类图和顺序图,在详细设计中,如何协作进行职责分配

3.UML图的是否保留和废弃

结合多个案例项目进行分析,如何正确应用UML建模,以避免过度建模以及怎样保留UML建模成果和代码的同步问题

内容二:详细设计的文档和相关工具(根据学员和时间,现场适当调整)

1.设计文档撰写

2.设计文档的评审与基线

3.设计文档的版本管理

4.设计文档的变更控制略

5.详细设计转化为代码

6.界面设计工具

7.数据建模工具

8.部署模型设计相关工具

结合案例进行分析详细设计文档的编写

第八单元 软件原则/模式/最佳实践

内容一:软件设计原则

1.软件设计原则概述

2.面向对象设计的基本原则

3.通过案例分析设计原则如何应用

4.结合项目实例,分析设计原则在软件详细设计时期的实际应用事项

内容二:软件设计模式的应用

1.设计模式概述

2.设计模式的本质论

3.设计模式如何适应变化和封装

4.设计模式在高层(组件级)和底层设计(类和对象级)之中的应用

5.解决开发人员只停留在对设计模式的理论认识上,无法将设计模式思想有效地应用在软件设计过程中

6.结合项目实例,分析设计模式在软件详细设计时期的实际应用

结合案例进行分析, 应用设计模式之前和应用之后的对比, 从中发现这些

内容三:案例---多项目设计模式应用最佳实践

1.设计应用最佳实践

2.通过分析多个项进行分析设计模式的应用

3.结束设计模式应用前和后的区别

第九单元 软件设计质量

内容一:软件的质量属性

1.软件开发的4个要素成本,时间,功能范围和质量

2.什么是系统质量属性,

3.如何进行定义质量属性

4.详细设计需要考虑的质量属性

5.通过案例分析,如何在设计时考虑设计质量

内容二:软件的质量属性对详细设计的影响

1.软件的可靠性设计策略

2.软件的可修改性设计策略

3.软件的性能设计策略

4.软件的安全性设计策略

5.软件的易用性设计策略

6.系统质量属性和设计原则和模式的关系

7.结合多个案例进行分析,通过那些手段来实现这些质量属性

第十单元 软件设计案例分析

内容一:大型软件项目详细设计案例分析

1.软件详细设计最佳实践

2.某电信项目详细设计最佳实践

3.某电力项目详细设计最佳实践

4.某Web互联网项目详细设计最佳实践

讲师简介:

15年以上软件从业经历,历任程序员、设计师、软件架构师、项目经理等职位.曾任某著名外企中国研发中心高级工程师、技术专家。主要项目经验:参与或支持多家大型电信企业系统软件如中国电信97系统,中国移动BOSS系统(营业受理系统主架构师),负责某大型国有银行信贷核心系统,国家电网多个省门户系统,中国邮政,国家税务,社保等关键项目,负责系统架构设计及详细设计和相关软件技术支持。近年来专注于软件架构方法论和软件设计原则/模式,帮助客户进行需求分析、建模以及架构设计,为多家大型企业改造其核心业务系统,支持公司的业务迅速扩展,帮助客户设计并实施多个业务流程平台。之前,在国外某大型IT公司任3年核心程序员,从事核心软件系统底层开发实现。

【讲师介绍】

        ▓▓▓▓▓▓▓▓▓ (此表复制有效)▓▓▓▓▓▓▓▓

                                    传真至:020-62355807

 

我单位共___ 人报名参加 2011-06-15至2011-06-18深圳 举办的 关于举办“软件详细设计师”高级培训班

 

单位名称:______________________________________

 

培训联系人:_________ 联系电话:_________ 联系传真:________

 

移动电话:____________ 电子邮箱:__________________

 

参加人数:____ 费用总计:______

 

人:________ 所任职务:__________ 移动电话:_________

 

人:________ 所任职务:__________ 移动电话:_________

 

人:________ 所任职务:__________ 移动电话:_________

══════════════════════════════════════════

广州电话:(0203997189362355796              传真号码:(02062355807

人:赵小姐、张先生                   报名邮箱: 317709971@QQ.COM

参会方式:请您把培训回执表填写好回传,课前一星期您将会收到传真函,包括培训注意事项及详细安排

文档生成:http://www.chinacpx.com/word/<%=wsid%>.doc