本篇内容是对学校软件工程课堂内容的记录总结,部分也来源于网上查找的资料
软件过程基础
软件过程是指在软件开发过程中,经过一系列有序的步骤和活动,从问题定义到最终软件产品交付和维护的全过程。这个过程旨在确保软件项目能够按时、按预算、高质量地完成,同时满足用户的需求和期望
软件过程就像烹饪一道菜的步骤。想象一下,你要做一顿美味的晚餐。首先,你会选择菜谱(问题定义和需求分析),然后购买食材(规划和准备资源)。接下来,你按照步骤进行烹饪(编码和开发),调整调味品(测试和质量控制),最后上菜,让家人或朋友品尝(交付和维护)
在软件过程中,也有类似的步骤,这个过程通常是迭代的,意味着在整个过程中可能会反复进行某些步骤,特别是在发现问题或用户需求变更时。整个软件过程的目标是以可控制、可重复的方式生产高质量的软件产品,同时满足客户的期望
软件生命周期模型
软件生命周期模型是一种用来描述软件开发过程中不同阶段和活动的抽象框架或模型。它帮助团队组织和规划开发工作,确保在整个过程中的有效管理和控制。通俗地说,软件生命周期模型就像是软件开发的路线图,指导开发团队从项目的开始到结束的整个过程
瀑布模型
类似于瀑布一样,开发过程是线性的,每个阶段依次进行,一旦完成一个阶段,就进入下一个
特点:
1.强调阶段的划分顺序与依赖
2.每个阶段都要从技术和管理进行严格的审查
3.是一种线性的、顺序的、逐步细化的开发模式
适用时机:
1.必须同时淘汰全部老系统时
2.所有的系统功能一次交付时
3.具有反馈环
价值:
风险:
1.获得完整的需求规约是非常困难的
2.难以适应快速变化的需求
3.系统太大时,难以一次做完
4.无法利用某一中间产品
5.资源有限,比如现有的工作人员/资金不足不适用这种方法
增量模型
增量模型是软件开发中的一种开发方法,通俗来说,它就像是搭积木一样逐步构建软件系统。这个过程是渐进的,每一步都是对系统的一个增量,而不是一次性完成整个系统的开发
适用时机:
1.需要早期获得功能
2.中间产品可以使用
3.系统可以自然地分割成增量
4.工作人员/资金可以逐步增加
风险:
1.需求未被很好的理解
2.一次要求所有功能的系统不适用
3.需要迅速发生变化的系统不适用
4.长时期内仅有有限的资源(人员/资金)不适用
演化模型
演化模型是软件开发中的一种方法,通俗来说,它就像是植物的生长一样,通过逐步发展和改进来构建软件系统。演化模型强调系统的渐进发展,允许在系统中逐步引入变化和改进。
想象一下你在种一棵树。你首先种下种子,它代表了系统的最初版本。随着时间的推移,树会生长,分支会延伸,新的叶子和花朵会不断产生。每一次生长和变化都是系统演化的一部分
特点:
迭代的开发方法,渐进地开发各个可执行版本,逐步完善软件产品。每个版本在开发时,开发过程中的活动和任务顺序地或部分重叠平行地被采用。与增量模型的区别是:需求在开发早期不能被完全了解和确定,在一部分被定义后开发就开始了,然后在每个相继的版本中逐步完善
演化模型基本思想图
迭代化开发思想:
迭代化开发是软件开发中的一种方法,通俗来说,它就像是制作一幅画的过程,不是一次性完成整个画面,而是通过一次次的修改和完善来逐步创作。这种方法将整个开发过程分成多个小步骤,每一步都是对前一步的改进和迭代。
想象一下你在画一幅画。你不会一开始就把整个画面都完成,而是可能先画出大致的轮廓,然后逐渐添加细节,做出一些修改,直到你满意为止
特点:
优点:1.灵活性强(允许根据用户反馈和需求的变化进行灵活调整,更容易适应变化的环境)2.快速交付(每一轮迭代都产生一个可用的软件版本,可以更快地交付给用户,使用户更早地体验到软件)3.降低风险(由于每一轮迭代只关注部分功能或需求,问题和风险可以更早地被发现和解决,降低整个项目的风险)4.用户参与(用户在每一轮迭代中都有机会提供反馈,增加了用户对项目的参与感,有助于确保最终的软件符合用户的期望)
演化模型下有一些子类,下面介绍其中的两个子类“快速原型模型”和“螺旋模型”
快速原型模型
快速原型模型是软件开发中的一种方法,通俗来说,它就像是制作一个初步模型,以便更好地理解和验证用户需求。这个过程类似于制作一个玩具模型,使得开发团队和用户能够更早地看到和感受到软件的基本外观和功能。
想象一下你要设计一款新的汽车。在制造实际汽车之前,你可能会先制作一个小模型,包括汽车的大致形状、车轮的位置等。这个小模型可以让你更好地了解汽车的外观,检查设计是否符合预期,然后进行必要的修改
优点包括:更早的用户参与、提高沟通效果、减少误解、加速开发等
劣势包括:
过度侧重外观: 快速原型通常注重展示软件的外观和交互,但在实现功能上可能并不深入。这可能导致在后续开发阶段需要花费额外的时间来完善和优化功能,增加了开发成本和时间
可能导致误解: 用户可能会将原型视为最终产品,而忽略了原型仅是一个演示和验证概念的阶段。这可能导致用户期望与最终产品不一致,需要进行额外的沟通和期望管理。
需求变更的挑战: 如果在原型阶段出现较大的需求变更,可能需要对整个原型进行重构,增加了开发工作量和复杂性
螺旋模型
螺旋模型是软件开发中的一种迭代和逐步演进的开发方法,通俗来说,它就像是一条螺旋形的路径,开发团队通过不断的迭代和演进来逐渐完善和改进软件系统。
想象一下你在攀登一座山。螺旋模型就像是你沿着山脉蜿蜒上升,每次绕一圈都是软件开发的一个迭代周期。在每一圈,你都有机会提高你对整个系统的理解,并进行一些改进,就像攀登山峰时可以找到更好的路径一样
优势:更好的风险管理、更强的灵活性、更好的用户参与
劣势:复杂度高、管理难度大、时间和成本大、需求变更导致项目进度不稳定
统一软件过程
统一软件过程(Rational Unified Process,简称RUP)是一种软件开发方法论,由IBM公司(Rational Software,后被IBM收购)开发并推广。RUP提供了一套灵活的、可定制的过程指南,用于指导和管理软件项目的开发
RUP的组成:一整套成功开发软件的原理和最佳实践、过程模型和相关内容的模板库、过程定义工具
RUP并不是一个严格的步骤指南,而是一个灵活的框架,允许团队根据项目的特点和需求进行定制。它提供了一套方法论和最佳实践,以帮助软件开发团队在质量、进度和成本方面取得成功。通过强调迭代开发、需求驱动、架构关注和灵活性,RUP成为了许多软件开发团队在项目管理和开发过程中的重要参考
RUP的整体框架
RUP把软件开发周期分为初始、精化、构建、移交四个阶段,每个阶段的结束标志就是一个业务决策里程碑
初始阶段的目的是在所有项目干系人之间就项目目标达成共识
精化阶段的目的是建立软件架构的基线,解决技术风险,以便为软件的详细设计和实现提供一个稳定的基础
构建阶段的目的是基于已建立的架构完成系统的开发
移交阶段的目的是确保最终用户可以使用软件
RUP把软件开发生命周期分成了6个核心规范和3个支持规范
核心规范:
业务建模、需求、设计、实现、测试、部署
支持规范:
配置与变更管理、项目管理、环境
敏捷过程
敏捷过程是一种高效、快速响应变化的开发过程,旨在让团队更加灵活、快速地开发软件,以适应不断变化的需求和环境。可以把敏捷过程比喻成团队参加马拉松比赛:他们以短距离的小步快跑方式前进,不断调整步伐以适应地形和环境,而不是一开始就全速冲刺
动机:快速的市场进入时间、快速变化的需求、快速发展的技术
四条敏捷价值观
敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,实现企业效益的最大化。敏捷过程在保证软件开发有成功产出的前提下,尽量减少开发过程中的活动和制品
适应敏捷过程的情况:
需求不确定、易挥发,有责任感和积极向上的开发人员,用户容易沟通并能参与,小于10个人的项目团队
极限编程
是敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需求模糊的场合
特点:测试成为开发的核心,纪律性和灵活性巧妙结合
RUP和XP的共性:
基础都是面向对象的方法,都重视代码、文档的最小化和设计的简化,采用动态适应变化的演进式迭代周期,需求和测试驱动,鼓励用户积极参与
RUP和XP区别:
XP以代码为中心,编码和设计活动融为一体,弱化了架构的概念
RUP过程通常以架构为中心,细化阶段的主要目的就是构造出一个可运行的架构原型,作为将来添加需求功能的稳固基础
XP不包含业务建模、部署、过程管理等概念
RUP适合各种规模的项目,XP只适用于小团队