软件工程导论(上)

笔记参考:广州大学软件工程教学

软件工程是软件工程专业的一门重要学科,掌握好软件工程原理是开发软件的重要基础知识。本博客对软件工程导论进行了详细的讲解,以方便理解。

目录

第1章 软件与软件工程

1.1软件的概念
1.1.1软件与软件的组成

软件可以形式化的表示为:
软件=知识+程序+数据+文档

1.1.2软件生存周期

软件生存周期是软件从概念形成,进化,运行到退役的全过程。其中,软件进化包括软件开发和维护
在这里插入图片描述

传统的软件生存周期划分为软件需求,设计,编码,测试,运行和维护,退役的几个阶段

1.1.3软件的特点

  • 软件是抽象的逻辑产品,不是物理产品,所以具有极大的灵活性
  • 软件的灵活性具有双重性,程序员可以让软件变的简单,也可以让软件变的复杂难以理解
  • 软件开发过程的监督,控制,管理有着特殊的困难。
  • 软件开发的成本和进度难以估计
1.2软件工程的概念
1.2.1软件工程的定义
  • 将系统的、规范的、可量化的方法应用于软件的开发、运行和维护的过程
  • 及上述方法的研究
1.2.2软件工程的五要素

五要素:项目、人、过程、方法和工具、软件制品

1.3软件过程模型
1.3.1瀑布模型

瀑布模型也称为软件生存周期模型
瀑布模型将软件开发过程分解为可行性研究,需求分析,设计,编码,测试,运行与维护,退役。
他们既是软件开发过程的分解,也是软件生存周期的阶段划分
在这里插入图片描述

瀑布模型的缺点

  • 必须要求客户和系统分析员确定软件需求后才能进行后续的软件开发工作,但多数场合给出大型软件项目的全部需求是困难的,有时甚至是不现实的
  • 需求确定后,用户和项目负责人需要等相当长的时间才能得到软件的最初版本,如果用户对这个软件提出比较大的修改意见,那么整个软件项目就会蒙受巨大的人力,财力和时间损失
  • 开发人员在上游出现过失,会为软件制品带来缺陷并潜伏在软件制品中,如果未被发现,会造成系统故障
  • 这时必须花力气找到故障的原因,修复缺陷,造成不应有的人力,财力和时间损失
1.3.2增量过程模型

增量模型的基本思想:
开发人员与用户协商将需求分解,划分为一系列增量,并为增量排序,急需的增量排在前面先开发,不急需的放在后面
每个增量都经历需求,设计,编码,测试,移交几个阶段
根据增量的依赖关系,开发人员和项目的实际情况,有些增量可串行开发,有些可并行开发
在此过程不断开发,不断集成,不断交付,直到所有增量的开发,得到最终的软件制品
在这里插入图片描述

增量过程模型的优缺点

  • 优点
    • 按照增量不断发布软件新版本,可及时获得客户的反馈,用于调整好后续的软件开发策略
    • 能够保持良好的软件体系结构
  • 缺点
    • 增量规模不能大,否则会暴露瀑布模型的缺点
    • 将客户需求分成增量序列必须对系统需求十分了解,并有顶层设计的经验
1.3.3原型构造模型

原型向客户展示了待开发软件系统的全部或部分功能和性能,在征求客户对原型意见的过程中,进一步修改、完善、确认软件系统的需求并达到一致的理解
快速开发原型的途径有三种:

  • 利用计算机模拟软件系统的人机界面和人机交互方式
  • 利用敏捷软件开发方法开发一个工作原型,实现软件系统重要的,容易产生误解的部分功能
  • 找来若干个类似的软件,利用这些软件向客户展示软件需求中的部分和全部功能

原型的分类
(1)抛弃型原型(实验性原理)
利用原型定义和确认了软件需求之后,原型就完成了任务。开发人员按照确认的需求进行软件设计,编码,测试
(2)应用型原型(进化性原型)
利用原型确认软件需求后,对原型进一步加工,完善,使之成为系统的一部分
在这里插入图片描述

1.3.4螺旋模型

螺旋模型是迭代模型
从里向外,螺旋线每个回路表示的软件过程都是由四个阶段组成。
(1)定义目标
(2)风险分析
(3)开发和验证
(4)规划

螺旋模型的每一周保留了瀑布模型系统的,按阶段逐步的进行软件开发和“边开发,边评审”的风格,引入了风险分析,用风险驱动开发,用制作原型作为规避风险的主要措施
螺旋线每增加一周,软件开发过程就完成一次迭代,系统实现了一个新需求,生成一个新版本,软件开发的时间和成本有了新的投入,软件开发又前进了一步

在这里插入图片描述

项目开始时开发人员与用户协商,将能够确定的需求,暂时不能确定的需求划分为一系列的增量并为增量排序,确定的,急需的增量排在前面,暂时不能确定或不急需的放在后面(其实他也是一种增量模型和螺旋模型的结合)

螺旋模型的优缺点

  • 优点
    • 由于在开发过程中,可以同组织力量并行需求获取,开发原型,因此有效缓解需求描述的时间和压力
    • 边学习、边建模、边开发、边使用、边改进的优点
  • 缺点
    • 由于需求的不确定性,软件开发初期无法进行软件体系结构设计,多次迭代会导致软件体系结构变坏,为软件理解和维护带来困难
    • 原型模型和螺旋模型 既是迭代模型,又是进化模型

增量VS原型
增量的意思是先将重要的功能先开发出来,比如说一个学校的教务系统的开发,一开始比较重要的肯定是学生的登录和注册,所以需要先进行开发,像老师评价这些功能,可以后面再开发
原型的意思是一开始就考虑了所有的功能,只是这些功能可能没那么完善,后期在原型的基础上进行完善

1.3.5基于构建的过程模型

基于构件的软件开发以软件复用为基础,必须有可供选择和使用的构件及集成构件的框架
构件具有独立性,应满足构件标准
构件的基本要素:

  • 接口定义
  • 构件使用说明
  • 构件部署信息

(基于构件的软件开发也是快速构建原型的有效方法,应用广泛)

1.3.6 通用软件过程模型

人们对常用的软件过程进行了总结和扩展,将软件开发过程活动划分为沟通,策划,建模,构建,部署五项,并以此为基础,构建多种通用的软件过程模型

1.4敏捷软件开发原则和应用

2001年,21位经验丰富的软件开发功专家针对中小型事务处理软件开发采用大型,高可信软件开发标准带来了文档多,成本高,开发时间长等弊端,论述了他们对软件开发原则,模式与实践态度,发表了敏捷软件开发宣言

1.4.1敏捷软件开发原则

在这里插入图片描述
敏捷开发是一种基于更紧密的团队协作,能够有效的应对快速变化需求,快速交付高质量软件的迭代和增量的新型软件开发方法。
敏捷开发认为:需求是不可预测的,软件开发应是一个自适应的跟踪过程

敏捷开发原则是根据敏捷软件开发宣言制定的
基本内容:
(1)人员和交互胜过过程和工具
(2)可以工作的软件胜过面面俱到的文档
(3)与客户合作胜过合同谈判
(4)响应变更胜过遵循计划
在这里插入图片描述
在这里插入图片描述

敏捷开发方法:
敏捷开发方式是一组轻量级开发方法的总称,包含很多具体的开发过程和方法,最有影响的两个方法是**极限编程(XP)和Scrum开发方法 **
在这里插入图片描述
在这里插入图片描述

Scrum迭代开发:
迭代开发将整个软件生命周期分成多个小的迭代(一般为2-4周),每一次迭代就是一个小的瀑布模型,包括需求分析,设计,实现和测试等活动,结束时都要生成一个稳定和被验证过的软件版本

1.4.2敏捷软件过程的极限编程实践

团队包括:开发人员,业务分析师,测试人员和客户
按照项目要求划分业务人员和开发人员的职责
业务人员(包括客户)决定软件产品的需求以及需求增量的划分,开发人员确定实现增量的成本,并实现增量
理想的情况是,团队所有成员在一个开放的场所中工作,墙壁是哪个悬挂着项目的常用资料和进度表

1.5软件工程人的因素

SWEBOK:软件工程学科的基石
软件工程知识体SWEBOK为确立软件工程学科地位奠定了基础,是软件工程教育的里程碑
SWEBOK将软件工程划分为十个领域:
软件需求,软件设计,软件构造,软件测试,软件维护,软件配置管理,软件工程管理,软件工程过程,软件工程工具和方法,软件质量

1.6软件工具及开发环境

计算机辅助软件工程CASE工具,成为软件工程学科的重要组成部分
1.项目管理工具
2.分析和设计工具
3. 程序设计工具
4. 用户界面工具
5. 维护工具等

1.7基于计算机的系统

软件不是孤立的,他不仅需要计算机系统的支持,而且有些软件还需要网络,数据库系统和各种传感器,通用和专用外部设备的支持才能工作
软件在基于计算机的系统中具有特殊的地位和作用
软件不仅是计算机系统的组成部分,也是以计算机为基础的整个系统的重要组成部分,担负着系统的组织,控制,连接,计算,存储等带有全局性,智能性的任务
软件的功能直接影响整个系统的功能,软件项目的需求规约源自系统的定义和对软件的需求

1.7.1基于计算机系统的概念

系统的定义:能达到某一目标,能实现特定功能,一组相互关联并能协调工作的组件或子系统的集成
如果不考虑系统内部结构及其功能,简单的基于计算机的系统可用IPO模型表示
I—信息的输入
P–信息的处理
O–信息的输出
在这里插入图片描述

第2章 UML和RUP统一过程

UML:统一建模语言,是面向对象技术发展的一个重要的里程碑
UML统一了面向对象建模的基本概念,术语和表示方法,不仅为面向对象的软件开发过程提供了能力丰富的表达手段,而且也为软件开发人员提供了互相交流,分享经验的共用语言

面向对象方法的优势

  • 简化软件开发过程
  • 支持软件复用
  • 改善软件结构
2.3UML概述

UML统一了建模方式,形成了概念清晰,表达能力丰富,适用范围广的面向对象的建模语言
UML通过图形化的表示机制从多个侧面对系统的分析和设计模型进行刻画
定义五类图形机制:

  • 用例视图
    • 用例图,从外部用户角度描述系统的功能,并指出功能的参与者
  • 结构视图
    • 包图
    • 类图
    • 对象图
  • 构件视图
  • 部署视图
  • 行为视图
2.4RUP统一过程

自动化工具支持用UML开发软件的统一过程
RUP将软件开发过程分为九个工作流,即子过程:
管理,环境,配置和变更管理,业务建模,需求,设计,实现,部署,实施
将软件生存周期,即软件进化状况划分为五个阶段:
初始,细化,构造,移交,生产
在这里插入图片描述

第3章 需求工程概论

软件需求是利益相关方(项目干系人/筹码持有者)对目标软件系统在功能,质量等方面的期望,以及对目标软件在系统运行环境、资源消耗等方面的要求或约束
项目干系人是指对目标软件系统的评价,特别是对其是否能够顺利通过验收拥有决定权和发言权的人员和组织。可能是项目的受益人,也可能是项目的风险承担者,甚至可能是项目的受害者

将软件需求精细化,一致化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值