一、程序员进阶架构师的基础知识【计算机基础】
二、程序员进阶架构师的基础知识【操作系统】
三、程序员进阶架构师的基础知识【计算机网络基础】
四、程序员进阶架构师的专业知识【软件工程基础】
五、程序员进阶架构师的专业知识【UML建模工具】
六、程序员进阶架构师的专业知识【系统分析】
七、程序员进阶架构师的专业知识【系统设计】
八、程序员进阶架构师的专业知识【架构设计】
九、程序员进阶架构师的专业知识【架构质量及评估】
十、程序员进阶架构师的专业知识【软件测试及维护】
软件工程是研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护,包括两方面:
- 软件开发技术:软件开发技术包括软件开发方法、软件开发工具、软件工程环境。
- 软件项目管理:软件项目管理包括软件开发计划、成本管理、进度管理、人力资源管理、质量管理、风险管理等。
一句话理解软件工程:按照某种方法使用某种工具执行相关过程研制开发出具有良好软件质量和费用合算的产品。 这里的“某种方法”即开发方法(比如结构化开发方法)、“某种工具”(比如建模工具、开发软件等)、相关过程即为软件的生命周期。
软件生命周期是软件的产生到报废的生命周期,把整个生命周期分为三大阶段,分别为定义、软件开发、软件维护。使得每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件开发变的容易控制和管理。
软件开发模型是对软件开发过程的抽象和概括,是对开发过程各阶段之间关系的描述、约束和表示,能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。
瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
各活动之间有以下关系:
这种模型的线性过程太理想化,已不再适合现代的软件开发模式,几乎被业界抛弃,其主要问题在于:
快速原型模型是通过和客户的交流快速建立原型,实现客户和系统的交互,通过用户对原型的评价,进一步细化软件的需求,通过逐步调整原型满足客户的需求。
螺旋模型将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。
螺旋模型沿着螺线进行若干次迭代,图中的四个象限代表了以下活动:
喷泉模型认为软件开发过程自下而上,周期的各阶段是相互迭代和无间隙的特性。迭代是指软件的某个部分会被重复工作多次,相关对象在每次迭代中加入渐进的软件成分,逐步完善。无间隙指在各项活动之间无明显边界,如分析工作没有完全结束就可以先进行部分设计工作。
软件开发模型的出现是为了消除软件危机,随着客观世界不断变化,面对新情况、新问题,原有的模型将无法胜任。90年代开始,出现了一些现代软件开发模型,如RUP、敏捷模型等。
RUP经过多年总结了商业化验证的6条最有效的软件开发经验,被称为“最佳实践”。分别为:迭代式开发、管理需求、使用基于构件的体系结构、可视化建模、验证软件质量、控制软件变更。如图所示,它是一个大的迭代过程:横坐标表示软件所处的4个阶段,纵坐标表示软件在每个阶段的工作流。
RAD是基于构件的开发模型,其目的是为了快速实现软件的开发,在确定需求后选择一些现有的构件进行组装、设计、修改等,达到快速开发。其分为以下几个阶段:
软件能力成熟度模型(Capability Maturity Model ,简称CMM)是一种对软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述形成的标准,用于评价软件机构的软件过程能力成熟度的模型。分为5个等级:
软件开发方法是对软件开发过程中分析、设计两个阶段的方法论以及研究成果。从70年代发展至今诞生了不同类别的开发方法,对于不同需求的系统使用不同的开发方法。
结构化方法由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐层分解。其特征为:
其缺点是:开发周期长,难以适应需求变化。
结构化分析是根据分解和抽象的原则,按照系统中数据处理的流程,用数据流图建立系统功能模型,从而完成需求分析工作。结构化分析结果由以下几部分组成:
结构化设计是根据模块独立性准则、 软件结构优化准则将数据流图转换成软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。
结构化程序设计使用3种基本控制结构构造程序,任何程序都可以由顺序、选择和 重复3种基本控制结构构造。
面向对象开发方法将面向对象的思想应用于软件开发过程中,指导开发活动,是建立在“对象”概念基础上的方法学,简称OO( Object-Oriented)方法。由面向对象分析(OOA)、面向对象设计(OOD)、面向对象程序设计(OOP)构成。
面向对象开发方法发展历程
名称 | 描述 |
---|---|
Coad/Yourdon方法 | 强调OOA和OOD采用完全一致的概念和表示法,使两者不需要转换 |
Booch方法 | 开发模型包括静态模型和动态模型,静态模型分为逻辑模型(类图、对象图)和物理模型(模块图、进程图),用来描述系统的构成和结构。动态模型包括状态图和顺序图,用来描述对象的状态及交互过程 |
OMT方法 | 使用了建模的思想,采用对象模型(对象图)、动态模型(状态图)和功能模型(数据流图)来建立应用模型 |
OOSE方法 | 使用用例取代了DFD进行需求分析和建立功能模型 |
面向对象分析是确定需求或者业务的角度,按照面向对象的思想来分析业务。以用例驱动进行建模(UML建模工具)分析出功能模型(用例图)、动态模型(状态图、顺序图、活动图)、对象模型(类图)。
面向对象设计是对分析阶段的模型进行细化并延伸,额外产出架构图、包图等。
构件化是指软件体系结构可重组以及软件成分可以复用的开发方法,基于构件的软件开发是解决复杂环境下软件规模与复杂性的一种手段,可以提高软件的开发效率和质量。构件通过连接件连接在一起,其特征是可独立部署的单元、作为第三方的组装单元、没有外部可见状态。
在构件化基础上产生的思想,对于跨构件的功能调用,采用接口的形式暴露出来,进一步将接口的定义与实现进行解耦,催生了面向服务开发方法。其有3个抽象级别:
在面向服务开发的过程中,存在多个服务,通常复杂的IT环境中的服务层都同时使用了多种技术,而实现不同技术的服务之间的互联性障碍给应用集成带来了极大的困难,这时候引入了服务总线(ESB)。ESB支持异构环境中的服务、消息,以及基于事件的交互,并且具有适当的服务级别和可管理性。ESB的功能主要体现在通信、服务交互、应用集成、服务质量、安全性以及管理和监控等方面。
原型法与结构化方法对立,结构化方法在系统开发初期必须明确系统的功能,确定系统边界,原型法则是根据用户的初步需求利用系统工具快速建立系统模型与用户交流。
敏捷开发方法是一种应对快速变化的需求的一种软件开发能力,相对于“非敏捷”,其思想是:小步快走、以人为本,与客户紧密协作、面对面沟通,减少不必要的文档、尽早发布增量功能、小而自主的开发团队,适用于规模小的项目。