- 什么是软件危机?软件危机的主要表现是什么?怎样消除软件危机?
软件工程的定义是:应用计算机科学、数学及管理科学等原理,开发软件的过程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。软件工程 = 工程原理 + 技术方法 + 管理技术
软件工程的目的是在规定的时间和开发经费内,开发出满足用户需求的、高质量的软件产品。其目标是实现软件研发与维护的优质高效和自动化。
软件工程7条基本原理。
(1)开发小组的人员应该优化组合且少而精。
(2)用分阶段的生存周期计划进行严格管理。
(3)坚持进行阶段评审。软件的质量保证工作不能等到编码阶段结束之后再进行。
(4)实行严格的软件产品控制。
(5)采用现代程序设计技术。
(6)软件工程结果应能清楚地审查。
(7)承认不断改进软件工程实践的必要性
(1) 什么叫软件生存周期? 软件生存周期各阶段如何划分?
软件生存周期(Software life cycle)是从开始研发软件到软件停止使用的整个过程。(完成阶段性工作的标志称为里程碑)软件生存周期组成包括软件策划、软件开发和运行维护三个时期。
(1) 开发策划。主要完成问题定义、可行性论证、制定开发计划和项目申报立项,明确“要解决什么问题”。
(2) 需求分析。需求分析和定义阶段任务不是
具体地解决问题,而是确定软件须具备的具体功能、
性能等,即“必须做什么”及其他指标要求。
(3) 概要设计.主要设计软件的总体(外部)结构,
结构组成模块,模块层次结构、调用关系及功能。
并设计总体数据结构等。
(4) 详细设计。对模块功能、性能、可靠性等进行具体技术描述,并转化为过程描述。
(5) 编写程序。又称编码(具体实现),将模块的控制结构转换成程序代码。
(6) 测试。为了保证软件需求和质量,在设计测试用例基础上对软件进行检测
(7) 运行维护。对交付并投入使用的软件进行各种维护,并记录保存文档。
需求分析主要是搞清软件应用用户的实际具体需求,包括功能需求、性能需求、数据需求、安全及可靠性要求、运行环境和将来可能的业务变化及拓展要求等,并建立系统的逻辑模型,写出“软件需求规格说明(SRS)”等文档。
需求分析的基本任务是通过软件开发人员与用户的交流和讨论,准确地分析理解原系统,定义新系统的基本功能、性能、开发时间、投资情况人员安排等,并获得需求规格说明书。
- 可行性分析主要任务主要是:决定软件项目“做还是不做(是否可行)”、及完成对可行项目的“初步方案”。
(可行性研究 )的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
可行性分析包括5个方面:技术可行性分析、经济可行性分析、社会可行性分析、开发方案可行性分析和运行可行性分析等
结构化分析导出的分析模型包括 数据模型、功能模型和行为模型,这些模型以“数据字典”为核心,结构化方法总的指导思想是“自顶向下、逐步求精”,其基本原则是抽象与分解。
SD法的总体设计步骤是:(面向数据流)
① 从 DFD 图导出初始的模块结构图。
② 改进初始的模块结构图。
总体设计主要确定总体架构、总体设计文档和方案,主要设计软件的总体(外部)结构,
组成模块,模块层次结构、调用关系及功能。
。总体设计的总原则是:由宏观到微观、逐步求精的原则
软件总体设计的任务主要包括:
软件的总体结构和模块外部设计。--软件结构图 (2)软件处理流程设计。 --模块、子模块及数据调用关系 (3)确定软件的功能并分配(与程序结构的关系)。 (4)数据总体结构设计(逻辑-物理-数据结构与程序的关系)。 (5)网络及接口概要设计。(6)运行概要设计。(7)出错处理概要设计。(8)性能可靠性及安全保密概要设计。(9)维护概要设计。
2.详细设计是具体细化,确定组成模块及联系、处理过程、数据库及网络、界面设计、软件设计文档(含具体方案)等。
详细设计阶段的主要任务包括: (1)模块功能及(处理)算法设计。 (2)模块内的数据结构设计。 (3)模块接口设计。 (4)其他设计(BD、网络、代码、接口、界面等)。 (5)模块测试用例设计 (6)编写详细设计文档。 (7)详细设计评审。
详细设计的原则:
(1)详细设计是为后续具体编程实现做准备。 (2)处理过程应简明易懂。
(3)选择恰当的描述工具表述模块算法。
6、软件测试的目的是什么?你认为应该怎么进行软件测试?
尽可能多的地找到软件中的错误,好的测试近可能发现,成功的测试是发现了
软测步骤:单元(白盒测试)、集成(普遍采用渐增式测试方法,目标是发现与接口有关的问题。)、确认(模拟环境用户黑盒,包括性能,目标是验证软件的有效性,软件需求规格说明书。软件功能和性能 == 用户要求 ??)、系统(实际环境下,整个产品系统测试,黑盒,安全,性能)
软测的内容:编写测试计划,设计测试用例,准备测试数据,编写测试脚本,执行测试,测试评估。
- 抽象是指提取事物(实体或对象)的本质特性而暂时不考虑其细节的方法。
- 耦合。是对软件结构不同模块之间互连程度的度量,是影响软件复杂程度的一个重要因素。
- 回归测试是指重新执行已经做过的测试的某个子集,以保证修改变化没有带来非预期的副作用。
- 调试是在程序实现成功的测试之后,诊断和改正程序中错误的过程。
- 内聚。标志一个模块内各个元素彼此结合的紧密程度,
- 信息隐蔽:主要是指模块所包含的“过程及数据”信息,对于其它模块需要隐蔽。
- 数据流图:以图形化的方式描述数据在系统中流动和处理的过程
- 称为黑盒测试 : 又称功能测试,白盒测试:
- 扇出。表示一模块直接控制其他模块的数量.
- Alpha测试由用户在开发者的场所进行并且在开发者对用户的“指导”下进行测试。该测试是在受控的环境中进行的。
- Beta测试由软件的最终用户们在一个或多个客户场所进行。
利用瀑布模型开发软件3个特点:
软件项目管理是指对软件项目的整个生存周期过程的管理,按照项目任务要求,合理的利用资源,为保证软件产品质量所做的工作。软件项目管理的实体是软件,其目标是为了使软件项目能够以预定成本按期保质的完成,而对人员、质量、过程、进度和成本等进行分析和管理的过程。
软件项目管理主要侧重在人员、质量、过程、进度和成本等几个方面。从管理过程看,软件项目管理可分为项目启动、项目计划、组织实施、项目监控和项目验收五个阶段
- 怎么保证软件质量
选模型,每个阶段名,干什么,每个阶段同行评审(确保文档质量),测试咋测
5、你认为软件项目开发中最难的是什么?举例说明?
需求分析:定义,现有系统调研。缺乏行业知识,业务不熟。需求经常变更。沟通有障碍,规格说明书
2、什么是项目风险?如何在工程化开发软件中降低项目风险?
项目风险是指软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。在工程化开发软件中降低项目风险的常用方法有:
- 建立风险记录册,在项目开始时,就要建立风险记录册,并定期更新。
- 分配责任,明确各团队成员在风险管理中的职责,并确保他们知道如何履行这些职责。
- 制定应对策略,制定应对各种可能的风险的计划,并为每个风险确定优先级。
- 定期进行风险评估,定期评估项目中的风险,并根据评估结果更新风险记录册和应对策略。
- 建立有效的沟通机制,确保所有团队成员都能及时沟通关于风险的问题,并让所有相关人员知道如何响应风险。
- 遵循变更管理流程,对任何可能影响项目的变更进行管理,以确保这些变更不会对项目造成负面影响。
- 采用敏捷开发方法,可以更快地响应变化和调整计划。
- 进行需求分析时,要充分考虑用户需求和业务流程,避免出现需求变更导致的风险。
- 在代码编写过程中,要遵循编码规范和最佳实践,避免出现代码质量问题导致的风险。
- 进行测试时,要充分考虑各种情况和边界条件,避免出现漏洞和缺陷导致的风险。
3、你认为软件开发中人员应该有几种,各自的职责是什么?
项目经理,开发人员,测试人员,维护工程师,设计师
4、你认为对于初学者来说,最合适的软件开发模型是哪个?
瀑布,优缺点
5、软件开发中的成本由哪些?尝试举例说明
人力成本:包括开发人员的工资、福利和培训费用等。
硬件成本:包括服务器、存储设备、网络设备等硬件设备的购置和维护费用。
软件许可成本:包括购买或租赁开发工具软件许可证的费用。
项目管理成本:包括项目管理工具的使用费用、会议费用、差旅费用等。
测试和调试的成本:各种测试和调试,以确保软件的质量和性能达到要求。
维护和更新的成本:维护和更新的成本: 软件开发完成后,需要进行维护和更新,以确保软件的稳定性和可靠性。
1、软件项目开发首先要做的事是什么?
可行性
2、你认为该软件系统应具备的最重要的特性是什么?
软件系统最重要的特性之一是可靠性。在工程化开发软件中,可靠性是指软件系统在各种情况下都能够正常运行,不会出现故障或错误。为了提高软件系统的可靠性,可以采用一些方法,例如:
采用模块化设计,将系统拆分成多个独立的模块,每个模块负责完成一个特定的功能,这样可以降低系统复杂度和出错率。
进行单元测试和集成测试,确保每个模块都能够正常工作,并且整个系统能够协同工作。
进行回归测试,在新版本发布之前,对已有的代码进行重新测试,以确保新版本不会引入新的错误或导致现有错误更加严重。
3、你认为怎样分工是最合理的?
按照模块(整个流程分析设计开发测试)划分、角色(前后端,数据库)、和人员技能相结合的方式划分。
5、需求变更指的是什么,如何实施?
需求变更是指在软件开发过程中,由于客户、用户或其他方面的原因,对原有的需求进行修改或调整。需求变更管理是识别、分析、跟踪和批准需求变更的过程。该过程的主要目的是尽量减少变更对项目进度和成本的影响。它还有助于保持可交付成果的质量 。
实施需求变更管理需要以下步骤:确定改变的需要、评估影响、制定计划、执行计划、监控结果和记录文档 。
4、目前流行的软件生命周期模型有哪些?分别举例说明?
软件工程开发的方法主要有哪些?
软件工程方法主要分为7种类型:1)面向功能方法。(2)面向数据方法。(3)面向对象方法 面向对象 = 对象 + 类 + 继承 + 消息通信
(4)面向问题方法.也称问题分析法 (5)面向方面的开发方法. (6)基于构件的开发方法. (7)可视化方法