软件的概念
1.概念:按照特定顺序组织的计算机数据和指令的集合
2.计算机=软件+硬件(软件=系统软件+应用软件)
3.它由软件------程序-----(子系统)------模块-------函数构成
软件团队
软件生命周期
分为六个阶段:
1.计划
工作内容:对资源、成本、效益和进度作出估计;制定完成研发计划。
2.需求分析
工作内容:对研发的软件进行详细的定义。一般由需求分析人员根据客户或者市场调研来编写完成:软件需求说明书SRS(SoftwareRequirementSpecification)
3.设计
工作内容:选取开发语言,开发架构等。该阶段会完成两个文档:概要设计(HLD)详细设计(LLD)
需求说明书SRS---程序(需求分析人员)
概要设计说明书HLD---模块(开发)
详细设计说明书LLD---函数(开发)
4.编码
工作内容:编写代码。复杂软件牵扯前端代码、后端代码、中间件等的编写。
5.测试
工作内容:检验软件是否符合需求。通过手工或者工具来检测软件是否满足功能、性能、易用性等要求。
6.运行和维护
工作内容:将软件交付用户投入正式使用。进入维护阶段,可能有多种原因需要对它进行修改,如软件错误、软件升级、增强功能、提高性能等。
软件开发模型
1.瀑布模型
定义:采用从上至下一次性完成整个软件产品的开发的方式,这是一种经典模型,提供了软件开发的基本框架。
计划--需求分析--软件设计--编码--测试--运行维护
优点:各阶段划分清晰,适合需求稳定的产品开发
缺点:单一流程,不可逆,风险显露得晚,纠正机会少,测试只是其中一个阶段,缺乏全过程测试思想
2.快速原型模型
定义:先迅速建造一个可以运行的软件原型,以便理解和澄清问题。开发人员与用户针对原型反复讨论,直到达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。
优点:克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,适合预先不能确切定义需求的软件系统的开发,能快速吸引用户,从而抢占市场先机
缺点:没有考虑软件整体质量和长期维护,大部分开发都不适合,往往只用于演示功能,若达不到质量要求,就会被抛弃,并重新设计
3.迭代模型
又称增量模型或演化模型,它将一个完整的软件拆分成不同的组件进行开发测试,确定此组件功能和性能满足用户需求,将组件集成到软件体系结构中。包括一系列的增量的步骤或迭代,每个迭代都包括很多的开发活动(需求、分析、设计、实包括一系列的增量的步骤或迭代,每个迭代都包括很多的开发活动(需求、分析、设计、实现等)
实现软件的每项功能反复求精的过程,是从模糊到清晰的开发过程。每次迭代是从功能的深度和细化程度来划分的。
迭代模型最适合使用与前期需求不稳定,需求多变的项目。
开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。
1.保证项目不要有失败的风险
2.保证代码质量
3.让客户等待时间最少
4.螺旋模型
融合了瀑布模型和快速原型模型,引入了风险分析。它将整个软件开发过程划分几个阶段,每个阶段前都会进行风险分析,如果能消除重大风险,则可以完成阶段任务。
5.敏捷模型
增量模型和迭代模型的组合,也是现在流行的模型。项目在构建初期被拆分成多个相互联系而又独立运行的子项目,然后开发人员迭代完成各个子项目,各个项目都要经过开发测试,在此过程中软件一直处于可使用状态。相比于传统的开发模型,敏捷模型更注重“人”在软件开发中的作用。
人和交互重于过程和工具。
可以工作的软件重于求全而完备的文档。
客户协作重于合同谈判。
随时应对变化重于循规蹈矩。
因此敏捷方法更适用于较小的队伍,40、30、20、10人或者更少。
软件质量
1.概念
就是软件与明确和隐性需求相一致的程度。软件质量不仅仅是软件功能的质量。
2.软件质量铁三角
1.组织健全2.技术领先3.流程科学规范
3.软件质量模型
软件质量模型由6个特征和12个子特性组成。
1.功能性:满足用户基本需求和隐式需求的能力
2.可靠性:维持规定级别的能力
3.可使用性:被使用、理解、学习的能力
4.效率:相对于所有资源的数量,软件可提供适当性能的能力
5.可维护性:被修改的能力,修改包括修正、优化、功能规格变更
6.可移植性:从一个环境迁移到另一个环境的能力。