
大家好,我是轩辕,我们通过一系列内容学习软件架构设计师相关内容,这一篇重点学习软件工程相关内容等。
1.软件工程(★★★)
1.1.软件过程模型
软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。软件生命周期描述了软件从生到死的全过程。
1.瀑布模型 (★)
瀑布模型是最早使用的软件过程模型之一,包含一系列活动。这些活动从一个阶段到另一个阶段逐次下降,它的工作流程在形式上很像瀑布,因此被称为瀑布模型,如:需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运维维护。

瀑布模型的特点是因果关系紧密相连,前一个阶段工作的输出结果,是后一个阶段工作的输入。每一个阶段都是建筑在前一个阶段正确实施的结果之上。每一个阶段工作完成后都伴随着一个里程碑(一组检查条件),对该阶段的工作进行审查和确认。
瀑布模型的主要缺点有:
(1)软件需求的完整性、正确性等很难确定,甚至是不可能和不现实的。
(2)瀑布模型是一个严格串行化的过程模型,使得用户和软件项目负责人要相当长的时间才能得到一个可以看得见的软件系统。
(3)瀑布模型的基本原则是在每个阶段一次性地完全解决该阶段的工作,不会出现遗漏、 错误等情况,而实际上这是不现实或不可能的。
2.原型化模型 (★)
原型模型又称快速原型。

原型模型主要有以下两个阶段:(1)原型开发阶段 (2)目标软件开发阶段。
原型模型后续也发生了一些演变,按照原型的作用不同,出现了抛弃型原型和演化性原型。抛弃型原型是将原型作为需求确认的手段,在需求确认结束后,原型就被抛弃不用,重新采用一个完整的瀑布模型进行开发。演化性原型是在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。
3.螺旋模型 (★★)
螺旋模型是在快速原型的基础上扩展而成,是一种迭代的软件开发过程模型,主要适用于大型和复杂的软件开发项目。

它通过将整个软件开发过程分成多个阶段,每个阶段都包含目标设定、风险分析、开发与有效性验证、评审四个关键部分,形成循环迭代的过程。
具体来说,它的特点和步骤可以总结如下:
(1)目标设定:进行需求分析,明确每个阶段的目标。制定详细的管理计划和对过程、产品的约束条件。
(2)风险分析:对每个阶段的可选方案进行风险识别和分析。制定应对措施,并采取有效手段来避免或减少风险。
(3)开发与有效性验证:根据风险分析的结果,选择合适的开发模型进行系统开发。进行原型开发,并进行有效性验证,确保开发的功能符合需求。
(4)评审:对开发进展进行评审,确定是否可以进入下一个迭代阶段。如果继续开发,需要为下一个阶段制订新的计划。
迭代:
每个阶段的迭代会生成一个新版本的系统,这个新版本逐步逼近用户需求的目标。随着迭代的深入,系统会逐渐完善,最终收敛到一个可接受的目标范围。如果开发过程中无法收敛到目标范围,项目可能会提前结束。
优点:
灵活性:螺旋模型非常适合需求不完全明确或可能发生变化的大型项目,能够根据反馈不断调整开发方向。
风险控制:每次迭代都包含风险分析和应对措施,有助于识别并控制开发过程中的潜在风险。
逐步实现目标:通过每个迭代的开发,系统逐步接近最终目标,允许早期发现问题并加以改进。
螺旋模型适用于大型、复杂、风险较高的软件开发项目。适用于需求不完全明确或者会发生变动的项目。可结合多种开发方法,如面向规格说明、面向过程和面向对象等方法。
1.2.敏捷模型(★★★)
1.敏捷方法的特点
敏捷型方法是适应性而非预设性的。
敏捷型方法是面向人的而非面向过程的。
2.敏捷方法的核心思想 (★★)
(1)敏捷方法是适应型,而非可预测型。
(2)敏捷方法是以人为本,而非以过程为本。
(3)迭代增量式的开发过程。
3.主要敏捷方法简介 (★★★)
3.1. 极限编程 (XP, Extreme Programming)
XP是一种轻量级、灵活的软件开发方法,通过提高开发过程中的交流、反馈和简化来提升软件质量和开发效率。
核心价值观:交流、朴素、反馈和勇气。
交流:促进团队成员与客户之间的沟通。
朴素:从简单的解决方案做起,避免复杂化。
反馈:通过不断反馈及时调整开发过程。
勇气:敢于采取实事求是的态度,解决问题。
方法特点:
XP强调短周期的开发,每个周期内快速迭代,并通过频繁的客户反馈来调整开发方向。适用于需求变化频繁的项目。
3.2. 水晶系列方法 (Crystal Methodologies)
由Alistair Cockburn提出,注重以人为中心的开发方法,强调灵活性和适应性。
方法特点:
Crystal方法是一个系列,适应不同规模和类型的项目(如Crystal Clear、Crystal Orange等)。
每个方法都有独特的角色、过程模式和实践,能够根据项目需求灵活选择。
适用于不同规模和环境的项目,可以根据实际情况进行调整。
3.3. Scrum
主要关注项目管理和团队协作,强调通过迭代开发不断交付可工作的产品增量。
核心流程:
产品Backlog:管理需求列表,按照商业价值排序。
Sprint:开发过程分为多个短期迭代,每个迭代结束时交付一个可用的软件增量。
Scrum团队:角色包括产品负责人、Scrum Master和开发团队。
方法特点:
迭代和增量:每个Sprint内开发和交付一个增量产品。
透明性与反馈:通过每日站会和Sprint评审会,保证项目的透明度和及时调整。
4.4. 特征驱动开发 (FDD, Feature Driven Development)
FDD是一种以特征为中心的敏捷(迭代)开发方法,强调项目的快速开发和持续交付。
FDD认为有效的软件开发需要3个要素:人、过程和技术。
核心过程:
(1)开发整体对象模型:构建项目的整体视图。
(2)构建特征列表:列出所有功能特征。
(3)计划特征开发:根据特征的依赖关系,制定开发计划。
(4)特征设计:进行特征级别的设计。
(5)特征构建:实施特征开发并交付。
角色:项目经理、首席架构师、开发经理等关键角色。
方法特点:
以特征为单位:开发过程围绕特征进行,逐步完成。
迭代性开发:通过多次迭代交付特征。
概括总结:
XP:注重技术和实践,适合需求变化频繁的项目,通过简化和反馈提高开发效率。
水晶系列方法:灵活、适应性强,能够根据项目大小选择最合适的实践。
Scrum:注重项目管理和团队协作,强调短期的迭代和增量交付。
FDD:强调功能特征的管理,适合需要系统化、按特征逐步交付的项目。
1.3.统一过程模型 (RUP)(★★★)
RUP(Rational Unified Process)是一种重量级的软件工程方法,由Rational公司开发,提供了一套完整的软件开发指导,包括指导方针、模板和案例支持。
1. RUP 的生命周期 (★★★)
RUP 采用二维软件开发模型,包含9个核心工作流和4个阶段。
9个核心工作流(Discipline)
(1)业务建模(Business Modeling):理解业务需求,评估系统影响。
(2)需求(Requirements):定义系统功能及用户界面,支撑项目预算和计划。
(3)分析与设计(Analysis & Design):将需求转换为分析与设计模型。
(4)实现(Implementation):将设计模型转换为代码,并进行单元测试。
(5)测试(Test):验证需求实现情况,改进软件质量。
(6)部署(Deployment):发布、安装、升级系统,并提供技术支持。
(7)配置与变更管理(Configuration & Change Management):跟踪维护开发过程中的所有制品。
(8)项目管理(Project Management):提供计划、执行、监控等管理框架。
(9)环境(Environment):提供开发环境支持,如过程管理和工具。
4个阶段(Phase)
(1)初始阶段(Inception):定义产品愿景和系统范围。
(2)细化阶段(Elaboration):设计体系结构,制定工作计划。
(3)构造阶段(Construction):迭代开发产品,持续优化体系结构和计划。
(4)移交阶段(Transition):将产品交付用户,进行部署和支持。
特点:
每个阶段包含一个或多个迭代(Iteration),每次迭代都是完整的开发过程。
每个阶段结束前需通过里程碑(Milestone)评估,否则可能调整或终止项目。
2. RUP 的核心概念
角色(Role):定义职责,如架构师、设计师、测试员等。
活动(Activity):具体的开发任务,如设计数据库、编写测试用例。
制品(Artifact):开发过程中产生的信息,如需求文档、代码、测试报告。
工作流(Workflow):一系列有序活动,如需求分析、编码、测试等。
3. RUP 的特点
1) 用例驱动
RUP 采用用例(Use Case)驱动的方式,贯穿需求、设计、实现和测试。
2) 以体系结构为中心 (★★★)
采用“4+1”视图模型来描述软件架构:
用例视图(Use Case View):关注系统行为,面向分析人员和测试人员。
逻辑视图(Logical View):关注系统功能,面向最终用户。
实现视图(Implementation View):关注代码组织和配置,面向程序员。
进程视图(Process View):关注系统性能、吞吐量等,面向集成人员。
部署视图(Deployment View):关注安装、拓扑结构等,面向系统工程师。
3) 迭代与增量 (★★★)
RUP 采用迭代和增量的方式开发软件:
每次迭代处理部分需求,并完成分析、设计、实现、测试等过程。
每次迭代基于上一次的成果,逐步增加功能。
RUP迭代与增量优势:
(1)及早处理关键风险,降低项目失败概率。
(2)构建可指导开发的体系结构,提高可维护性。
(3)更好地应对需求变更,提高灵活性。
(4)尽早交付可运行的系统,增强团队信心。
(5)提高开发效率,优化开发流程。
RUP 是一种基于用例、以体系结构为中心、采用迭代和增量开发的过程,强调体系结构设计、风险管理和需求变更适应性。适用于大型、复杂、长周期的软件项目,但因其重量级特性,通常需要配合工具(如IBM Rational Suite)进行管理和裁剪,以适应不同规模的团队和项目。
1.4.软件能力成熟度模型(CMMI)
CMMI(Capability Maturity Model Integration for Software)提供了软件能力成熟度的框架,包含5个成熟度等级、18个关键过程域、52个过程目标,并建立了循序渐进的改进机制。
CMMI的五个成熟度等级(★★)
初始级(Level 1)
过程混乱、随意,缺乏标准化管理。项目成功依赖于个人能力,缺乏可预测性。可能交付可用产品,但常超出预算和进度。
已管理级(Level 2)
过程被策划、文档化,并受到监督和控制。设定明确目标,能够实现成本、进度和质量要求。
已定义级(Level 3)
组织根据自身情况定义标准流程,并进行制度化管理。开始进行知识积累,收集和管理企业资产。
量化管理级(Level 4)
建立过程性能、产品和服务质量的定量目标。组织具备可预测的过程管理能力。
优化级(Level 5)
关注持续改进,通过增量式与创新式方法优化过程性能。利用多项目数据进行组织级绩效分析和改进。
感谢大家长期以来的支持,有任何问题或想了解更多关于架构、系分、高项、软设的内容,直接私信我。我们快来一起进步吧!

夜雨聆风