培训费:5000元/人(含教材、证书、午餐、学习用具等)。住宿协助安排,费用自理。 证 书 培训结束,颁发“高级软件设计师”结业证书。课程目标: 1、了解软件设计基本原理、主要原则和国内外主流方法论; 2、掌握前沿技术的同时,获得解决实际问题的规范和能力; 3、帮助软件企业完善软件架构设计、评审流程,改善软件开发质量和效率。 授课思路 重点关注提升软件开发人员设计能力,整个课程由多个实战案例贯串始终,老师带领大家通过实战练习,一起走完项目设计的全过程。案例练习中老师着重阐述和分析在实际项目中遇到的问题,提炼架构决策的思维方法,使学员体会在项目各个阶段中架构设计的发展演化规律,从而在实战中提炼理论,培养学员的实际应用能力。课程主要特点: 理论与实践相结合,注重案例的讲解; 有深刻的理论深度,准确把握设计原则与要义; 全真案例讲解,学员边做边学,具体、深刻; 能够对学员提出的案例进行咨询,指导分析、设计。 培训对象 中高级程序员、系统分析员、架构设计师、产品市场技术人员; 具备IT部门工作经验,将负责信息化系统规划等相关任务的技术人员; 希望加强软件架构理论和实践能力的软件开发人员; 负责软件产品规划与定义的相关人员; 需要了解软件设计全过程的项目经理。 学员基础 1、三年以上开发经验,经历过频繁需求变更或者系统重复开发的折磨; 2、熟悉Java/C#/C++任意一种面向对象语言或者具备面向对象编程基本概念。 培训内容 Day1(9:00-12:00) 第一部分:架构设计思想与原理 一、架构设计的内涵 概念和定义; 架构原理; 架构的三个层次; 企业架构设计的产物; 大型系统架构设计的产物; 中小型系统设计的产物。 二、架构设计的外延 架构设计方法体系; 架构与软件工程; 架构与模式。 三、架构师的成长 架构师关键素质; 架构师职业发展建议; 设计师与设计技能; 设计师能力模型。 案例分析,某研发中心引入敏捷的实战分析,什么才是真正的敏捷 1、 某研发团队5年前引入敏捷的失败教训-能力比方法重要,但改变方法比改变能力简单多了; 2、优秀的设计来自优秀的设计师,因此应该首先是尊重个体的主动和创造性,提高个体工作技能,而不是应用了一种流程,消灭了个体的活力。首先关注人,才能真敏捷。 Day1(13:00-16:00) 第二部分:中小型项目案例分析与实践 一、良好需求是优秀设计的开端 1、不管你在何处工作,构建些什么,用何种语言,在软件开发上,一直最痛苦的事情是什么? 或者什么是你开发之中最讨厌的问题是什么?---需求变更; 2、杀死一个程序员不需要刀,只要需求变3次就好了; 3、软件不断变更法则:真实世界中使用的程序必须进行变更,否则它在环境中的作用就会越来越小; 4、需求改变的态度-拒绝变化无用,积极心态面对变化。 二、针对变化的敏捷过程与设计 1、而敏捷对预测未来的方式是全新的,强调通过提高团队的能力、设计的弹性和流程的灵活性来适应变化。这种思路对软件开发也是很大的冲击; 2、软件设计的目标-灵活性,因为增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本,还应该包括特性扩展的障碍成本。现在我们遇到的最大障碍是现在系统的混乱,难以扩展; 3、发现和封装变化的原则——找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码交织在一起; 4、抽象稳定接口(抽象类),针对接口编程,而不是针对实现编程; 5、分离变化维度,单一职责原则; 6、动态绑定还是静态绑定,多用组合,少用继承; 7、创建与使用分离,创建有变化也要封装。 网上订单、嵌入式项目系统案例练习: 1、现场模拟架构需求获取过程,点评要点; 2、采用敏捷方式设计案例系统组成架构模型; 3、故障单类型的增加后,设计如何通过代码进行演化。 Day2(9:00-12:00) 第三部分:改造类项目案例分析与实践 一、软件复用与基于框架技术的架构设计 1、框架的选择/已有系统的架构; 2、 软件通用服务组件的设计; 3、 软件复用的管理策略:复用已有的东西,比自己编写更容易。如果不容易,大家就不会去复用; 4、软件复用之道:对象级别、模块、架构层次复用;5、在详细设计之中,分析发现共同的行为的抽象和共同的机制来实现; 6、详细设计的核心——领域建模,领域模型中的常见问题。 二、软件腐化与希波克拉底宣言 1、 First, Do No Harm. 首先,做到不伤害!— Hippocrates 希波克拉底; 2、 Proxy代理模式与软件修改方案; 3、 decorator模式与遗留软件修改。 三、软件改造过程 1、初始设计的问题分析; 2、拙劣设计常见症状以及如何发现和治疗; 3、在详细设计中如何对设计问题进行重构; 4、代码坏味道; 5、常见的重构设计方式; 6、重构到设计模式; 7、流程审核的改变。 薪酬系统、出租系统等案例设计分析与实操演练 1、结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化; 2、分析真实项目,如何做的详细设计,给我们哪些启示,我们可以学习到什么; 3、分析我们在项目之中是那些原因导致了没有实现这些目标; 4、案例分析—如何维护遗留系统而不是遗留系统变烂; 5、通过该案例分析,对比有时是因为人员的设计技能导致加速软件的腐化; 6、通过该案例分析,讲师加入项目之后,将进行哪些重构。 Day2(13:00-16:00) 第四部分:大型系统项目案例分析与实践(上) 优秀大型系统架构设计的要点 1、什么是好的设计和衡量的手段,世界大师的观点(Robert C Martin , Peter Code,` James Shor); 2、一个好的系统设计应该有如下的性质:可扩展性、灵活性、可插入性; 3、可扩展性(Extensibility)容易添加新的功能. 结合案例,通过那些手段如何实现该目标; 4、灵活性(Flexibility)代码修改平稳地发生. 结合案例,通过那些手段如何实现该目标; 5、可插入性(Pluggability)容易将一个类抽出去,同时将另一个有同样接口的类加入进来. 结合案例,通过那些手段如何实现该目标。 优秀大型系统架构设计的最佳实践 1、合理的架构设计来源于正确的需求过程; 2、业务建模和需求分析中的架构因素; 3、采用原型法降低架构风险; 4、架构风险管理方法与决策; 5、几种典型高层架构介绍; 6、高层架构设计的应用技巧和实践; 7、高层架构的表示; 8、非功能性需求对架构的影响; 9、架构评审与决策; 10、ATAM的参与人员、步骤和结果。 军队大型信息系统设计分析与实操演练 一、需求分析案例练习 1、案例背景介绍; 2、提出问题,捕获需求; 3、工作量与开发计划制定。 二、架构设计案例练习 1、逻辑架构视图设计案例练习; 2、物理架构视图设计案例练习; 3、运行架构视图设计案例练习; 4、数据视图设计案例练习; 5、非功能需求对架构的影响。 Day3(9:00-12:00) 第五部分:大型系统项目案例分析与实践(下) 一、灵活性设计的最佳实践 1、 多态(polymorphism)和针对接口的编程; 2、数据驱动(Data-Driven Design); 3、元数据驱动设计; 4、反射驱动(Meta-data or Reflective ); 5、解释器驱动; 6、脚本引擎技术。 二、演化式设计(Emergent Design) 1、 演化式设计 Emergent Design ; 2、演化设计--重构带来了一种新的构设计方法,称为反思性设计(Reflective Design)。除了创建一种设计并用代码实现它之外,你现在还可以分析已有代码的设计并改善它。寻求改进的一种最好的方法是通过代码嗅觉(code smells); 3、在详细设计之中,如何对发现问题的设计进行重构。 二、软件设计原则/模式1、项目系统的演变,以及设计原则的应用效果,通过项目的演化分析这些核心设计原则的应用场景; 2、通过一个大型实例,传递Clean Code,设计原则等,包括DIY原则,Tell Don"t Ask原则,Soild原则(Single Responsibility原则,Open Closed原则,Liskov Substitution原则,Interface Segregation原则,Dependency Inversion原则)。 架构评审与架构重构 1、现场设计案例系统部署架构模型,并开展ATAM评估; 2、现场设计案例系统数据架构模型,讨论中间件对架构决策的影响; 3、实操细化架构设计练习,尝试优化分解架构设计,使之适应未来架构变化。 银行、政府等多领域大型核心系统设计最佳实践案例分析 1、结合多个案例项目进行分析,怎样发现和封装变化,如何通过具体的手段来进行适应这些变化; 2、很多公司习惯做大量的预习设计,这被证明是风险很高的做法。好的架构和设计是演进出来的,通过这个环节了解演进式设计的方法,包括演进式设计的方法、工具、模式等内容; 3、案例分析,根据课程介绍的坏症状,进行重构合理的设计; 4、如何计划重构活动以实现架构演进,如何从设计方法、技术债务、复杂性等角度看架构演。 Day3(13:00-16:00) 第六部分 千万级访问量网站架构变迁案例分析与最佳实践 用户体验与交互设计 1、基本概念; 2、6大设计原则 ; 3、亚马逊网站案例剖析。 二、千万级访问量的大型网站架构变迁 1、物理分离webserver和数据库; 2、增加页面缓存; 3、增加页面片段缓存; 4、数据缓存; 5、增加webserver ;; 7、分表、DAL和分布式缓存; 8、增加更多的webserver ; 9、数据读写分离和廉价存储方案; 10、大型分布式应用和廉价服务器群时代。 某Web互联网电子商务系统设计最佳实践和案例分析 1、如何从开源起步; 2、随着访问量的增加如何变迁架构; 3、淘宝 VS 12306,两类系统架构的差异性分析; 4、IBM小型机会被大量X86服务器替代吗?各自的应用背景与优势分析; 5、云计算、移动应用等新兴技术的发展意味着什么?创业黄金期的到来。 师资 由业界知名软件架构师亲自授课: 杨老师 总后信息化顾问,国家SOA技术专家委常务委员、ISO国际标准组织SOA组中国区代表(首批4人小组成员)、国家人事部考试中心计算机命题评审委员会委员、军队信息化标准委员会副秘书长。
|