您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 软件体系结构第一章.
软件设计和体系结构清华大学出版社1第1章软件工程和软件设计清华大学出版社2内容提要1.1软件1.1.1软件的本质1.1.2软件神话61.2软件工程1.2.1软件工程1.2.2软件过程和软件工程实践1.2.3网络环境带来的影响1.3软件设计1.3.1软件工程中的设计1.3.2设计过程和设计质量1.3.3软件设计原则1.4软件体系结构1.4.1什么是软件体系结构1.4.2软件体系结构的内容1.4.3设计阶段的软件体系结构1.5小结清华大学出版社31.1软件1.1.1软件的本质计算机软件,是由专业人员开发并长期维护的软件产品。软件科学成为了今天商业、科学、工程必需的技术,促进了新科技的创新和发展但是,无论国外、国内,软件危机的达摩克利斯之剑,一直高悬在软件从业者头顶,至今挥之不去。软件与信息转换软件不是有形的物理产品,而是人类思维的产物,软件不是被制造出来,而是思考出来的。清华大学出版社5软件的特性软件是设计开发的,而不是传统意义上生产制造的软件不会磨损!随着基于构件的构造模式发展,大多数软件需要根据实际的顾客需求定制硬件和软件的失效曲线时间硬件失效率初期失败率磨损时间软件失效率变更点由于变更的副作用而导致失效率提高理想曲线实际曲线软件,不会受引起硬件磨损的环境问题的影响。清华大学出版社7计算机软件分类系统软件应用软件嵌入式软件科学和工程计算软件产品线软件人工智能软件网络化软件计算机软件分为七个大类,软件工程师正面临着持续挑战。清华大学出版社8新的挑战开放计算网络资源开源软件所有这些新的挑战,毫无疑问,将对商务人员、软件工程师、最终用户产生无法预测的结果。软件的演变和认识过程清华大学出版社10程序设计语言的发展有三个层面以标准C语言簇为典型代表的面向过程的软件设计方法以JAVA语言簇为典型代表的面向对象的软件设计方法以XML语言为典型代表的面向构件的软件设计方法人月神话《人月神话》的内容,源于作者布鲁克斯在IBM公司SYSTEM/360家族(最长寿的计算机体系结构之一)和OS/360中的项目管理经验。清华大学出版社121.2软件工程1.2.1软件工程美国电气与电子工程师协会(IEEE)给出的:软件工程是:(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。(2)在(1)中所述方法的研究。软件工程层次图质量关注点工具方法过程•包括软件工程在内的任何工程方法,必须构建在质量的基础之上。•质量关注点(qualityfocus)•过程(process)•方法(method)•工具(tool)软件工程是一种层次化的技术!软件工程与计算机科学的差别软件工程计算机科学目标在时间、资源、人员这3个主要限制条件下构建满足用户需求的软件系统探索正确的计算和建模方法,从而改进计算方法本身产品软件(比如办公包和编译器)算法(比如希尔排序法)和抽象的问题(比如哲学家进餐问题)进度与时间表软件专案都有特定的进度与时间表研究专案一般不具有设置的进度与时间表关注点软件工程关注如何为用户实现价值软件理论关注的是软件本身运行的原理,比如时间复杂度,空间复杂度,和算法的正确性变化程度随着技术和用户需求的不断变化,软件开发人员必须时刻调整自己的开发以适应当前的需求。同时软件工程本身也处于不断的发展中对于某一种特定问题的正确解决方法将永远不会改变需要的其他知识相关领域的知识数学著名的探索者和教育家BarryBoehm,DavidParnas,布鲁克斯EdsgerDijkstra,高德纳,RobertTarjan,PeterSlater,艾伦·图灵,姚期智著名的实践者JohnBackus,DanBricklin,蒂姆·伯纳斯-李林纳斯·托瓦兹,理查德·马修·斯托曼无清华大学出版社151.2.2软件过程和软件工程实践一个通用的软件工程过程框架,通常包含5个活动:沟通:在技术工作开始之前,和客户的沟通、协作极其重要目的是理解利益相关者的项目目标,并收集需求,以定义软件特性、功能。策划:软件项目好比是一个复杂的旅程,策划活动,就是创建一个使任何复杂的旅程都变得简单的地图,以指导团队的项目旅程,该地图称为软件。建模:无论是庭园设计家、桥梁建造者、航空工程师、木匠还是建筑师,每天的工作都离不开模型。他们会画一张草图,来辅助理解整个项目大的构想,包括体系结构、不同的构件如何结合,以及其它特征。构建:包括手写的、自动生成的编码和测试,以发现编码中的错误。部署:软件以全部、部分增量的形式交付给用户,用户对其进行评测,并给出反馈意见。清华大学出版社167条简单的原则存在价值:软件系统因能给用户提供价值,而具有存在价值。所有的决定,都应基于该思想。保持简洁:软件设计并不是随意的过程,软件设计中需要考虑很多因素。所有的设计,都应该尽可能简洁,保持愿景:清晰的愿景,是软件项目成功的基础。没有愿景,项目将会有多种设计思想而永远不能结束。如果缺乏一致性,关注使用者:有产业实力的软件系统,不是在真空中开发、使用的。通常,软件系统必定是由开发者以外的人员使用、维护和编制文档,等等,这就必须要让别人理解你的系统。因此,在需求说明、设计和实现过程时面向未来:生命期持久的系统,具有更高的价值。在现在的计算环境中,需求规格说明随时会变计划复用:复用既省时又省力。软件系统开发过程中,高水平的复用,是一个很难实现的目标。面向对象技术会给代码和设计复用带来好处认真思考:这最后一条规则,可能最容易忽略。行动之前,清晰定位、完整思考,通常能产生更好的结果。仔细思考,可以提高做好事情的可能性10个重要的软件工程思想10个重要的软件工程思想结论不需要重新发明轮子风险管理提供洞察力重用很重要修复代价增加人件你不能测量,就不能控制介绍折中是非线性的迭代渐进主义一致性胜过才华+死亡之旅清华大学出版社181.2.3网络环境带来的影响美国南加州大学的巴里·贝姆(BarryBoehm)教授,总结了国际上软件工程的发展历程:20世纪50年代的类似硬件工程60年代的软件手工生产、70年代的形式化方法和瀑布模型80年代的软件生产率和可扩展性90年代的软件并发和顺序进程21世纪初的软件敏捷性和价值清华大学出版社19软件工程在40年发展历程中关注域转向需求40年来,软件工程的发展都是以系统为中心的,基于图灵计算模式,图灵计算时代,计算机软件是与计算机系统操作有关的程序、规程、规则及如何与之有关的数据结构和文档,即:软件=程序+数据结构+文档随着一个划时代的转变,人们开始推崇“软件即服务”的思想。那么,计算机软件是与满足需求的信息及与之有关的服务工具,即:软件=满足需求的信息+服务工具Google的成功,就是一个现实的例子。传统的与互联网时代的软件工程观比较传统软件工程观互联网时代软件工程观基础理论基于系统,以中央处理器为核心;基于图灵计算理论和冯·诺依曼结构。基于网络,节点是图灵机或智能体等主体对象,主体间相互作用;网络化软件具有小世界、无标度和高集聚的特性,研究网络动力学行为。研究方法操作系统屏蔽硬件的异构性,中间件屏蔽操作系统的异构性;用层次结构描述软件单元间的相互关系;自顶向下分解、逐步求精的开发;软件生命周期、软件评测和软件成熟度。网络成为一个虚拟资源环境;重视在不同时间段、不同软件规模上的软件间的相互关系和协同;软件按偏好依附生长,逐步演化。工程方法软件业是制造业;面向系统的结构;要求用户提供确定的需求、明确的系统边界。软件即服务,软件业是服务业;面向服务的架构;用户主导,随需即取,规模定制,敏捷开发。清华大学出版社211.3软件设计朗曼字典里,对“设计”的解释包括:描述某个事物如何被制造出来的图样或模式。形成上述图样或模式的艺术。对人造产品中组成部分的一种安排,将对产品在实践中的可用性具有影响。人的头脑中的一种规则,等等。由上述定义可见,设计是一种“图样、模式或规划”,其目标,就是要描述一个产品如何被制造出来。因此,软件设计可以被看作是“对软件将如何开发出来的一种描述”。如果把设计当作一个动词,那么软件设计就是“得到这种描述的活动或过程”。清华大学出版社221.3.1软件工程中的设计分析模型数据/类设计体系结构设计接口设计构件级设计基于场景的元素用例文本用例图活动图泳道图基于类的元素类图分析包CRC模型协作图面向流的元素数据流图控制流图处理描述行为元素状态图顺序图接口设计体系结构设计数据/类设计构件级设计设计模型分析模型对软件需求进行分析和建模开始后,软件设计是建模活动的最后一个软件工程活动,接着便要进入构造阶段,并生成代码和测试。清华大学出版社231.3.2设计过程和设计质量在整个设计过程中,要使用一系列正式技术评审或设计走查,来评估设计演化的质量。标准如下:设计必须实现所有分析模型中的明确需求,而且满足客户期望的所有隐性需求。对于生成代码的人、进行测试的人、维护软件的人,设计必须是可读的、可理解的指南。设计必须提供软件的全貌,并从实现的角度说明数据域、功能域、行为域。清华大学出版社241.3.3软件设计原则抽象体系结构模式模块化信息隐蔽功能独立求精重构设计类模块化和软件成本模块数量成本或工作量成本/模块集成成本软件总成本M成本最小区域模块化时,位置需要保持在M附近,来避免过少、过多的模块化。至于如何知道M的附近位置?如何将软件划分成模块?则需要理解后面的设计概念。清华大学出版社261.4软件体系结构1.4.1什么是软件体系结构牛津字典中,“体系结构”一词定义为:建筑的艺术或科学,特别是在考虑美感和实用因素的情况下,设计人类使用的大型建筑物所需的技巧和实际。建筑风格,建筑物,组织机构、结构的一种样式、规矩或风格。卡内基梅隆大学的软件工程研究所在网站上公开征集软件体系结构的定义,至今已有百余种。其中,较有影响力的定义包括:软件系统的结构,包含软件元素、软件元素外部可见的属性以及这些软件元素之间的关系;软件系统的基本组织,包含构件、构件之间、构件与环境之间的关系,以及相关的设计与演化原则等。狗窝、房子和高楼开发一个具有一定规模和复杂性的软件系统和编写一个简单的程序,是不一样的,借用《设计模式》的作者G.Booch的比喻,其中的区别如同建造一座大厦和搭建一个狗窝的差别。房子的建模建筑师准备建筑最初的草图,展示外观和内部布局,与客户讨论这些草图,直至所有相关方都达成一致意见,认为展示的就是想要的。建筑师的角色和沟通依据client,usersarchitectdevelopersappearance,behaviourconstruction,co-operationarchitecturaldesignvisualisesprescribesrequirementssolutionscreatesassessassess建筑师建造,合作建筑设计外观,行为开发人员客户,用户需求评估解决方案评估创建可视化规定建筑师也充当建造者和客户之间的协调人!体系结构的需要:温切斯特神秘屋这个大厦没有制作过建筑蓝图!软件体系结构的发展史2001年到2012年间的重要方法、语言、论文、数据和会议清华大学出版社32软件生命周期中软件体系结构的研究与应用需求面向软件体系结构的需求工程,从需求到软件体系结构的转换设计软件体系结构的描述,设计方法,以及设计经验的记录和重用实践支持软件体系结构的开发过程,从设计模型到系统实现的转换;基于软件体系结构的测试部署基于软件体系结构的应用部署开发后动态软件体系结构,软件体系结构恢复和重建整个软件生命周期中,各阶段软件体系结构的研究热点清华大学出版社331.4.2软件体系结构的内容下面将当前软件体系结构分为4个研究领域:(1)通过提供一种新的体系结构描述语言(ArchitecturalDescriptionLanguage,ADL)解决体系结构描述问题。这种语言的
本文标题:软件体系结构第一章.
链接地址:https://www.777doc.com/doc-1990579 .html