面试准备-软件工程

参考:

  1. 《程序员面试笔试宝典》(何昊、叶向阳)

标准的软件开发过程:

1)可行性分析:要确定开发目标和总要求,一般要考虑技术是否可行,收益是否可行、用户操作是否可行,是否有法律风险。战略专家→《可行性分析报告》

2)需求分析:领域专家+系统架构师→《需求分析说明书》

3)设计:概要设计(结构)+详细设计→设计说明书、业务用例文档、技术用例文档

4)编码与实现:接口文档、关键算法文档

5)测试:贯穿整个开发过程。白盒/黑盒测试→单元测试报告、集成测试报告、系统测试报告

6)运行与维护:修改、维护、再开发

常见的软件开发过程模型:

1)瀑布模型

瀑布模型将软件生命周期划分为可行性分析、需求分析、设计、代码实现、测试、安装与维护6个基本活动,并且规定了它们自上而下的固定次序,形如瀑布流水,逐层下落。上一个环节完成后,进行验证,如果验证通过,则该结果可以作为下一环节的输入并继续进行,否则需要返回修改。它的优点是有按阶段划分的检查点,开发者每次只需要关注一个阶段,可以保证最终按时交付,缺点是:a)大量文档 b)用户只有在开发末期才能看到结果,难以调整 c)早期的错误(比如设计上的)要在最后才能发现,导致放大问题。

2)原型模型

原型模型是增量模型的一种形式。在开发真实系统之前,首先要构建一个简单的系统模型,实现客户与系统的交互。客户在使用过程中,不断发现问题,进而细化系统要求。开发者在已有模型的基础上,通过调整原型来满足客户需求,进而开发出客户满意的系统。它的重点是必须快速建立原型,并快速修改。

3)螺旋模型

综合了瀑布模型与原型模型的特点,强调风险分析。每一轮原型都要做风险分析,因此缺点是要求客户接受风险分析,因此需要相关知识,也需要用户参与平价,同时过多的迭代次数也会增加开发成本和时间。

4)增量模型

软件被视作一些列的构件来设计、实现、集成和测试。每次交付的是部分可运行的子系统。优点是较好地适应用户需求的变化;缺点是每次加入新子系统时,可能破坏已构建好的部分;也容易破坏整体性。第一个增量是核心产品。

5)RUP模型

Rational Unified Process,是Rational公司提出的一个通用框架。每个阶段都可以分解、迭代,每一个迭代都是完整的开发循环,都会产生可运行版本。
在这里插入图片描述

横轴是时间组织,纵轴是开发中的活动。前者常用属于有cycle,phase,iteration,milestone;后者有activity,artifact,worker,workflow.

1)初始阶段Inception:以需求分析为主,建立整体结构,确定项目边界,结束时候milestone是生命周期目标里程碑,用于评价项目基本的生存能力。

2)细化阶段Elaboration:设计及确定体系结构,制定工作计划与资源要求。结束时候的milestone是生命周期结构里程碑,为系统的结构建立了管理基准并使项目能在构建阶段中进行衡量。

3)构建阶段Construction:构建产品并继续演进需求、结构、计划直到提交。它的milestone是初始功能里程碑,决定了是否可以在测试环境中部署。

4)交付阶段Transition:交付客户,综合测试。milestone是产品发布里程碑。

几种模型的比较

模型特点适用范围
瀑布模型分阶段,每个阶段完成后有评审,允许反馈,要求提前确定需求需求定义完善,不易变更的系统
原型模型不需要完备定义,支持用户参与,能适应用户需求的变化需求复杂、动态变化、难以确定的系统
螺旋模型综合了瀑布和原型,引进了风险分析需求难以获取和确定,开发风险较大
增量模型增量式开发,允许开发活动并行技术风险较大,用户需求较为稳定的系统
RUP模型可改造、扩展和建材,可设计、开发、维护复杂、需求不确定的系统,开发组拥有丰富的软件开发和管理经验

敏捷开发

是将一个大项目分成多个相互联系,但也可以独立运行的小项目并分别完成,在此过程中软件一直处于可使用状态。强调团队合作及与业务专家之间的协作、面对面交流、频繁交付新软件、紧凑而自我组织型的团队、能很好地适应需求变化的代码编写和团队组织方法,更注重软件开发中人的作用。

常见的敏捷开发方法:

自适应软件开发Adaptive Software Development、水晶方法Crystal Method、特性驱动开发Feature Driven Development、动态系统开发方法Dynamic Systems Development Method、极限编程Extreme Programming

敏捷开发的12条原则:

1)按优先级安排,尽早、持续地交付有价值的软件给用户。通过用户故事来罗列需求,虽然编写文档但是工作重点在口头交流

2)即使到了系统开发的后期,也欢迎改变需求

3)经常性地交付可以工作的软件

4)开发期间,业务人员和开发人员要一起工作

5)激励个人构建项目,提供必须的环境和支持

6)采用面对面交谈

7)使用可以工作的软件作为首要的进度度量标准

8)敏捷过程要保持可持续的开发进度

9)不断地关注优秀的技能、设计

10)简单的方式完成

11)使用自组织团队。管理者不发号指令,而是让团队自己寻找最佳工作方式

12)每隔一段时间,团队要反思如何梗有效地工作,改进工作

UML中最常用的图:类图、对象图、用例图、交互图(时序图、协作图)、状态图、活动图、构件图、部署图

SCM(Software Configuration Management)

软件配置管理贯穿于整个软件生命周期,是一种标识、组织和控制修改的技术,用于界定软件的组成项目,对每个项目的变更进行管控,并维护不同项目之间的版本关联,使得项目可以被追溯。包括标识、版本控制、变更控制、配置审计、配置报告几个部分

常见工具:SourceSafe, CVS,ClearCase

使用SCM的好处:

1)解决了由于经费和时间有限带来的问题,减少升级次数

2)使得开发过程得到规范化管理,节约人力和时间

3)能有效管理人员流动,减少人工错误

4)避免了未经测试的软件加入到产品中

5)使得用户与开发商之间能有效沟通,保障用户的利益

6)使得软件生产规模化、构件化,降低成本

CMMI (Capability Maturity Model Integration)

由美国国防部、美国国防工业协会、卡内基梅隆大学共同开发的一项标准。CMMI共有5个级别,级别越高,风险越低,效率和质量越高。

1)初始级

也称无政府状态anarchy或混乱状态chaos。指没有规范过程的项目

2)可重复级

有需求管理、项目规划、项目监督与控制,也有审查等,可以保证项目实施取得成功

3)定义级

不仅对项目实施有整套的管理措施,也能将其制度化,因此可以在不同类的项目上取得成功

4)管理级

在定义级的基础上还实现了数字化管理,能通过量化实现流程的稳定。

5)优化级

在管理级的基础上,能主动改善流程,能根据实际不断调整软件生产过程以求达到最佳。

如何提高软件质量?

软件质量不是一个纯技术问题,而是一个系统的工程性问题。包括:

1)符合目标:开发者是否在做客户要求做的事情

2)符合需求:软件产品是不是在做客户需要做的事情

3)符合实际需求:包括客户明确说的和隐含的

提升软件质量的方向

1)规范产品开发过程

2)做好需求分析→面向对象设计、UML等

3)做好设计

4)加强规范:编程规范、版本控制

5)全面的质量控制:每个步骤上做严格的验证与确认

6)加强文档管理

7)加强代码管理:走读、评审

8)进行简单的度量分析活动

9)进行软件测试:全流程的测试,包括开发前期的静态测试

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值