一、软件工程概述
1、计算机软件
按照软件的应用领域,将计算机软件分为以下几类,包括系统软件、应用软件、工程科学软件、嵌入式软件、产品线软件、Web应用软件、人工智能软件、开放计算、网络资源、开源软件。
2、软件工程基本原理
1983年 B.W.Boehm提出软件工程的7条基本原理,包括:
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实现严格的产品管控
- 采用现代的程序设计技术
- 结果应能清楚的审查
- 开发小组的人员应少儿精
- 承认不断改进软件工程实践的必要性。
3、软件生存周期
- 可行性分析与项目开发计划。
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 维护
二、软件过程模型
软件开发中遵循一系列可预测的步骤(即路线图),该路线图成为软件过程。过程是活动的集合,活动是任务的集合。
能力成熟度模型(CMM)
CMM是对软件组织进化阶段的描述,随着软件组织定义、实施、测量、控制和改进其软件过程,软件组织的能力经过这些阶段逐步提高。CMM将软件过程改进分为5个成熟度级别。
能力成熟度模型(CMMI)
![](https://i-blog.csdnimg.cn/blog_migrate/2d9684e3ed5f0205dfc5e952a0e7c8d8.png)
软件过程模型
- 制定计划:确定软件目标,选定实施方案,明确项目开发限制条件;
- 风险分析:对所选方案分析,识别风险,消除风险;
- 实施工程:实施软件开发,验证阶段性产品;
- 用户评估:评价开发工作,提出修正建议,建立下一个周期的开发计划。
喷泉模型:
三、软件项目需求分析
软件需求
- 功能需求:考虑系统要做什么,什么时候做、如何修改或升级;
- 性能需求:考虑软件开发的技术性指标。如存储容量限制、执行速度、响应时间、吞吐量等;
- 用户或人的因素:考虑用户的类型;
- 环境需求:考虑软件应用的环境;
- 界面需求:考虑来自其他系统的输入,到其他系统的输出等;
- 文档需求:考虑需要哪些文档,文档针对哪些读者;
- 数据需求:考虑输入、输出格式,接收、发送数据的频率,数据的精准度、数据流量、数据保
- 持时间;
- 资源使用需求:考虑软件运行时所需要的资源;
- 安全保密需求:考虑是否需要对访问系统或系统信息加以控制;
- 可靠性要求:考虑系统的可靠性要求,系统是否必须检测和隔离错误,出错后重启系统所允许
- 的时间等;
- 软件成本消耗或开发进度需求:考虑开发是否有规定的时间表;
- 其他非功能性要求:如采用某种开发模式,确定质量控制标准、里程碑和评审、验收标准等。
需求分析的原则
- 必须能表示和理解问题的信息域;
- 必须能定义软件将完成的任务;
- 必须能表示软件的行为;
- 必须划分描述数据、功能和行为的模型;
- 分析过程应该从要素信息移向细节信息。
四、软件项目系统设计
概要设计
- 设计软件系统总体结构;
- 数据结构及数据库设计;
- 编写概要设计文档(概要设计说明书、数据库设计说明书、用户手册及修订测试计划);
- 评审。
详细设计
- 对每个模块进行详细设计;
- 对模块内部的数据结构设计;
- 对数据库进行物理设计,即确定数据库的物理结构;
- 其他设计(代码设计、输入/输出设计、用户界面设计);
- 编写详细设计说明书;
- 评审。
五、软件项目系统测试
测试应遵循的基本原则:
- 应尽早并不断的进行测试;
- 测试工作应避免原先开发软件人员或小组参与;
- 设计测试方案时要确定输入数据,还要根据系统功能确定预期输出结果;
- 设计测试用例时要设计合理、有效的输入条件,还要包含不合理、失效的输入条件。人们
- 在测试时通常忽略了对异常、不合理、意想不到的情况进行测试,这可能就是隐患;
- 在测试时要检查程序是否做了该做、不该做的事,多余的工作会影响程序的效率;
- 严格按照测试计划进行测试;
- 妥善保存测试计划、测试用例;
- 要精心设计测试用例。
测试的过程包括:
- 制定测试计划;
- 编制测试大纲;
- 根据测试大纲设计和生产测试用例;
- 事实测试;
- 生成测试报告
传统软件的测试策略
测试方法
调试
- 试探法:调试人员分析错误的症状,猜测问题所在的位置,一步步试探和分析问题所在。 该方法效率低,适用于结构比较简单的程序;
- 回溯法:调试人员从发现错误症状的位置开始,人工沿着程序的控制流程往回追踪代码, 直到找出问题根源为止。该方法使用与小型程序;
- 对分查找法:该方法主要用来缩小错误范围,直到把故障范围缩小到比较容易诊断为止;
- 归纳法:从测试所暴露的问题出发,收集所有正确、不正确的数据,并分析它们之间关系, 提出假想的错误原因,用这些数据证明或反驳,从而查出错误所在;
- 演绎法:根据测试结果,列出可能的错误原因,分析已有的数据,排除不可能和彼此矛盾 的原因,若有多个错误同时存在,要重新分析,提出新的假设,直到发现错误为止。
六、软件项目管理
项目管理涉及的范围
有效的软件项目管理集中在以下4点:人员、产品、过程、项目。
- 人员:参与项目的人员类型分为:项目管理人员;高级管理人员;开发人员;客户;最终 用户。
- 产品:开展项目计划之前,应先进行项目定义,即定义项目范围,其中包括建立产品的目的和范围、可选的解决方案、技术、管理约束等。
- 过程:对于软件项目来说,强调的是对其进行过程控制,通常将项目分解为任务、子任务 等。
- 项目:Reel 提出了包含如下 5 个常识的软件项目办法:明确目标及过程、保持动力、跟踪进展、做出明智的决策、进行事后分析。
项目估算
常用的估算方法有3种
- 基于已经完成类似的项目进行估算。
- 基于分解技术进行估算
- 基于经验估算模型的估算
成本估算方法。常用的成本估算方法、自顶向下估算方法、自底向上估算方法、差别估算法、其他估算法。
进度管理
进度管理的基本原则
- 划分:项目必须要被划分成若干可以管理的活动和任务。
- 相互依赖性:划分后的各个活动之间的依赖关系必须是明确的,例如有些任务必须按顺序完成,有的任务可以并发进行,有的任务只能在其他活动完成之后才能开展,有的则可以独立进行。
- 时间分配:必须为每个任务规定开始和结束时间。
- 工作量确认:每个项目都有预定的人员参与,项目管理者必须在任何时间节点中所分配的人员数量不能超过项目团队的总人数。
- 确定责任:为每个任务指定特定的团队成员进行负责。
- 明确输出结果:即每个任务都要有一个明确的输出结果,例如一个可交付的工作产品。
- 确定里程碑:每个任务或任务组都应该与一个项目里程碑相关联,当一个或多个工作产品经过质量评审并且得到认可时,标志着一个里程碑的完成。
进度安排
为了监控项目的进度计划和实际进展情况,表示各项任务之间进度的相互依赖关系,我们需要采用图示的方法。常用的方法有:甘特图、项目计划评审技术图。
软件质量管理
1.软件质量特性,软件质量模型由3个层次组成,第一层为质量特性,第二层为质量子特性,第三层为度量指标。
2.软件质量保证7个主要活动相关的各种任务。
- 应用技术方法。
- 进行正式的技术评审。
- 测试软件
- 便准的实施。
- 控制变更
- 度量
- 记录保存和报告
3.软件评审的内容
设计质量的评审包括:评审软件的规格说明书是否符合用户的要求;评审可靠性;评审保密措施实施情况;评审操作特性实施情况;评审性能;评审软件是否具有可修改性、可扩充性、可互换性和可移植性;评审软件可测试性;评审软件可复用性;
软件配置管理(SCM)
用于整个软件工程过程,主要目标是识别变更、控制变更、确保变更正确实现、报告有关变更。
1.基线。 软件生命周期中各开发阶段的一个特定点,作用是将各阶段的工作划分更加正确。
2.软件配置项。
3.版本控制
4.变更控制
七、软件度量
![](https://i-blog.csdnimg.cn/blog_migrate/0b822b346ee623020d7015132af33cbf.png)
2.面向功能的度量
它以功能测量数据为规范化值。应用最广泛的面向功能度量是功能点(FP)。功能点是根据 软件信息域的特性及复杂性来计算的。