简答题
软件工程概述
- 软件的定义:软件=程序+数据+文档
- 软件作用:一方面是一种产品(提供计算能力;产生,管理,获取,修改,显示,传输信息),另一方面是开发其他软件产品的工具(IDE,操作系统,网络软件)
- 软件危机的概念:在计算机软件的开发和维护中所遇到的一系列严重的问题
- 软件危机产生的原因: 与软件本身特点有关(过程难控制,复杂性随规模指数上升);对用户需求的认知不准确;实践中采用错误的方法或技术;轻视软件维护/维护方法不正确
- 消除软件危机:应用软件工程的工具和方法
- 应用软件工程的目的:既满足用户需求又具有良好工程特性的软件产品,从而实现商业价值和用户满意度
- 软件工程定义:应用系统化,规范化,可量化的方法来开发,运行和维护软件,即将工程化的方法应用到软件;以及对上述方法的研究
- 软件工程三要素:工具,方法,过程
软件过程
- 软件过程的概念:为创建高质量软件,所需完成的一系列活动,动作和任务的框架
- 软件过程模型的概念:是软件开发全部过程,活动和任务的结构框架的一种概括;它能直观表达软件开发全过程,明确规定要完成的主要任务,活动或开发策略。
- 软件周期五个阶段: 沟通->策划->建模->构建->部署;
- 软件周期三个时期:软件定义时期->软件开发时期->软件维护时期
| 模型名称 | 特点 | 优点 | 缺点 | 适用场景 | 具体例子 |
|---|---|---|---|---|---|
| 瀑布模型 | 顺序执行,每个阶段完成后才能进入下一个阶段 | 易于理解和管理,文档化程度高 | 缺乏灵活性,难以适应需求变更 | 需求明确、变化不大的项目 | 政府IT项目,如工资系统开发,典型的案例是NASA的阿波罗计划 |
| 增量模型 | 分阶段开发,每个阶段交付可工作的软件部分 | 提高了灵活性,减少了风险 | 需要良好的项目管理,可能增加总体开发时间 | 需求变化较少,但需要逐步交付的项目 | 银行系统的升级,每个增量都包含新功能但不影响现有服务 |
| 原型模型 | 快速构建原型,然后根据用户反馈迭代 | 快速验证概念,降低开发风险 | 可能存在原型与最终产品不一致的风险 | 需求不明确或需要快速验证概念的项目 | 移动应用的早期开发,通过原型测试用户体验和界面设计 |
| 螺旋模型 | 结合了瀑布模型和原型模型,通过迭代和增量逐步完善产品 | 风险管理能力强,适应性强 | 过程复杂,需要高水平的项目管理 | 风险较高、需求变化可能的项目 | 复杂的软件开发项目,如大型企业的ERP系统实施 |
| 敏捷开发 | 强调迭代和增量,团队协作,快速响应变化 | 提高了开发效率,更好地满足用户需求 | 需要高度的团队协作和自我管理 | 需求变化频繁,需要快速交付的项目 | 互联网产品的开发,如Spotify的持续迭代以适应用户反馈 |
项目管理
- 4P原则:人员,产品,过程,项目(People,Product,Process,Project)
- 项目度:
- 面向规模的度量:
| 千行代码(KLOC) | 生产率(PM) | 人月(Person-Month) | 每千行代码成本(CKL) | 代码出错率(EKRL) | 文档与代码比(DL) |
|---|---|---|---|---|---|
| L/E (千行/人月) | 项目参与人数*工作月数 | S/L (万元/千行) | NE/L (行/千行) | Pd/L ( 页/千行) |
- 面向功能的度量:FP=UFC × TCF
| UFC | TCF |
|---|---|
| 未调整功能点计数 | 技术复杂度因子 |
| 五类功能组件各自的计数*对应的复杂因子再求和 | 十四个复杂性调节因素打分之和(DI)*0.01+0.65 |
- 项目估算(三点期望值法):(最大值+4*最可能值+最小值)/6【代码行或功能点】
- 任务网络图找关键路径:任务开始到结束的任意路径中,所有弧权重之和最大的那条路径
- 甘特图:是一种项目管理工具,它通过条形图的形式直观地表示项目的时间进度