要讨论软件架构设计在软件开发中的重要作用,首先让我们来了解一下目前国内软件的开发现状。
总的来说,国内的多数企业仍然是采用“瀑布模型”作为软件开发过程的主要模型。虽然在采用瀑布模型的同时可能会引入原型法以及诸如MSF等其它软件开发方法与过程,但随着项目时间的推进,这种“瀑布模型”会慢慢演化为“边做边改模型”。
从事过软件项目开发的专业人士都有这样的困惑:为什么到了项目接近尾声的时候,仍然还有那么多没有解决的问题?
理论上讲,应该是先分析,后设计,再编码,那为什么项目在交货以后,我们还在不断的编写设计文档?为什么每次客户需求发生变更,我们又要投入大量的资源来应对不断变化的客户需求?为什么软件开发会碰到这么多困难,我们天天加班加点,不断地去解决开发中碰到的种种问题,可是问题越解决越多,得到的效果却那么不尽人意?
项目出现这些问题,原因很多,概括起来可以分为两种:管理因素和技术因素。国内普遍重视管理因素,而忽视技术因素,所以出现层出不穷的问题也就无法避免。
软件架构设计属于技术因素,它位于软件开发过程的前期阶段,架构设计的过程,是分析客户需求、挖掘非功能性需求、并将客户需求所定义的领域知识转化为软件系统模型的过程,由此可见,架构设计所涵盖的范围非常广泛。
目前,国内对于软件架构的认识,还存在这样或那样的误区。难道只有当设计人员在为软件项目配备了充足的资源,然而却得不到预期的结果时,才会反思:是不是软件开发本身出现了问题?
架构设计源于客户需求
在进行需求分析的过程中,系统分析员将客户需求转化为计算机模型,然而在这个过程中,系统分析员本身的特性也就决定了这一角色很难把握住客户的非功能性需求。
需求需要挖掘,尤其对于大型的软件系统而言,光靠系统分析员这个单一的角色,很难完成需求分析与挖掘的艰巨任务。在需求分析的过程中,架构设计师更为关注的是系统的非功能性需求,例如稳定性、可扩展性、可维护性、安全性、高效性等等,这些需求都是需要挖掘的。
如何挖掘?挖掘方式取决于核心需求。举个很简单的例子,客户需要实现两个系统的数据传输,这是个核心功能性需求,而在这个需求的背后,还包括了“传输过程要求可靠”、“需要采用一种特定的数据格式进行传输”、“由于数据包含一定的机密因素,因此需要加密,并需要选择合适的加密算法”等等一系列的非功能性需求。
此时,架构设计师不仅需要了解客户本身的功能需求,还需要能够发掘非功能需求。因此,优秀的架构设计师一定是一个经验丰富的需求工程师,需求分析让架构设计师知道,我需要考虑哪些因素,而深厚的软件技术功底让架构设计师知道,如何去考虑这些因素。可见,架构设计源于客户需求。
架构设计源于对知识的不断积累
首先应该认识到,没有对领域知识、软件系统特性与软件技术等的深刻理解,就无从谈及架构设计,而深厚的领域知识与技术经验则是源于不断的积累。
目前,市场上确实很多产品在架构上已经非常成熟和稳定,但这些产品的成熟架构也是通过长期不断的实践与积累才逐步形成的。经验丰富的架构设计师可以在开发产品的同时总结出一套架构模式,这对维护产品的体系结构,以及开发同类产品都有深远的意义。
从另一个角度讲,产品的架构并非一成不变,随着技术的不断创新与发展,新技术一定会被应用到现有的系统架构中。此时,软件架构可能需要进行调整,我们也不能再说,我们没有必要去关心这些产品架构了。
架构设计是一种取舍过程
实现某一非功能性需求,可以有很多种方法,但并不是每种方法都是最合适的,这在架构设计的过程中需要做出取舍。例如,为了使得软件系统具有易扩展、易更改的能力,我们可以采用插件体系结构或内嵌脚本系统结构,两者都可以使得软件系统具有方便扩展的能力。
然而,如果客户的业务流程会经常变化,或者软件系统产品会应用到具有不同业务流程的多个客户时,采用后者可能会更加符合软件本身的特点。
当今IT业技术层出不穷,在特定的应用场景中,采用何种技术何种模式最合适,这就是架构设计的取舍。JAVA和.NET孰好孰坏?讨论这样的问题也不再有意义。软件工程大师Martin Fowler曾经说过:架构师是对所有重要事情做出决定的人,这一决定也囊括了取舍。
架构设计将服务于整个开发过程
良好的架构设计不仅使得软件系统能够满足客户需求,它更为软件系统带来了安全性、稳定性、可扩展性等属性,而这些属性在应对客户需求变更、提高软件可测试性与可维护性、降低维护成本、提高开发效率等各方面都起着非常重要的作用。
客户所需要的是可以用于生产实践的最终产品,他们自然不会去关心你的软件系统采用何种设计和架构,但作为软件系统的分析者、设计者和开发者,我们必须为软件产品寻求一种合理的架构设计,因为它不仅能够使系统满足非功能性需求,而且能够降低开发成本和维护费用。
总之,架构设计是软件开发过程的重要组成部分,它不是单纯的技术,也不具有一种特定的形式,更不是与客户需求无关的。良好的软件架构能够服务于整个开发过程,有效地降低项目风险,确保项目能够朝着健康的方向发展。因此,我们必须重视架构设计在软件开发中的重要作用。
本篇文章来源于《点睛考试网》[www.kswchina.com] ;原文链接地址:http://it.kswchina.com/rjsp/gj/xt/483657.html
分享到:
相关推荐
系统架构设计师(高级)复习精华 1系统架构:系统架构师是怎样炼成的 2系统架构:小议软件架构设计要点3
高职药学论文:小议高职药学创新与实践.doc
波兰教育论文:小议波兰农村教育的改进.doc
【教学质量论文:小议农村教学质量的试验】 这篇论文主要探讨了农村初中思想品德课教学质量的问题及其改善策略。文章指出,农村地区在思想品德课的教学上存在一些显著的问题,包括: 1. 教师配备不足:农村初中...
在中国互联网企业中,成本方法的创新正逐渐崭露头角,一种被称为“反化”成本法的策略在行业内引起了关注。这种成本法的出现,主要是针对互联网企业独特的商业模式和市场战略,尤其是那些以低价甚至免费策略快速占领...
这篇文档主要讨论的是关于河南居民消费行为的调查与分析,主要涵盖了三个方面:农村居民的消费行为特征、个人消费城市化趋势以及消费决策的集体化特点。 首先,农村居民的消费行为特征体现在“糊口化”倾向,即...
【小议浅阅读】 在快节奏的现代生活中,阅读已成为人们获取信息、增长知识的重要途径。尤其是对于学生,阅读更是提升素养、开阔视野的关键。然而,面对高考等高强度的学习压力,许多学生选择了“浅阅读”作为应对...
4. **设计与实施**:描述改造的设计过程,包括系统架构设计、设备选型、布线规划、软件开发等,并详细解释实施步骤和时间表。 5. **经济效益分析**:计算改造后的节能效果和成本节省,以及可能的投资回报周期。 6....
小议网络工程的设计与建设.pdf
在民用建筑自动化控制系统设计中,设计院往往只提交控制要求及一般系统架构,而缺乏深入的系统工艺和流程设计。这种情况下,控制系统的深化设计和集成工作往往由设备承包商来完成,导致设计院失去了对工程的控制力。...
建筑物及电子信息系统防雷设计是确保建筑物内电子信息系统正常、安全运行的重要措施。随着信息技术的飞速发展,电子信息系统广泛应用于各种建筑中,并随着人们需求的扩大而变得庞大和复杂。本文将围绕建筑物与电子...
尽管网络安全态势分析系统的研究取得了一些理论成果,如架构设计、评估方法等,但在实际应用中仍面临挑战,如如何保证预测的准确性和实时性,以及如何有效应对新型威胁。 在电子商务领域,网络安全态势分析系统尤为...
CAX软件系统作为这些技术的软件体现,其选型直接关系到企业能否高效、准确地完成设计、分析和制造任务。 在选型过程中,企业经常面临诸多误区。第一,三维CAD模型和二维图纸之间的割离。工程师在建立三维模型后,...
【网页视觉设计概述】 网页视觉设计是一门融合了艺术、技术与用户体验的学科,随着互联网的普及和发展,它已经成为网页设计的关键环节。网页作为信息传播的主要载体,其视觉设计不仅影响用户的第一印象,还直接决定...
CAD技术利用计算机系统,通过对数据的运算和图形处理,辅助设计师完成设计的建立、修改、分析或优化工作。这一技术不仅提高了设计的质量和工作效率,而且极大地改变了传统的手工绘图方式。 CAD技术的组成包含了硬件...
本文将对湿地公园景观设计的几个重要方面进行小议,以期为未来的湿地公园建设提供一些参考和借鉴。 首先,湿地公园景观设计应着重展现其独特的自然景观特征。湿地公园通常以水面为主体,陆地为辅助,形成鲜明的水陆...
总之,软件工程课程的教学改革是一项系统工程,需要教育工作者持续探索和实践,不断调整和完善教学内容和方法,以培养出更多符合时代需求的优秀软件工程人才。随着技术的不断进步和行业需求的日益多样化,软件工程...
【消防喷淋系统】是重要的固定消防设施,...消防喷淋系统的设计和施工必须严格遵循规范,确保在火灾发生时能够快速、有效地响应,保护人员安全和财产免受损失。在维护和安装时,要注意系统的定期检查,保证其正常运行。
工业设计中的情感化设计是一种将人类情感和心理需求融入产品设计过程的方法,旨在创造与用户建立深厚情感联系的物品。这种设计理念强调以人为本,注重产品在功能之外所传递的情感价值,以此提升用户体验和满意度。 ...
总的来说,ELF文件格式是嵌入式Linux系统中的基石,它的复杂性和灵活性使得开发者能够构建高效、可移植的软件。通过深入学习和实践,你可以更好地应对各种嵌入式开发挑战,实现更优化的代码和更高效的系统运行。