软件产品架构师手记

来源:互联网 发布:js设置input不允许输入 编辑:程序博客网 时间:2024/04/29 18:30

软件产品架构师手记

第一部分介绍软件产品特点与一般软件的不同之处,并阐述了目前软件产品发展的前沿动态。

第二部分介绍软件产品架构师的主要责任和工作任务,包括对各项任务的描述以及基本的工作方法。成功完成各项任务除了要具备深厚的软件开发技术基础,还要综合平衡产品、市场和团队特性等各类因素。

第三部分介绍软件产品架构师需要参与的产品管理的内容,在基本软件开发的基础上如何从产品角度确定软件开发的目标和计划。

第四部分介绍常见的软件产品架构设计问题。

第五部分介绍产品架构师如何与企业内部和外部的各种人员和组织交流协作,以实现成功的软件产品。

第六部分介绍软件产品涉及的知识产权工作,以及产品架构师应该发挥的作用。

第七部分介绍软件产品架构师应该具有的知识和能力,制定学习计划。

第八部分介绍软件产品架构师需要参与社会活动——这是国内许多技术人员所欠缺的实践。

第九部分介绍一些职业发展问题,这也是软件产品架构师和其他高级技术人员遇到的常见问题。

-----------------------------------------------------------------------------------------------------------------

Part1 软件产品特性

软件产品是指可以满足某个用户要求、在市场上标价出售的软件。用户在付费和签署协议后,得到产品的使用权,然后在特定计算机上安装软件,使用其特有功能完成特定的工作。软件销售方一般提供产品的支持和升级服务。

软件产品可以按功能、客户类型、运行平台等方面进行分类,从而形成相应市场。软件产品有两种销售模式:定制软件产品和通用软件产品。定制软件产品是针对客户和特定系统要求开发并销售给该特定客户的软件;通用软件产品针对多数客户需求,提供文档资料,由用户自己或者服务商进行安装使用。最常见的软件产品是供个人使用的工具软件,如操作系统、办公软件、游戏、绘图软件等。面向企业的软件产品是用户开发和构成企业信息系统的软件,常见的企业软件产品有数据库、ERP和各种专业业务软件、信息系统监控和管理软件等。软件产品不仅指硬件上安装运行的代码,还包括相关的使用、维护文档和辅助支持工具软件。广义的软件产品还包括在开发、测试和运行过程中产生的文档和数据以及相关的培训和技术支持资源。

任何软件都需要在一定的环境中运行,包括计算机类型、资源(CPU、内存、磁盘)、网络以及对其他软件的依赖等,确定软件产品的运行环境对软件的开发、销售、使用和服务由很大影响。软件产品的使用包括安装、配置、日常使用、日常维护、问题处理、与其他系统的集成、二次开发/打包、升级和卸载等许多方面。

一般软件产品的需求往往由产品经理和架构师总结调查结果,结合新技术的可能性和自己的经验,创造性地设计新的产品功能。这样的产品可以引导市场需求、吸引客户,给企业带来更高的收入。软件产品是软件企业和整个行业保持技术发展,引导技术领先的重要手段。良好的产品体现最先进的技术,为急速发展引出更多的需求。产品也是技术积累的成果,既是技术为社会更多人服务的基础,也是技术进一步发展的坚实平台。任何产品化的技术都可以不断引出内部和外部创新的要求,通过市场得到验证和收益,从需求和利益两方面促进技术的发展。

明确用户需求,处理好软件产品与用户需求的关系是定义产品功能的重要工作。一般新产品的用户需求有如下两类:普遍需求,本类型的产品都应该满足的需求;特定上下文的需求,如果这个产品是针对某一特殊市场定制的产品,那么它可能需要有些特殊的特性。老产品的用户需求一般有几类:(1)特性更改请求,产品的某些特性不能满足用户的特定需要,需要产品对于某些功能做出修改。(2)非功能性需求,产品上线后,由于用户场景不同,很可能在产品发布前出现开发人员没想到的各种各样的运行时问题,这就需要产品进行性能调优、容错支持,甚至需要架构上的调整来满足非功能性的一些需求。(3)新特性挖掘,客户在使用产品的过程中,可能会想到一些该产品本身没有,但是如果有效果会非常好的特性。

集成的需求管理、开发和测试工具是实现需求的可追踪性的前提,当一个需求进入产品计划后,产品架构师、需求的开发负责人员就要对需求进行设计,产品架构师要对设计出的解决方案进行宏观及微观的审核。宏观审核是指审核该设计是否与产品的其他部件兼容、交互正常,是否与产品的总体设计一致、不冲突等。微观的审核是指审核设计是否满足了需求的功能性部分需要,即设计实现后是否可以完整地解决问题,设计是否满足了需求的非功能方面的需要,如性能、兼容性、易用性等。

非功能特性包括使用功能的条件和特性,使用条件包括软件产品运行的平台、资源要求、全球化、可用性、与其他软件的集成等。使用特性包括性能、可靠性、可服务/维护性、出错恢复、易用性。使用特性评价有客观数量和主观感受两种衡量方法。非功能性的要求和目标与市场、政府和企业规范有密切关系。

l 性能指操作的响应速度和处理量

l 稳定性指产品长时间保持运行特性的能力,包括性能、资源使用、出错率等指标

l 可用性是指针对残疾人或者操作受限的情况,软件产品对用户使用的支持。

软件产品是信息系统的高级阶段,一个信息系统一般包含一个或多个软件产品,如JavaEE架构的企业信息系统包含操作系统、数据库、应用服务器和某些商业管理软件产品。软件产品在信息系统中的关系一般可分为上下集成和平行集成。上下集成指一个产品作为基础环境,其他产品在其上运行,平行集成指在信息系统中软件产品之间相互通信。将信息系统中的通用模块产品化是常用的发现新软件产品的方法,如将信息提醒的服务作为产品、将基础软件产品和其中的应用作为一个整体产品等。

软件产品需要支持定制和二次开发。定制指软件产品提供特定的配置界面或文件,让用户选择软件的功能操作和工作方式。软件产品的定制数据一般存在配置文件中。提供定制功能的软件产品需要提供定制界面读写配置文件中的数据,配置数据的格式、保存和使用方式。二次开发工具指软件产品提供接口和开发工具,用于开发在现有产品基础上运行的程序,可以扩展产品的功能。产品支持二次开发需要提供特定API、二次开发语言、开发环境和程序的安装运行方法,还包括对二次开发成果的大包、检验、部署的工具。产品定制和二次开发功能最大的问题是协调产品、二次开发的合作伙伴和最终用户的期望、技术和使用习惯。

软件服务化是指某个厂商提供安装好的软件产品和使用环境,向用户提供软件使用的服务。软件产品服务化提供了更方便的使用体验和更便宜的服务,一是将传统软件服务化,二是在传统软件产品中增加部分服务化功能,保持传统产品收入,同时提供产品服务化的一些优点。任何架构变化都源于需求变化,包括客户功能和非功能需求的变化。技术发展也带来需求变化,软件产品的服务化对软件运行环境、安装、维护、使用、出错处理等各方面提出许多新的要求。软件产品服务化是一个正在不断发展变化的领域。

软件产品维护部门使用电话热线、邮箱、论坛等方法收集用户产品问题,判断问题原因找到解决方法,及时回复,解决用户问题。对问题的总结可以作为产品评估和未来改进计划的依据。常见的软件产品需要的支持维护功能有问题诊断、错误代码/配置/操作/系统数据修正、问题补救。具体方式包括日志、出错信息、信息收集、远程诊断、补丁、数据和配置备份/恢复等。产品架构师需要根据所负责产品市场的特性,设计并领导以最低的成本实现良好的维护功能。

产品架构师需要根据产品特性、用户背景和操作习惯、公司对维护性的要求等维护性需求,综合产品功能、用户、成本等因素设计合适的维护性架构。

出错信息是软件对已知问题的提示和处理,当软件发现运行中的问题时,自动向用户提示出错信息,使其了解问题和处理方法,包括对软件运行状态的报告和对用户进一步操作的指导。日志是软件在运行中写入的记录数据,包括记录运行信息、环境、操作等信息。日志一般存在文件、数据库等可长时间保存的地方。日志对维护人员了解软件内部运行状态、分析判断问题实质和解决方法有重要意义。远程协助指软件产品支持人员直接连接用户软件环境,分析判断出现的问题并提出解决方法。远程协助需要软件产品提供远程访问的接口,并通过接口实现手机运行数据、控制屏幕的功能。备份和恢复是常用的软件产品问题补救方法,包括对用户数据和软件配置信息的备份、恢复,使用户可以转移到新机器上。

企业的多个产品具有不同生命力,产品架构师在认识产品的生命力基础上,需要了解企业对整个产品谱的生命力看法和策略,根据企业战略和自己的职业发展规划决定产品选择和工作方针。

 

-----------------------------------------------------------------------------------------------------------------

Part2 职责和任务

产品架构师的主要任务是什么?

在一个软件产品开发周期的不同阶段,架构师扮演着不同的角色。

计划阶段:主要目标是对所有的产品需求进行优先级评定,并从中挑选出若干高优先级的需求,形成当前迭代的工作范围。从整体的角度评估该功能是否符合公司或部门的产品发展策略和技术路线,评估该功能的技术可行性,该功能给客户可能带来的价值。

实施阶段:由架构师设计产品的整体框架;审阅开发人员完成的功能部件的设计方案;调整个别功能部件的设计,以达到一致的产品整体设计框架;与其他相关产品的架构师协作,完成该产品与其他产品间的接口定义;根据测试中发现的问题,调整设计中的不足之处。利用自己丰富的开发和设计经验,指导开发团队很好地完成产品的设计和开发工作。

交付阶段:审阅设计方案是否被正确地贯彻实现;检查完成的产品功能是否满足了客户的最初需求;确定产品是否需要做进一步的调整。

架构师还需理解客户,了解客户存在的业务问题、挖掘客户的潜在需求,这些不仅仅是市场部门和客户支持部门应该去做的事,也是架构师的一个重要工作内容。技术创新,只有持续的技术创新才能保证产品的市场领先性,并不断孵化出新的产品投入市场。

软件产品的功能架构用什么形式说明?

定义产品的功能和架构是产品架构师的主要工作,其工作内容是根据市场计划制定所负责产品下一个版本功能和架构说明,形成该版本的软件功能架构说明书或产品概要设计说明书。产品架构设计说明书一般分为三部分:概述和产品功能描述;界面和架构设计;非功能定义和架构。内容涵盖产品主要功能和实现的规定,包括操作流程、关键用户界面、软件包结构、核心处理流程、数据架构、安全架构等。

产品功能描述介绍用户使用产品的被叫,使用场景描述展现产品面向的市场和核心功能。产品界面描述是产品功能描述的重要部分,包括产品操作和调用界面的清单、相互关系。架构设计描述产品中主要模块的功能、处理逻辑、相互关系,以及如何相互作用协调完成产品的主要功能。非功能要求和架构也是产品设计说明的重要部分。非功能要求包括产品的部署和运行方法,以及环境、性能、可用性、可维护性等多个方面。产品设计书中还包含产品如何与其他产品和环境集成,包括功能上使用和界面的集成、程序接口集成、相关工具集成等方面的规范和实现架构。产品设计书要包含产品的质量目标、对使用服务的支持和相关架构,需要明确关键的质量指标、如性能、界面、出错处理等。由于产品的复杂性、计划的时间性要求,架构师不能确定所有架构细节,一般注重总体架构和关键控制点,有些部分交给开发团队编写,需要不断审查,避免过于考虑技术而忽略市场对产品的要求。

怎样规划和评选产品新功能?

开发系统项目路软件时,所有需求都由客户提出和认可。产品的待选功能一般来自客户、服务、技术研究、企业管理四个方面。产品功能规划和每个版本的具体功能需要市场、管理和技术人员进行多次讨论,经过技术和市场试验决定。产品架构师需要尽量收集各方面对产品新功能及新技术的想法和建议,根据功能的重要性和相互关系,评估对市场和产品架构的影响,评估开发成本和对已有功能的影响。评估的基本方法是列出所有待选功能,按照评估标准逐一分析打分,得到功能的优先排序。常见评估标准包括优先级、对现有客户的价值、能否吸引新的客户、对产品形象的影响、对产品销售的可能贡献、对产品支持需求、与其他功能的关系、功能开发实现的成本、对服务和支持的要求、与竞争产品功能比较等。用户需求和反馈是对重点功能进行由组织的市场客户调查研讨,做原型试验、相关服务项目调查等,判断产品功能及其具体实现的市场、销售潜力、开发成本,使产品功能真正以合适的成本满足市场和企业发展的要求。重要的产品功能需要与企业内部和外部相关产品的对应功能进行比较。知识产权也是产品功能评估的重要方面。

在功能规划中,需要考虑功能变化对架构变化的要求。在进行产品的功能和架构设计时,要平衡短期和长期功能的需求。在功能评估和规划的过程中及结束后,产品架构师需要与产品开发、市场销售、售后服务团队密切合作,确保功能按计划在产品中实现。

如何编写和审核用例?

用例是软件产品功能的详细描述,是开发和测试的基本依据。开发人员根据用例设计产品的实现,用例也是测试人员设计测试计划、判断产品开发质量的依据。一个完整的用例需要从用户角度,完整地描述一个使用和问题场景,包括使用前的准备、条件、用户的操作和软件的处理、处理后的结果等。操作和处理需要从功能和界面两方面描述。

用例描述注重产品功能,一般不应该涉及详细设计实现。但用例描述可能影响软件产品的架构。产品架构师一般只编写重要的用例,也需要审核其他开发人员编写的用例。产品架构师需要参加和组织用例的讨论,通过讨论使产品的相关人员明确对产品功能的共识,并初步确定实现的设计,保证功能实现与要求一致。

如何设计软件产品的操作界面?

操作界面是用户使用软件产品的基本方法。操作界面指软件为用户完成任务提供各种屏幕界面元素、组成,以及使用过程中用户的所有操作和相应的屏幕显示。包括静态显示元素、内容、布局、动态交互操作流程、性能等,以及各项功能的输入和输出。产品架构师负责定义软件界面的总体操作模式和架构,包括界面的总体结构、总体功能与界面结构的关系、界面设计的原则、典型使用功能的场景和具体界面设计。

一般软件的界面设计采用工具型,即所有软件功能以某种工具提供给用户,工具型界面是软件产品操作界面的基本模式。工具性界面便于用户理解和开发实现,但要求用户自己了解产品的所有功能并能够自己决定如何组合操作这些工具,才能完成任务。任务型界面是针对产品的主要功能设计界面,设计每个界面针对用户需要完成的一个工作,软件根据用户的任务和工作进展,动态显示不同的界面元素。

使用场景设计是软件产品设计的起点,其结果是界面布局、操作功能和架构设计的依据。在进行场景设计时,一般避免涉及具体操作细节,将重点放在对原始需求、主要操作和结果的功能描述上。产品架构师设计操作界面的总体结构和大致界面布局。具体界面元素的详细设计由界面设计师制作,由开发部门实现。

设计产品升级需要考虑哪些问题?

常见的软件产品升级目标是保持用户和配置数据,保持与旧版本界面操作兼容。软件产品架构师需要与市场和开发人员一起制定满足新产品要求和升级要求的设计规划。升级设计应该用尽量少的开发和服务资源实现。产品架构师需要参与对产品的说明书和宣传资料中关于升级处理的审核,使用户了解产品升级的好处和正确的升级方法。

升级的可能性在技术上由新旧版本产品的兼容性决定,具体表现为数据、界面、API的兼容性。兼容性需要设计、实现和测试验证。

如何领导开发产品原型?

一般产品原型主要用于获取用户的反馈,从而筛选产品的功能。其存在的意义不仅仅取决于技术上的需要,还取决于产品开发资源、时间方面的限制,可以说产品原型是架构师、项目管理者需要考虑的开发方法。通过向客户演示原型系统,让客户真正体会到各项功能的作用,从而做出客观的需求评价。

原型开发类型常见的主要有抛弃型和演变型。抛弃型原型的特点是该原型系统在开发完成之后,其生命周期即结束,不会进入正式产品开发过程中;演变型原型的特点是原型系统可以逐步演变成为最终产品。一般来说,原型系统的开发包括定义、开发、修改和移交四个过程。在定义阶段,最主要的任务是定义原型系统的边界,即开发该产品原型的目的是什么?需要实现什么功能?需要验证哪些技术问题?哪些功能不需要真实的实现?在开发阶段,软件架构师需要和开发人员配合,确定原型功能的优先级,引导原型系统按照正确的方向进行。一般原型系统开发都需要经过几次迭代,才能逐步定型和交付开发。

如何估计开发工作量?

工作量指按一定质量要求开发和测试软件产品所需要的人力、物力和时间。细化具体项目的工作量估计是验证工作的重要方法,架构师可以要求开发团队将工作量细化到具体模块和开发过程的具体工作。开发团队对工作量的估计一般由主任程序员汇总和报告,产品架构师对开发团队工作量估计的准确性与主任程序员的信任和关系密切相关。估计工作量的本质是根据历史数据用统计方法评估未来的工作量,根据历史数据和经验准确评估开发的效率和质量是保证产品开发成功的关键。

如何评价和设计产品质量?

软件产品质量需要明确需求、设计、实现和验证。软件产品质量广义指产品能够使用户顺利完成指定功能的能力,包括在使用中出现问题的数量,出现问题时的处理提示,自动恢复能力,性能,对环境、操作和数据变化的适应能力等 多方面的指标。高质量的软件产品需要高水平的设计、编码、测试工作综合作用。功能和架构设计是高质量产品的基础,高质量产品需要为用户提供方便易懂的界面显示、简洁的操作、清楚的结果和操作提示信息、快速的响应。高质量的功能和架构设计需要仔细的市场调查、原型开发、反馈和技术积累,并需要高水平的开发能力来实现。

质量评价是软件产品开发和销售计划的重要部分,包括与市场上相关产品质量的对比、产品质量需求的定义、本产品质量标准制定、根据开发和测试结果对产品质量的报告、根据质量目标和结果对产品质量对销售和支持的影响等工作。

对测试和用户发现的软件质量问题需要及时处理以避免当前和今后的损失。一方面需要对每个问题记录、追踪,保证在产品中解决;另一方面要不断总结已经发现的问题,定期分析问题来源,为开发和服务提出改进建议。标准化是软件产品本身和开发过程中时刻考虑的选择,其基本思路是对结果和过程进行规范化、公开化,在实施过程中不断检验和改进。

如何将非产品软件产品化?

非产品软件包括为某个客户开发的软件项目、企业内部和外部的软件研究成果和原型、开源软件、软件辅助工具、员工社会活动成果、与其他公司的协作成果等。将非软件产品转为软件产品或者产品的一部分是产品架构师的常见任务,也是架构师职业发展的机会,产品架构师在软件转化中一般负责对软件功能的分析和定义、架构分析和改进设计、改进工作任务设计,并与相关团队讨论确认。 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Part3 产品管理

如何为产品指明方向?

产品的方向指未来若干年产品的目标市场、销售收入计划、产品功能和技术架构计划等前景。产品方向是产品管理中首要确定的内容,是产品开发销售等具体计划的指导。路线图是产品技术方向的常见表示方式,比较形象地论述一个或相关几个产品涉及的技术及发展方向,一般列出时间轴上的各个里程碑上的重点。产品方向代表企业销售与产品开发部门达成的总体产品策略,可以用来确定产品是否符合企业发展战略要求,保证产品的开发销售可以实现企业对产品的要求,检验高级技术和销售人员对市场的理解和工作水平。产品方向是开发团队的发展方向和技术储备的指导,需要根据产品方向鼓励开发人员学习相关行业知识和软件开发技术,进行相关改进和创新,更好地实现产品战略。产品方向的确定是前瞻性和可行性思维的结合。

架构师作为高级技术人员代表产品开发团队参与产品方向的讨论和决策,提出相关产品技术的发展方向和选择可能性,根据业务和销售人员的反馈和评价,制定可行的产品技术架构方向。架构师还需要参与产品方向的传播和实现,向客户、销售、开发和售后服务人员介绍产品方向的美好前景。在确定产品方向之后,产品架构师与相关技术人员讨论编写总体和个别模块的技术路线图,进行相应的传达、修改和实施,使开发人员了解产品设计及其背后的原因,从而更好地实现产品的架构和功能。产品的具体功能可能与产品方向描述有所区别,具体功能可能随时间发布的多个版本中随着客户的要求、问题处理等因素的影响而逐步变化,并反过来影响产品方向。

好产品需要好的商业模式

产品商业模式指产品销售的地域、市场和方式。常见市场包括消费市场、企业市场、服务市场。销售方式包括销售渠道(如直销、分销、OEM)、定价方法(如按装机数量、并发用户、注册用户、使用时间、CPU个数、数据量)、收入模式(高利润、薄利多销、免费)等。了解产品的商业模式可以使产品架构师更好地进行功能和非功能设计,优化架构设计和实现,并预先考虑产品功能发展的需求和潜在问题,满足市场销售的要求,节省开发资源,使产品处于更有利的竞争地位。

l 零售模式是依靠众多的多层次销售商向尽可能多的客户销售。

l 直销的软件产品一般针对大企业客户的复杂要求,产品功能说明和使用需要培训。

l OEM是以打包、嵌入硬件(OS)等方式,将一个产品包入另一个产品,OEM模块中企业不直接向用户销售产品,而是将软件嵌入其他公司的软件或硬件中。

软件产品文档很重要

产品文档是不用直接使用产品而了解产品相关信息的基本方法。文档的编写和提供需要开发人员和其他人员合作。一般由开发人员提供素材,由专门的文档编写人员完成。

用户文档指用户在使用产品的过程中需要信息的文档,包括产品功能介绍、安装过程、各个功能的详细使用步骤、出错信息的说明处理,以及如何联系售后服务等信息。开发文档为系统开发商和集成商提供如何对产品进行客户化和二次开发的信息,也可以满足客户定制要求的文档,包括客户化和二次开发的功能介绍、详细步骤、实例程序等。服务文档为售后服务人员和用户提供,包括出错信息的含义和相应出错处理步骤、常见错误的原因和处理方法、售后服务的电话、网站、软件补丁等。服务文档可能为用户和企业内部服务部门使用,避免将内部文档交给用户。软件产品架构师需要编写审查文档素材,确保文档内容的技术正确性,还要与用户、销售和售后服务人员讨论,发现最有价值的内容和合适的提供方式。目前产品文档的主要功能是如何在产品架构中实现联机文档与功能的联动,这样可以方便使用,提供文档的使用效率,降低文档编写、发行的额外成本。

企业产品谱可以按市场、技术、管理等要素分成较紧密的若干产品族。各个产品族包括若干产品,每个产品也有针对不同市场的版本。产品谱中各个产品及其相互关系代表着企业对市场技术的认识和发展方向。产品架构师需要了解企业产品谱中各个产品的地位和战略,特别是自己负责的产品与相关产品的功能、市场和技术的关系。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Part4 产品架构设计

如何表示软件产品架构?

架构师需要将软件产品架构设计以某种方式表现出来,向各个组织介绍,得到反馈并进行修改。常见的表示方式有文字、图形和伪代码。架构的图形表示需要体现软件的静态组成和动态行为两个方面。UML是每个软件技术人员应该掌握的表现软件架构和设计的图示方法。UML是软件架构设计图形表现的基本方式。一般用对象关系图表现软件模块的静态组成。

如何设计产品集成架构?

常见的软件集成包括数据集成和界面集成。数据集成指不同软件产品可以相互交换数据,相互调用操作处理各自的数据。界面集成指多个软件界面可以展现在一个屏幕上,并能相互操作。数据集成包括数据共享和消息传递。数据共享指多个软件产品可以访问同一个数据,即一个软件可以读写另一个软件读写的数据。数据传递指一个软件可以向另一个软件传送数据,数据集成中一个软件产品需要读取其他软件产品的数据,实现方法包括API调用、消息传递、统一企业内部软件的数据标准等。界面集成包括不同软件产品操作界面的顺序调用或者同时运行,界面集成要求用户在同时使用两个软件产品时,可以交互操作和使用相互的数据。交互操作需要软件产品支持非界面发出的操作命令,并相互能够确认和使用这些命令。

如何设计产品合并的架构?

产品合并是架构师发挥作用的重要场合。需要在合并计划中分析相关产品的功能架构,根据合并的业务要求,提出合并后产品的功能、技术方向和架构。根据设计需求首先制定设计的目标和策略,包括产品合并后的功能、界面、数据、安装方法,合并后的总体架构和实现技术,对原有产品的升级方法,实现合并的工作量,与相关产品的功能和架构的关系等,还要计划如何从被合并产品中提取需要的内容,逐步完成整个新产品的架构设计、开发量估计和开发计划。产品合并一般可以有多种技术方案,除了技术上努力,产品架构师在合并中的作用和结果与组织和个人的影响力有很大关系。需要注意与产品管理、开发、销售部门的关系,争取技术和职业的更高发展。

如何设计封闭软件产品架构?

封闭架构的软件产品指不宣称符合公开标准和架构,产品具有独特的功能、操作界面、API和工具。成功的封闭架构的软件产品也带动了相应硬件产品和系统的繁荣。设计封闭架构的特点是完全从特定市场用户的需求和企业能力出发,在确定需求后以最佳方式实现用户所需要的功能,不特意使用开放标准和开源资源。采用完全封闭的技术架构需要较高的设计和实现水平,不能充分利用现成的开源资源。封闭架构的设计思想是完全从用户对软件产品的功能需求出发,根据架构师的经验设计简洁实用的架构。在设计封闭架构时应该时刻考虑与需求的对应关系,确保没有多余的设计元素影响软件产品的操作功能和性能。

采用封闭架构的产品有时可以开放一部分接口和数据格式,吸引合作伙伴进行二次开发,建立产品的生态环境。这些开放的接口和数据格式需要保持开放架构的特征,防止开发与封闭策略的不一致造成市场混乱和增加开发成本。

如何设计开发软件产品架构?

采用开放架构的软件产品指宣传使用并符合各种开放技术、标准,提供各种开放接口,能够与符合同样开发标准的产品互操作的产品。当确定采用采用开放架构实现产品的策略后,架构师首先需要根据产品目标寻找开发标准和开源软件。开发架构的软件产品主要依据开放技术和标准设计。具体方法是寻找相关开源软件,根据本产品需求进行集成,在集成的架构中再加入自己特定功能处理模块。在设计开放架构产品时应随时考虑是否应该从技术、市场、支持服务等角度需要采用封闭架构,包括不开放的接口、格式、处理代码等。

如何统计软件使用量?

软件使用量统计是指软件记录和统计用户使用软件的时间、处理量、占用的资源等数据。软件内部使用统计的架构设计包括数据采集点/位置、采集内容、采集时间/频率、数据缓存、存储、传输和废弃等处理设计。收集统计信息的最大问题是影响软件正常功能。可以采用分级、分类统计方法控制采集点的粒度和数据量,使用户可以选择统计量,决定对基本功能的影响。

任何软件产品在设计、宣传和实现时都应该考虑如何使用各种技术,使软件产品能够聪明地理解客户要求,更快、更好地完成相关操作,同时避免一些愚蠢和自作聪明的行为。聪明的技术大致可分为逻辑推理和统计两种类型。最常用的逻辑推理技术是专家系统及推理机,已经有成熟的技术和应用实例。统计技术可以从大量数据中找到简单的结论,已经有比较成熟的统计分析工具,如辨识算法、神经网络等。聪明的架构可以利用计算机的计算、存储、搜索能力,用普通的算法实现显示聪明的功能。

如何设计软件产品安全性?

软件产品的安全性指软件面对各种有意和无意的挑战时,能够保持用户正常使用和数据的完整性、可靠性。软件产品安全性功能需要考虑周全性和有限性。需要尽量考虑已知的所有安全威胁和场景,分析各种可能的安全问题场景。使用安全指软件产品被合法用户正常使用,防止非法用户或者合法用户的非法使用。存储安全是软件和数据安全的重要方面,针对不同安全威胁,保证存储安全的基本方法包括存储副本、验证码、备份、加密等,不同方法针对不同威胁。软件数据远程传输和功能调用是另一个重要的安全问题。基本安全方法是加密,认证、加解密是传输和远程调用的主要安全管理方法。软件产品在用户环境中需要与其他产品联合和集成使用。用户需要在多种产品之间传输和处理数据,可能共享用户认证和访问权限。只有每个产品支持同样的安全标准,并建立统一个管理方法,才能保证整体安全性。需要仔细评估用户和市场需要的软件安全功能,设计和实现必需的安全功能。通过采用标准技术等方法尽量减少相关的开发工作量。

如何制定架构设计原则?

制定和使用架构设计原则可以提高设计的水平和效率,方便其他部门理解、实现和利用架构设计。根据使用的目的不同,架构设计原则可以分为产生架构和元素的原则和评价架构和元素的原则。

产生架构设计的原则是从功能要求、企业规定等产生产品架构的原则。在进行产品架构设计时,可以根据产品需求,通过若干重要原则,设计出产品的基本架构,然后逐条应用尽可能多的产生具体元素的原则,一方面补充架构,同时验证架构对每个原则的要求是否达到一定程度的满足,解决原则的冲突,然后采用评价原则进行评价。经过产品技术的发展经验积累有一些业界公认的架构模式。产品架构师在工作中需要不断总结、使用、宣传和修改架构设计原则。

-------------------------------------------------------------------------------------------------------------------------------------------------------

Part5 与各个组织和人员合作

产品架构师在企业中处在什么地位?

在产品需求调研阶段,架构师主要关注客户对产品的非功能性系统需求,比如性能、并发访问、可扩展性等;在设计阶段,架构师根据对客户需求的理解确定软件产品的整体架构、研发路线、产品各关键部件之间相互通信的协议及接口定义。

与产品经理的关系

架构师需要深入了解行业和客户,并努力在产品设计上满足当前客户各种功能性或非功能性的需求,同时考虑到客户未来业务拓展及产品可扩展性的需要。产品经理则负责定义客户需求并向开发团队解释其应用场景。从一定程度上来说,产品经理是开发团队与客户之间的桥梁,架构师则是开发团队的首席代表。在需求分析阶段,架构师与产品经理同力合作,准确理解客户需求;在设计开发阶段,架构师设计软件整体架构,审查开发方案,与产品经理及时沟通以保证产品的功能与客户需求一致,并及时通过产品经理获取需求变更信息,调整开发方案。

与项目经理的关系

项目经理负责监督项目进度及管理团队的资源,架构师从技术层面上协助项目经理一起进行决策,保证项目的正常实施。

与开发团队的关系

架构师应该是整个开发团队的技术权威,把握产品开发的技术路线,同时对产品实现过程中各项具体的方案设计进行评审及指导。架构师需要定期跟踪和监控系统的开发,确保架构思想和既定问题的解决方案得到正确的执行,避免架构设计在实施阶段的偏离。架构师应该协助项目经理和整个团队一起进行技术攻关,解决代码实现中的关键问题,对已实现部分的代码,尤其是核心部分的代码进行全面审查,确保架构实现的循序渐进和准确性。

与主任程序员的关系

主任程序员负责确定软件开发环境和方法、软件模块、算法的设计、软件源代码组织、软件编译连接的结构和过程、编码规范等具体产品实现技术。产品架构师需要与主任程序员协调架构设计与程序设计层次的工作交点,保证产品功能和非功能要求在整个设计层次中正确传递和实现。

与测试经理的合作

架构设计的不同往往会对软件的性能造成较大的影响,因此架构师需要及早和项目经理一起拟定性能测试计划,选择合适的性能测试工具,根据产品运行软硬件环境的不同,确定相应的测试策略。通过迭代式的开发模式测试团队可以在早期拿到软件的原型系统或可工作的关键模块,通过阶段性的测试验证架构设计的合理性和可行性。

与研究部门合作

产品架构师应该与研究部门密切合作使企业的研究经费得到充分利用,促进研究成果的发展和向产品转化。一方面了解前沿技术和想法,及时发现提高产品能力的机会,另一方面根据产品的问题和市场需求,对研究课题提出建议,引导研究更多地为产品开发做出贡献,同时调动更多的资源帮助产品解决技术问题。

与客户合作

作为一个产品架构师,尤其是行业应用软件的产品架构师,一定要对产品的目标客户有深入的了解,同时与关键客户建立良好的合作关系,确保自己设计并开发的产品是客户想要的产品,能真正地解决客户的业务需求。架构师不仅要对当前所服务客户的业务需求有清晰的了解,也需要对整个行业里一些好的、先进的工作理念和业务流程了如指掌,再结合自己在其他客户项目中的实施经验,才能向客户提出最优的解决方案。如果单纯地将客户的需求解释并映射成软件系统的不同功能并据此进行设计,很可能最终得到的产品无法得到客户的认可。在与客户沟通的过程中,架构师应该时刻关注主要矛盾,紧紧抓住关键需求。对于成本较高的需求应努力说服客户放弃该需求或提供替代方案,可以从对系统整体架构设计或性能的影响方面入手,引导客户用全局的观念来看问题。

与外包公司合作

外包的好处包括:简化企业劳动力管理,方便调度资源,快速开发产品,快速得到产品需要的特别技术,降低前沿技术开发的风险。潜在的问题是外包员工的责任心管理,关键技术的丧失,外包公司成为市场竞争对手,产品支持不能延续等。产品架构师应对外包公司及其员工的能力和特点由正确的评价,以供自己在工作中觉得如何与其合作,在开发过程中注意外包的进度质量,根据质量状态及时作出应对方案,保证最终产品的功能和质量满足产品计划要求。

与技术公司(合作伙伴)合作

与技术合作伙伴之间的合作活动主要围绕产品的设计和开发过程。设计方面包括需求定义、架构设计、模块的接口设计;开发过程方面主要是进度、代码管理、测试项目和结果的跟踪、开发成功评估和过程改进计划。在合作过程中,软件架构师需要随时跟踪进度,及时发现和解决技术问题,及时给相关部门和管理人员反馈,与各个方面一起讨论解决。还要考虑合作伙伴的工作对未来产品总体功能和其他管对的影响,及时沟通保证产品的整体功能和开发进度按计划完成。

与产品经理合作

产品经理是负责并保证高质量的软件产品按时完成和发布的专职管理人员,工作任务包括获取客户需求、产品概念设计、产品市场定位、产品发布等。软件产品架构师需要经常和产品经理进行合作。一方面把客户的业务需求转化成具体的产品功能,然后和开发人员一起对产品功能进行设计和实现;另一方面架构师需要把产品的新功能和技术介绍给产品经理,并通过产品经理或者产品经理一起把信息传递给最终用户。

与高级经理合作

高级经理一般负责企业某个方面或者某个大部门的全面工作,比较关注高层业务指标和重点客户。高级经理依靠产品架构师提供技术方案,架构师经常与其他高级技术人员和项目开发经理一起向高级经理汇报开发市场计划,通过交流影响高级经理对产品开发的资源分配、进度计划的决策。架构师应该及时向高级经理反映产品开发和技术支持中的重大问题,并提出改进建议和实施计划。产品架构师还应该向高级经理提出在组织管理、降低开发成本、提高开发效率、技术发展方向、人员评价、社会和客户活动等多方面的报告和建议。

与界面设计师合作

界面设计包括整体风格设计、功能导航设计、功能点设计等内容。通常来说,界面设计会在产品的概要设计阶段开始进行,并在详细设计阶段随着功能详细定义而结束,这是传统瀑布开发模式下的情形。在敏捷开发和迭代开发的模式下,由于没有明确的详细设计阶段,而对于每个具体的功能点实现可能被拆分到几个迭代中,界面设计相应地也会贯穿整个迭代开发的全过程,在不同迭代中实现对不同功能点的界面设计。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Part6 知识产权

作为高级技术人员,产品架构师在知识产权的创造、使用和保护活动中应该发挥积极作用。产品架构师的很多工作结果如软件架构设计、功能界面和操作的设计,都是潜在的知识产权。产品架构师需要积极考虑如何在产品中使用本企业和其他企业已有的知识产权,充分利用知识产权保持和提高产品的市场认知度,节省开发成本。在产品计划中需要考虑确认知识产权的计划和准备,包括对所涉及的各种形式知识产权的确认、授权、开发使用计划和在开发过程中的检查计划。知识产权的内容都是在软件产品开发中实现和使用的。在软件开发过程中要注意按计划实现和使用相应的知识产权,记录相关的工作和结果,并努力发现新的知识产权机会并实现。

产品架构师应该是企业知识产权的领导者之一,与管理人员和法律人员一起,参与相关战略、计划、处理流程和人员的组织管理、规范制定等活动。产品架构师应该通过新技术对产品和用户的影响,分析新技术进入产品对未来市场和企业带来的影响,引导相关知识产权的创新和登记,这样才能使企业在不断发展的技术市场中取得行动的主导权和商业利益。

专利通过定义软件产品的操作、结构等创新要素,防止竞争对手模仿开发同样的功能。产品专利通过声明所发明软件的产品结构、界面、操作方式,达到判断另一个软件是否模仿相关设计、界面和操作的目的。一个典型的专利包括专利内容描述、图标和权利要求,还包括专利背景介绍、已有技术和要解决的问题、创新系统和方法、使用该专利的价值和好处等。专利内容描述中介绍发明的背景、发明的基本原理、系统结构、处理流程和使用优点。

专利评审的原则是从技术、法律、经济等角度判断是否符合专利的要求和企业的利益。企业专利评审一般由高级技术和法律人员组成的评审委员会组织和执行。评审的结果有申请专利、公开发表想法、退回或需要改进等。产品架构师作为企业高级自己数人员和产品团队的代表,需要从产品和技术角度参与相关专利想法的评审,同时帮助专利律师和作者相互理解技术问题与产品的关系,并对想法提出技术改进意见。

技术评审原则主要包括技术的创新性、技术在产品中的可行性、专利使用的可发现性、对产品和公司的经济价值等几个方面。是否申请专利的最基本原则是有无比较大的技术创新。创新的判断一般根据评审人员的个人经验,检索文档库和专利库等,网上搜索也是常用方法。一个专利应该是可以实现的,可行性的判断一般由评审人员的经验决定。产品架构师需要熟悉软件产品标识的技术,与产品经理、市场人员、法律人员共同确定符合产品表现并满足法律要求的标识方法,与开发团队讨论在产品开发中确保在正确的地方加入正确的版权标识。

企业商业和技术秘密的保护是知识产权保护的重要方面。秘密指涉及企业和个人利益而不希望其他人或者组织了解和修改的信息,包括业务和技术方面的数据、处理方法等。授权管理是软件保护数据秘密的基本方法之一,包括用户登记、认证。软件产品还需要对验证和授权的操作进行记录以便于发现非法授权、访问、事后审计、问题和责任追踪。针对所访问数据和代码的重要性,可以对授权和访问记录进行实时和离线审计,以及时发现泄密事件,减少损失。加密和解密是保护软件产品相关秘密的重要手段。

软件的主要知识产品反映在代码中,记录代码的产生、修改不仅是产品开发要求的基本工作,也是证明软件知识产权的重要证据。除了代码和设计,软件产品开发的其他资料也应该归档,这些技术文档是企业资产,不仅是知识产权的证明,还可以从历史上分析企业产品技术的发展,为未来发展提供数据和思路。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Part7 知识和能力

和各方面人员交流的能力和知识是产品架构师实现工作目标的基本手段。高级技术人员不仅要规划自己的职业发展,也要帮助指导初级人员规划职业发展。如何在实际中结合具体产品和企业,进行有效的职业规划并成功地执行,则需要丰富的经历和广泛的知识。在学习和工作中,容易忽略知识体系中知识的关系,产生好高骛远的问题,要注意体系的结构、知识的层次和依赖关系,考虑如何快速学习不同层次的知识和技能,而不轻易忽略相关知识。

为什么要使用编程框架?

框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类及实例之间协作的方法,它为构件复用提供了上下文关系,因此构件库的大规模重用也需要框架。框架通常以构件库的形式出现,构件库只是框架的一个重要部分,框架的关键在于框架内对象间的交互模式和控制流模式。构件通常是代码重用,而设计模式是设计重用,框架则介于两者之间,部分代码重用,部分设计重用。框架与设计模式虽然相似,但却有根本的不同,它们的区别在于:

Ø 设计模式是对在某种环境中反复出现的问题及解决方案的描述,它比框架更抽象;

Ø 框架可以用代码表示,也能直接执行或复用,而对设计模式而言只有实例才能用代码表示;

Ø 设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式缺可适用于各种应用。

框架可分为白盒和黑盒两种框架,白盒即具备可视性,被继承父类的内部实现细节对子类而言都是可知的。基于对象构件组装的框架就是黑盒框架。框架的一个重要特征就是用户定义的 方法经常被框架自身调用而不是从用户的应用代码中调用。

信息系统是由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户组成的以处理信息流为目的的集成系统。面对杂乱无章的数据,架构师必须利用自己的逻辑思维能力和抽象思维能力,设计出定义良好的数据模型,这是信息系统成功的关键。

Rational Team ConcertRTC)提供了一个集开发和敏捷项目管理于一体的平台,提供网页和基于Eclipse的客户端两种访问方式。在敏捷开发项目实践中,每个迭代周期,可以分为如下几个阶段:迭代计划阶段,开发阶段,测试阶段,接剧情缺陷阶段,迭代总结阶段。

使用开源软件包括学习开源软件的使用、设计和编码,利用开源软件的整体和部分代码实现自己的软件,利用开源软件为客户服务等。需要充分利用开源软件资源和社区。

产品架构师重点从架构上确保产品的功能和非功能特性的实现,在开发过程中应该深入了解开发团队的运作状态,在尊重开发部门并考虑产品开发要求进度等多种因素的前提下提出开发流程的改进建议。

在产品计划和开发阶段都需要进行风险评估、预防和处理。产品计划阶段典型的潜在风险包括产品设计和实现阶段中能够设计和实现产品和市场的需求问题。设计阶段的问题包括产品功能指标与市场需求不符、与竞争对手有差距、上市时市场发生变化等。实现阶段的问题包括工作量估计不足、无法实现的能力和指标、销售和开发人员对需求理解不同等。开发阶段的问题包括实现的功能和指标与原计划不同、某些功能不能按时完成、市场发生变化等。

软件产品架构师应该在风险评估、预防方法、处理预案和问题分析处理等相关活动中起到重要作用。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Part8 社会活动

参加社会活动对个人发展有重要意义。社会活动指产品开发等本职工作任务之外的活动,包括公司内部的其他部门、非正式组织、社团、文体活动和公司外部组织的各种正式和非正式活动。积极参与社会活动,有助于缓解工作压力,提高生活质量,还可以充分利用业务时间增长职业能力,为企业做出更大的贡献。产品架构师应该积极参加与产品相关的市场活动的计划、组织、内容准备和实施,保证市场活动的形式和内容传递正确的产品和技术信息。

与客户交流是产品架构师的重要活动,产品架构师应该利用各种机会与客户直接交流。常见的交流机会包括本企业和行业的市场活动(展览会、发布会、研讨会)、客户企业和行业的市场活动、销售活动(产品介绍会、讲座、专题讨论)、产品问题讨论会、行业学术会议、用户抱怨处理、定期交流会议等。软件产品架构师参与大学交流活动对个人职业发展也有重要意义,不仅可以增强自己在学术界的交往范围,锻炼交流能力,提高自己的知名度,还可以了解学生水平、爱好、熟悉未来的研发人员和用户。

产品架构师需要考虑利用不同类型和内容的文章,针对不同类型的读者,有效地传达不同方面的信息。文章的主要类型包括企业、行业和其他组织的网站、报纸、杂志、宣传手册上的文章。其内容包括企业的产品市场、功能、架构介绍、新技术知识、行业和职业的规范、状态和前景展望、学术论文等。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Part9 职业发展

软件技术的初级职位是程序员和高级程序员;中级职位是软件设计师,技术经理,开发组长;高级职位是架构师,技术总监等。软件技术初级职位的主要工作是编写和测试程序代码。软件企业的中级职位人员主要负责与架构师合作,了解架构设计要求,设计并领导实现具体软件产品和系统。软件技术的高级职位是架构师,包括软件架构师、系统架构师、产品架构师等多种职位。

明确的职业规划可以促进个人积极学习相关知识和技能,主动了解、学习高级职位的工作,并主动寻找机会展现自己的更高层技术能力。在职业规划上可以借鉴软件行业前辈的经历。职业发展规划不仅包含技术水平和能力,还包括组织、协调以及客户关系等多方面的综合能力和资源。每个人需要根据自己的发展不断规划,随时判断是应该追求更高的职位,抑或变换同类职位。

软件架构师的主要职责有四点:确认需求,系统分解,技术选型,制定技术规格说明。软件架构师不仅要与开发者保持沟通,也需要与项目经理、需求分析员,甚至是最终用户保持沟通,所以对于软件架构师,不仅有技术方面的要求,还有人际交流方面的要求。软件架构师要具有领导能力和团队协作技能。软件架构师必须是一个得到承认的技术领导,能在关键时候对技术的选择做出及时、有效的决定。

解决复杂和困难的问题是职业发展的挑战也是职业发展机会。产品架构师可以通过调研和思考提出新的产品功能、技术改进机会,以问题方式提出供开发团队参考。职业的发展需要不断提高分析和解决问题的能力,一般通过观察别人和运用自身的经验来逐步改进。经过长时间的实践和改进,达到可以本能地选择最应该解决的问题和最合适的解决方法的水平。工具是积累开发经验和提高效率的手段,代码和项目管理工具可以使管理人员随时了解进度、及时调配资源,保证产品按时按质完成。软件开发工具包括针对具体开发任务的工具软件和提供现成处理逻辑的程序库。

产品架构师需要与各种背景、职位和部门的人员协同工作,了解别人的特点可以更好地与之合作。每个人的性格、经历、职责范围、利益关系不同,在协作中表现出的态度也很不相同。心理学总结不同人的特点,划分一些典型性格,研究不同性格的人在一起工作时如何更好地协作,以及如何认识和应对不同的态度。

 

勤能补拙,加油吧!!!                                                            





0 0
原创粉丝点击