软件工程学习要点
一、 软件工程概述
1. 软件的概念及特点
定义:软件是程序、数据及开发、使用和维护程序所需要的所有文档 特点:软件是一个逻辑的而不是物理的产品
2. 软件危机的表现形式
1) 软件的开发成本和开发进度的估计常常很不准确 2) 用户对“已完成”软件系统不满意的现象常常发生 3) 软件产品的质量往往靠不住 4) 软件通常没有适当的文档资料 5) 软件常常是不可维护的 6) 其他
3. 软件工程的概念及研究内容
定义:采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够用得到的技术方法结合起来,来指导软件的开发与维护。
4. 软件工程的基本原理
1) 用分阶段的生命周期计划严格管理 2) 坚持进行阶段评审 3) 实行严格的产品控制 4) 采用现代的程序设计技术 5) 结果能够清楚的审查 6) 开发小组的人员应该少而精 7) 承认不断改进软件工程实践必要性
5. 软件生存期模型
常见的软件生存周期模型有瀑布模型、演化模型、螺旋模型、喷泉模型等
6. 主流开发方法
PO、 OO
二、 软件过程
1. 软件过程活动与软件过程模型的概念
软件活动过程描述: 1) 成果:软件过程活动的产品 2) 角色:软件过程中的参与人及职责 3) 前置条件:活动能够开展的前提条件 4) 后置条件:活动成功完成后对软件系统开发带来的影响 软件过程模型概念:软件过程模型是软件开发全部过程、活动和任务的结构框架。它能直观的表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。
2. 典型软件过程模型的策略及适用范围
(1)瀑布模型 (2)增量模型 (3)原型模型 适用领域:flutter事先不能完整定义需求的领域 (4)螺旋模型 (5)瀑布模型
3. RUP的基本策略和特点
RUP的核心工作流程: 1) 商业建模:对系统的商业环境和范围进行建模,确保所有参与人员对开发系统有共同的认识 2) 需求分析:定义系统功能及其他非功能需求,成果是软件需求说明书 3) 分析与设计:根据系统需求给出实现方案,成果为软件设计说明书 4) 实施:定义代码的组织结构、实现代码、单元测试、系统集成 5) 测试:验证各个子系统的交互集成。测试分别从可靠性、功能性和系统性能来进行。 6) 部署:成功的生成版本并将软件分发给最终用户 7) 配置和变更管理:管理并行开发、分布式开发;自动化创建工程;记录产品修改的原因、时间、人员、审计记录 8) 项目管理:为计划、执行和监控软件开发项目提供有效支持 9) 环境:为组织提供过程管理和工具的支持 特点: 1) 面向对象:从技术角度,RUP的软件系统开发是基于面向对象技术的。RUP使用和支持面向对象,且建立的设计、实现模型均是对象模型。 2) Use Case驱动:系统开发从建立业务领域的用例模型开始。用例模型表达了系统的需求,后面的各种工作围绕如何实现用例模型展开 3) 以体系结构为中心:系统开发过程中,体系结构用作开发的基石。系统的概念化、构造和管理均围绕系统体系结构进行 4) 迭代式、增量式的开发过程:RUP采用迭代式、增量式的思想,开发过程有一连迭代增量构成 5) 以质量控制和风险管理为目标:质量控制贯穿于软件开发的全过程。在每一次迭代周期,都要进行质量评估;在软件项目立项之初,就尽可能识别项目的开发风险,找出避免、克服或减少风险的对策 6) 与UML配套:UML的概念和表示方法与RUP相结合形成一种高效的软件系统开发方法和技术。 7) 适用性强:RUP可适用于各类型和各种规模的软件开发。RUP采用管理与技术相结合的二维方法,特别适合处理需求变动比较大的高风险项目
4. 敏捷开发的基本策略和特点
策略: 1) 小规模,频繁的版本发布,短迭代周期 2) 测试驱动开发(Test-driven development) 3) 结对编程(Pair programming) 4) 持续集成(Continuous integration) 5) 每日站立会议(Daily stand-up meeting) 6) 共同拥有代码Collative code ownership 7) 系统隐喻(System metaphor) 特点: 1) 敏捷开发方法是“适应性”(Adaptive)而非“预设性”(Predictive) 2) 敏捷开发方法是“面向人”(people oriented)而非“面向过程”(process oriented)。
5. XP与Scrum的基本策略和特点
三、 需求工程
1. 可行性研究的意义、任务和方法。
任务:可行性研究的只要任务是“了解客户的要求及实现环境,从技术、经济和社会因素等三方面研究并论证本软件项目的可行性,编写可行性研究报告,制定初步的项目开发计划” 方法: 1) 确定软件的目标和规模 2) 研究分析现有系统 3) 导出新系统的高层逻辑模型 4) 重新定义问题 5) 导出和评价供选择的方案 6) 推荐行动方针 7) 草拟开发计划 8) 撰写《可行性研究报告》 意义:
2. 需求工程的任务、主要活动和方法。
任务:清楚的理解用户要解决的问题,完整准确的获取用户的需求,并用《软件需求规格说明书》规范的形式准确的表达用户的需求。 主要活动:需求获取,需求描述,需求有效性验证 方法: 活动:
3. 需求的内容和层次。
内容:功能需求,非功能需求 层次:业务需求,用户需求,系统需求
4. 基于UML的需求规约方法(用例图+用例描述)。
5. 需求获取的一般策略。
策略: 1. 用户访谈 2. 用户调查 3. 其他方法
6. 需求验证的内容和方法。
内容:检测需求是否正确、完备和一致,且为后续设计开发和测试提供了足够的基础。通常为软件公司内部审查过程 方法:快速原型,需求评审
7. 需求管理的内容、流程与方法
内容:组织记录软件需求,控制变更,并确保软件开发与软件需求一致的一系列方法与活动。 flutter流程:需求标识,建立基线,变更控制,需求追踪 方法:
四、 软件设计
1. 软件设计的任务和内容。
任务:针对需求分析阶段提出的系统需求,给出具体的软件设计方案,解决如何做的问题 内容:交互设计、视觉设计、业务逻辑层设计,数据存储设计,数据库设计,
2. 基于UML的软件设计规约方法。
3. 软件体系结构(逻辑架构、物理架构、开发架构)的内涵及各种体系结构的特点和应用范围。
4. 界面设计的一般策略。
5. 业务逻辑层设计流程、方法与策略(领域模型、接口、设计模式)。
6. 数据存储的方案与设计策略(OLAP Vs. OLTP;SQL vs)。
五、 软件实现
1. 软件实现的任务及地位
任务:将软件设计的结果翻译成计算机可以“理解”的形成—使用某种语言描述程序地位:程序的质量主要取决于软件设计的质量,程序语言的特性和编码的途径也对程序的可靠性、可读性、可测试性和可维护性产生深远的影响
2. 典型编程语言与开发环境的特点
3. 源代码文档化
4. 基于测试驱动的开发方法
5. 版本管理
六、 软件测试
1. 软件测试的任务、目的及基本原则
任务: 目的:发现程序中的错误 原则: 1) 开发和测试队伍分别建立 2) 测试用例应由输入数据和预期的结果两部分组成 3) 兼顾合理的输入和不合理的输入数据 4) 应检查程序是否做了不该做的事5) 程序修改后要回归测试 6) 应长期保留测试用例,直至系统废弃
2. 软件测试的基本策略(动态、静态)
静态测试:对需求规格说明书,软件设计说明书,源程序做结构分析,流程图分析,符号执行来找错 动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性
3. 白盒、黑盒测试的策略与测试用例设计
黑盒测试:从用户的观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试。 白盒测试:根据程序内部逻辑结构进行测试
4. 软件测试的流程与步骤
5. 软件测试各阶段的任务
七、 软件维护
1. 软件维护的目的和任务
目的:通过必要的维护工作时的系统持久的满足用户需要
2. 四种典型软件维护的特点
特点: 1) 改正性维护:为识别和纠正软件错误,改正软件性能上的缺陷,排除实施过程中的误使用 2) 适应性维护:为适应外部条件的变化,而修改软件 3) 完善性维护:扩充软件功能,增强软件性能,改进加工效率,提高软件的可维护性 4) 预防性维护:采用先进的软件工程方法对需要维护的软件或软件中的一部分重新进行设计,编码和测试
3. 影响软件可维护性的因素
因素: 1) 可理解性 2) 可使用性 3) 可测试性 4) 可移植性 5) 可修改性 6) 效率 7) 可靠性
4. 软件维护的一般过程
逆向工程,再生工程
八、 软件项目管理
1. 软件项目管理的任务和内容
任务:项目管理是一些列的伴随着项目的进行而进行的,目的是为了确保项目能够达到期望的结果的一系列flutter管理行为
2. 软件项目管理过程
3. 软件配置与配置管理
4. 软件质量保证
5. 成本估计与成本预算
6. 进度计划
7. 项目团队组织
8. 软件工程标准
9. ISO9000系列与CMM