软件 = 程序+数据+文档
程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能
数据:使程序能够适当地操作信息的数据结构
文档:描述程序的研制过程,方法和使用的图文资料
软件具有复杂性,一致性,可变性和不可见性等固有的内在特性,所以软件开发的过程难以控制。
软件工程是怎么产生的:软件开发面临的挑战:
客户不满意(功能不是客户想要的,交付日期没有保障,有bug)项目过程失控(需求变动,交付质量不能预见,盲从流程)风险和成本问题(无法预测成本,导致预算超支)无力管理团队(无法评估开发人员的能力和工作进度,不知道如何提升效率)软件工程就是致力于探索软件开发问题的解决之道。
软件工程的四个发展阶段:
工程的通俗定义:团队协作解决大规模设计和建造的复杂问题
软件工程的定义:将系统性的,规范化的,可定量的方法应用于软件的开发,运行和维护,即把工程化的方法应用到软件,并且对这种方法进行研究。
软件工程的三个基本要素:过程,方法和工具
什么是好的软件?
主要从三个方面来考虑
如何判断软件是好的软件?
ISO9126模型
软件过程是为了获得高质量软件而实施的一系列活动。包括
问题定义 :得到构想文档和用户故事需求开发 :得到分析模型和软件需求规格说明软件设计 : 得到设计模型,软件体系结构文档和软件详细设计文档软件构造 : 得到源程序,目标代码和可执行构建软件测试 :得到测试规程,测试用例和测试报告 软件过程模型软件过程模型就是对软件过程的抽象化描述。
瀑布模型:将基本的开发活动看成一系列界限分明的独立阶段
缺点在于各个阶段的划分严格固定,阶段之间产生大量的文档。开发过程中间很难发现错误。适用于软件需求在开发初期就可以被完整地确定
的项目。
原型化模型:迅速建造一个可运行的软件原型,使用户和开发人员更好地沟通
迭代式模型:将描述,开发和验证交织在一起,在开发过程中建立一系列版本
增量模型和迭代模型是迭代化开发的两种形式。
增量模型:在每一个新的发布中逐步增加功能直到构造全部功能迭代模型:一开始提交一个完整系统,在后续发布中补充完善各子系统的功能可转换模型:利用自动化的手段,通过一系列转换将需求规格说明转换为一个可交付的系统
适合对安全性,保密性和稳定性要求高的模型
敏捷开发敏捷开发是一种基于更加紧密的团队协作,能够有效应对快速变化的需求,快速交付高质量软件的迭代和增量的新型软件开发方法。
敏捷方法是一组轻量级开发方法的总称,包含很多具体的开发过程和方法,其中最有影响力的两个方法是极限编程XP和Scrum方法
Scrum: 把整个软件的生命周期分成多个小的迭代(一般2~4周),每一次迭代就是一个小的瀑布模型,包括需求分析,设计,实现和测试等活动,结束时都要生成一个稳定和被验证过的软件版本。
流程解释:
产品经理根据用户需求和市场需要提出一个按照商业价值进行排序的产品订单,在每一个迭代的开始,开发团队要召开迭代计划会议,从产品订单中,挑选出一些优先级最高的条目,形成迭代任务,在迭代开发过程中,要进行每日站立会议,检查每天的进展情况,在迭代结束的时候,就会产生一个可运行的交付版本,由项目的相关人员参加产品的评审和回顾会议,来决定这个版本是否达到了发布的要求。
包含三个部分
开发角色 产品负责人:定义产品需求,确定需求优先级,迭代开始前调整需求和优先级Scrum主管:直接管理项目,组织会议团队成员 开发活动 迭代计划会议每日站立会议迭代评审会议迭代回顾会议 开发制品 产品订单迭代订单燃尽图 用户故事:从用户的角度来描述他所期望得到的功能书写用户故事的格式:身份+活动+价值
如作为一个网站管理员,我想要统计每天有多少人访问了网站,以便赞助商了解这个网站会给他们带来多少收益燃尽图:以图形化方式展示剩余工作量和时间的关系 软件需求
典型考题:
简述主过程,支持过程,辅助过程的概念并举例说明软件生存周期过程标准
主过程:软件从无到有到运营的过程,叫做主过程,包括获取,供应,开发,运行和维护。支持过程:为了保证基本过程的正常运行,目标的实现和质量的保证的一系列活动。包括文档,配置管理,质量保证,验收,确认,联合评审,审核,问题解决。辅助过程:包括管理,基础设施,改进和培训 系统需求分析和软件需求分析的关注点有何不同软件开发的主要活动 —— 需求工程
主过程中最复杂和重要的是开发过程,开发过程包括需求,设计,构造和测试。需求包括需求分析和需求管理,而需求分析部分又可分为系统需求分析和软件需求分析两部分
配置管理
软件配置管理贯穿整个软件开发过程,其主要任务是每当有了更改,与其相关的软件配置项都得到正确处理,新版本软件内部没有冲突。
简述软件生存周期模型的内置本质特征软件生存周期模型: 软件生存周期模型指的是软件从定义到终止的过程,活动和任务的框架。
它的本质特征是:
软件工程过程的建立与监控
软件工程过程的三个层次:
U 级 Universal Level :提供高层概要W级 Worldly Level:提供实际工作指导A级 Atomic Level:提供更加详细的求精定义软件工程过程的一般步骤:
确定过程模型确定活动确定活动间的关系文档化每个活动的其他有用信息文档化如何剪裁过程文档化如何改善过程获得过程的买入不断地使用和改善过程 在Infosys模型中,高层设计的主要过程包含哪几个方面的活动在Infosys模型中,高层设计是从计算机实现的角度提出满足用户需求的抽象的解决方案的过程
定义相关标准(编码,文档,用户接口等)确定 / 设计操作环境的详细资料进行模块设计开发物理数据库设计 在RUP模型的4个阶段中,测试工作流任务的重点是什么统一软件工程过程模型
RUP模型横向按照事件顺序来组织,将软件开发周期分成4个阶段 —— 初始,细化,构造,移交
其中测试工作流任务的重点是:评估过程和产品质量的趋势
敏捷过程
敏捷联盟的宣言:
个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档客户合作胜过合同谈判响应变化胜过遵循计划知道了还有敏捷这种轻量型的开发过程以后,如果把它和重型开发过程放在一起对比,区别在哪儿呢?
最优先做的事尽早和持续地交付有价值的产品欢迎需求的变更业务人员和开发团队应该天天在一起工作,面对面交流可以工作的软件产品是衡量工作的最主要的标准敏捷过程的核心:迭代地交付价值