### 软件工程知识点概览
#### 一、软件工程概述
- **定义**: 软件工程是一门研究用工程化方法构建和维护有效、实用和高质量软件的学科。它涉及软件生命周期中的所有阶段,包括需求分析、设计、编码、测试、部署和维护。
#### 二、软件需求分析
- **功能需求**: 描述系统必须完成的任务或功能,如每月发放员工工资的功能。例题中,选项A“每个月特定的时间发放员工工资”即是具体的功能需求。
- **非功能需求**: 涉及到软件运行的环境条件、性能指标等。例如,系统的响应时间、并发用户数量、计算精度等。例题中,选项B、C、D均为非功能需求。
#### 三、软件测试方法
- **黑盒测试**:
- **分支覆盖**: 确保每个逻辑判断的真假分支都被至少一个测试用例覆盖。根据例题分析,至少需要2个测试用例来实现分支覆盖。
- **测试用例设计**: 需要精心设计以确保覆盖所有的功能和逻辑路径。
#### 四、敏捷开发方法论
- **极限编程(XP)**:
- **十二个最佳实践**:
- 小的发布: 定期发布小型的增量更新。
- 结对编程: 两名程序员共用一台电脑合作编写代码。
- 持续集成: 经常地集成代码,并通过自动化测试来验证每次集成。
- 简单设计: 保持设计尽可能简单,避免不必要的复杂性。
- 极限编程强调快速反馈、持续改进以及高质量的软件产品。
#### 五、软件体系结构模式
- **管道过滤器模式**:
- 优点:
- 支持重用: 各个过滤器可以独立开发和复用。
- 提高性能: 可以针对不同的过滤器优化性能。
- 缺点:
- 不支持并发操作: 管道过滤器架构本身不直接支持并发执行任务。
- **耦合类型**:
- 数据耦合: 模块之间通过简单的数据传递进行交互。例题中提到的传递学生信息即为数据耦合的例子。
#### 六、软件内聚
- **过程内聚**: 模块内的各个处理元素是相关的,并且必须按照指定的顺序执行。例题中的情况就属于过程内聚。
#### 七、软件维护
- **改善性维护**: 对已交付使用的软件进行修改,以改进其性能或增加新功能。例题中的情况是为了改进系统的图形输出而进行的维护。
#### 八、数据库访问技术
- **JDBC** (Java Database Connectivity): Java语言中用于访问数据库的标准API。例题中的数据库访问就是通过JDBC实现的。
#### 九、网络工具
- **Ping命令**: 常用来测试网络连通性的工具。通过发送ICMP包并等待回应来检测网络是否可达。
#### 十、软件开发模型
- **螺旋模型**:
- 特点: 强调风险分析,适用于大型复杂的软件项目。
- 适用场景: 大型、昂贵的系统级软件开发项目。
#### 十一、结对编程
- **优点**:
- 共同代码拥有和共同对系统负责。
- 承担了非正式的代码审查过程。
- 有助于提高代码质量。
- 不一定意味着编码速度更快。
通过以上知识点的梳理,我们可以更全面地理解软件工程的核心概念和技术细节,这对于软件开发人员来说是非常重要的基础知识。