前言:本篇博客是应付现代软件工程半期前的复习资料,记录了教材大部分知识点,但不足在于没有勾画重点内容和习题搭配,只能过个大概,后续有待修改。
一、软件工程
(一)软件的本质
1. 软件
定义:
1)指令的集合(计算机程序),通过执行这些指令可以满足预期的特性、功能和性能需求。
2)使得程序可以合理利用信息的数据结构。
3)以硬拷贝和虚拟形式存在的用来描述程序的操作和使用的软件描述信息。
4)支持用户应用软件的服务
特点:
1)软件是逻辑的非物理的系统元素,不会“磨损”。
2)软件存在退化。
3)在完整的生命周期里,软件会面临变更,每次变更都会引入新的错误。
2. 软件应用领域
七个大类:系统软件、应用软件、工程/科学软件、嵌入式软件、产品线软件、Web/移动App、人工智能软件。
3. 遗留软件
(二)软件工程
1. 软件工程学科
定义:
1)软件工程是将系统化的、可规范化的、可量化的方法应用于软件的开发、维护和运
行,即将工程化的方法应用于软件。软件工程是对上述中所述的方法的研究。
内容:
1)软件工程是一种层次化的技术,支持软件工程的根基在于质量关注点。
2)软件工程的基础是过程层。
3)软件工程方法为构建软件提供技术上的解决方法。
4)软件工程工具为过程和方法提供自动化或半自动化的支持。
四大层次:
质量关注点(quality focus)
过程层(process)
方法层(methods)
工具层(tools)
2. 软件过程
定义:
软件过程是工作产品构建时所执行的一系列活动、动作和任务的集合。
组成部分:
活动:主要实现宽泛的目标(如与利益相关者进行沟通)。
动作:包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务。
任务:关注小而明确的目标,能够生产实际产品(如构建一个单元测试)。
2.1 过程框架
过程框架定义了若干个框架活动,为实现完整的软件工程过程建立了基础。过程框架还包含一些适用于整个软件过程的普适性活动(umbrella activity)
通用软件工程过程框架定义了个活动:沟通、策划、建模、构建、部署。
沟通:在技术工作开始之前,和客户(及其他利益相关者)的沟通与协作是极其重要的,其目的是理解利益相关者的项目目标,并收集需求以定义软件特性和功能。
策划:策划活动就是指导团队的项目旅程。软件项目计划定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。
建模:软件建模包括需求分析和设计。需要对整个项目有一个整体的构想——体系结构、不同的构件如何结合,以及其他一些特性。软件工程师也需要利用模型来更好地理解软件需求,并完成符合这些需求的软件设计。
构建:必须要对所做的设计进行构建,包括编码(手写的或者自动生成的)和测试,后者用于发现编码中的错误。
部署:软件(全部或者部分增量)交付给用户,用户对其进行评测并给出反馈意见。
2.2 普适性活动(umbrella activity)
软件工程过程框架活动由很多普适性活动来补充实现。这些普适性活动贯穿软件项目始终,帮助软件团队管理和控制项目进度、质量、变更和风险。
包括:
软件项目跟踪和控制;风险管理;软件质量保证;技术评审;
测量;软件配置管理;可复用管理;工作产品的准备和生产
3. 软件工程实践
通用的框架活动——沟通、策划、建模、构建和部署——和普适性活动构成了软件工程工作的体系结构的轮廓。但是软件工程的实践如何融入该框架?
3.1 实践的精髓
包括:
1)理解问题(沟通和分析)
2)策划解决方案(建模和软件设计)
3)实施计划(代码生成)
4)检查结果的正确性(测试和质量保证)
3.2 通用原则
包括:
1)存在价值
2)保持简洁
3)保持愿景
4)关注使用者
5)面向未来
6)提前计划复用
7)认真思考
4. 软件神话
略。
二、软件过程
技术定义:为创建高质量软件所需要完成的活动、动作和任务的框架。软件过程定义了软件工程化中采用的方法。
概念:在开发产品或构建系统时,遵循一系列可预测的步骤(即路线图)是非常重要的,它有助于及时交付高质量的产品。软件开发中所遵循的路线图就称为“软件过程”。
重要性:软件过程提高了软件工程活动的稳定性、可控性和有组织性,如果不进行控制,软件活动将变得混乱。
(一)软件过程结构
1. 通用过程模型(a generic process model)
软件过程示意图如下所示,由图可以看出,每个框架活动由一系列软件工程动作构成;每个软件工程动作由任务集来定义,这个任务集明确了将要完成的工作任务、将要产生的工作产品、所需要的质量保证点,以及用于表明过程状态的里程碑。
正如第二章讨论的,软件工程的通用过程框架定义了五种框架活动——沟通、策划、建模、构建以及部署。此外,一系列普适性活动——项目跟踪控制、风险管理、质量保证、配置管理、技术评审以及其他活动——贯穿软件过程始终。但是还有一个很重要的方面没讨论——过程流。
过程流(process flow):
过程流描述了在执行顺序和执行时间上如何组织框架中的活动、动作和任务。
线性过程流(linear process flow):从沟通到部署顺序执行五个框架活动
迭代过程流(iterative process flow):在执行下一个活动前重复执行之前的一个或多个活动
演化过程流(evolutionary process flow):采用循环的方式执行各个活动,每次循环都能产生更为完善的软件版本。
并行过程流(parallel process flow):将一个或多个活动与其他活动并行执行。
2. 定义框架活动
关键问题:针对给定的问题、开发人员和利益相关者,哪些动作适合于框架活动?
3. 明确任务集
略。