第一章:初始软件工程
第一次课学习存在的问题
1、什么是软件危机?
答:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
2、软件危机的主要形式是什么?
答:1、软件开发进度难以预测。拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。
2、软件开发成本难以控制。投资一再追加,令人难于置信。往往是实际成本比预算成本高出一个数量级。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。
3、用户对产品功能难以满足。开发人员和用户之间很难沟通、矛盾很难统一。往往是软件开发人员不能真正了解用户的需求,而用户又不了解计算机求解问题的模式和能力,双方无法用共同熟悉的语言进行交流和描述。在双方互不充分了解的情况下,就仓促上阵设计系统、匆忙着手编写程序,这种“闭门造车”的开发方式必然导致最终的产品不符合用户的实际需要。
4、软件产品质量无法保证。系统中的错误难以消除。软件是逻辑产品,质量问题很难以统一的标准度量,因而造成质量控制困难。软件产品并不是没有错误,而是盲目检测很难发现错误,而隐藏下来的错误往往是造成重大事故的隐患。
5、软件产品难以维护。软件产品本质上是开发人员的代码化的逻辑思维活动,他人难以替代。除非是开发者本人,否则很难及时检测、排除系统故障。为使系统适应新的硬件环境,或根据用户的需要在原系统中增加一些新的功能,又有可能增加系统中的错误。
6、软件缺少适当的文档资料。文档资料是软件必不可少的重要组成部分。实际上,软件的文档资料是开发组织和用户的之间权利和义务的合同书,是系统管理者、总体设计者向开发人员下达的任务书,是系统维护人员的技术指导手册,是用户的操作说明书。缺乏必要的文档资料或者文档资料不合格,将给软件开发和维护带来许多严重的困难和问题。
3、什么是软件退化?
答:软件长期不更新,已经落后于同期其他类型的软件。
第二章:编写高质量代码
第二次课存在的问题
1、怎样正确的将模块导入?
答:模块的导入总应该放在文件顶部,导入时应该在模块注释和文档字符串之后,在全局变量之前。
2、什么是自文档化的代码?
答:就是要在代码中多写注释,代码文件书写格式规范化
3、什么是python程序异常?
第三次课存在的问题
1、代码性能优化的步骤是什么?
答:先优化代码数据结构和算法再优化执行代码。
2、怎样有效的提高代码的执行效率?
3、代码审查的前提必须要程序编译成功吗?
答:代码审查的前提必须要程序编译成功。
第三章:单元测试
第四次课存在的问题
1、使用白盒测试时,怎样确定测试数据?
答:使用白盒测试方法时,确定测试数据的根据是程序的内部逻辑。
2、代码覆盖标中,哪种逻辑覆盖发现错误能力最低?
答:
3、怎样提高测试效率?
第四章:软件开发过程
第五次课存在的问题
1、增量模型的适用范围是什么?
2、瀑布模型适合哪类软件系统的开发?
3、软件开发过程中程序设计的核心是什么?
第六次课存在的问题
1、敏捷开发和传统开发的区别?
答:
与传统开发方法相比,在敏捷开发的整个过程中,有以下几个主要的特点:
(1)敏捷开发的过程有着更强的适应性而不是预设性,从敏捷宣言的第四条响应变化高于预设计划便可以看出来。因为软件开发过程的本身的不可预见性,很多用户在项目开始时不可能对于这个项目有着一个完整而明确的预期。很多对软件的预期都在后期的修改和完善过程中产生。因此高适应性显然更加符合软件工程开发的实际。而敏捷开发实现其适应性的方式主要在于,第一,缩短把项目提交给用户的周期;第二,增加用户,业务人员,开发人员这三者之间的交流;第三,通过减少重构的成本以增加软件的适应性。
(2)敏捷开发的过程中,更加的注重人的因素。在传统软件工程中,个人的因素很少的被考虑到分工中,每个个体都是只是整个代码开发机器的一个小小的螺丝钉,个人的意志和创造力很大程度上的被抹去为了更好的为集体服务。而在敏捷开发过程中,每个个人的潜力被充分的考虑,应用什么技术很大程度上直接由在第一线开发的技术人员决定;每个人的特点和创造力都可以充分地发挥,这样开发出来的软件更加的具有生命力,因为他融入了开发者的心血和创意,开发者不再是进行机械的乏味的堆砌,而是创造属于自己的艺术品,这样的条件下产生的代码必然在质量上更占优势。
(3)在敏捷开发的过程中,整个项目是测试驱动的而不是文档驱动的。不仅每个模块有着自己的相应的测试单元,开发人员在开发自己的模块的过程中必须保证自己所开发的模块可以通过这一单元的测试,并且集成测试贯穿了整个开发过程的始终。集成测试每天会进行十几次甚至几十次,而不是像传统方法一样只有当各个模块的编码都结束了之后再进行联合调试。这样,在软件开发的进程中每一点改动所引起的问题都容嘉容易暴露出来,使得更加容易在错误刚刚产生的时候发现问题从而解决问题。这样就避免了在最后整个系统完成时错误隐藏的太深给调试造成极大的困难。
2、scrum迭代开发的优缺点是什么?
答:优点:
- 测试和开发保持同步关系
- 测试包括了需求测试和设计
- 能更早发现软件的缺陷
缺点:无法支持迭代,一个阶段结束后才能进行下一阶段,不适应需求变化多的项目
3、什么样的软件系统适合敏捷开发方法?
第五章:团队开发管理
第七次课存在的问题
1、软件项目规划的第一步是什么?
答:开发问题的描述。
2、在软件开发的各种资源中,什么是最重的资源?
3、软件的什么特性会引起项目协调困难?
第六章:敏捷开发与配置管理
第八次课存在的问题
1、软件配置管理的目的?
答:计算机系统的文件、端口、进程等的变化信息,以监控系统的变更状况发现其中的异常,以便及时采取相应的措施保护系统安全。这方面推荐你用聚铭配置安全评估系统。
2、软件配置文件在哪里?
3、燃尽图主要用来干什么?
答:用来可视化管理
第七章:需求获取
第九次课存在的问题
1.在需求分析的过程中,需求分析员要从用户那里解决的最重要的问题是?
答:要求软件做什么。
2.需求诱导技术的类型有?
答:专题小组会议,头脑风暴
3.需求验证的方法哪种最好?
第八章:用例建模
第十次课存在的问题
1、用例图的主要元素是什么?
答:1、参与者 2、用例 3、关联
2、用例建模中参与者的定义是什么?
答:关注角色。
3、用例建模的过程是什么?
答:用例图——用例提纲——用例详细规约
第九章:面向对象设计
第十一次课存在的问题
1、面向对象中,封装的含义是什么?
答:保证对象内部的数据只能通过操作来访问。
2、面向对象中,设计抽象接口的含义是什么?
答:向用户暴露尽可能少的实现细节。
3、当一个顺序图过大时最好的处理方法是什么?
答:添加ref框,建立顺序图间的引用关系。