软工[I.1] 个人作业:阅读和提问

项目 内容
这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)
这个作业的要求在哪里 [I.1] 个人作业:阅读和提问
我在这个课程的目标是 理解软件生命周期,学习设计模式与架构,提升实践能力
这个作业在哪个具体方面帮助我实现目标 理解软件工程设计的流程

问题一 :结对编程真的足够易于实现吗?

书中提到:

为什么要结对编程?每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。

在结对编程中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。代码被不断地复审,这样可以避免牛仔式的编程。

结对编程在书中被描述为:两个人一起使用同一台电脑,一个人负责编程,一个人负责复审,一小时后轮换角色,这种模式对于监督和多维度的思考都特别有效。但是在搭档互相没有配合经验,代码风格乃至行为准则不尽相同时,结对编程的进行是否会容易遇到问题?

问题二:如何在实际项目中平衡用户的核心需求(Need)与潜在需求?

书中这样写道:

你的创意解决了用户的什么需求? 这个需求可以是明确的, 公开的 (例如: 希望能上网玩三国杀). 也可能是说不清道不明的, 例如 - 以前没人说: 嗯, 如果我能找到这样一个网站, 我可以去偷菜, 就好了… 我们要充分了解用户的痛苦, 他们对已有软件, 服务不满意的地方。但是用户往往也不知道颠覆型的创新。 例如亨利 · 福特 当年发明汽车之前, 如果他深入用户之中, 了解他们的需求, 用户会告诉他 - 我希望我的马车更快一些!
需求可以进一步分析: 这是刚性需求,或辅助性需求?需求的量有多大? 需求会一直存在么? 很多同学想象力非常丰富,觉得一定会成千上万的用户来使用我想出来的软件。那么可以实践一下,找到10个潜在用户,他们表示“一定会试用你的软件”, 那么就算你找到了合适的需求 (Need).

例如,用户可能更关注功能的即时可用性,而潜在需求(如安全性)可能被忽视。同时,用户的核心需求也不一定能被很好的表达出来,这时候该从什么角度入手,将软件做的更好更有竞争力?

问题三: 根据项目规模的大小与所处阶段该如何合适地调整设计变更的默认响应模式?

14.6.6 DCR Tell mode v.s. Ask mode设计变更

在项目早期,如果大家觉得要做一个设计变更,可以用告知模式(Tell-mode)的形式,就是说,修改方必须通告所有关系人:“我在这里修改了某某界面。”但是修改方不必取得其他关系人(或者模块)的事先同意,就是说可以先行设计并编码。当然,如果其他关系人不同意,修改还是不能签入。

当项目进行到稳定阶段,Tell-mode 要改为请求模式(Ask-mode),这时,修改方必须先问“我是否可以在这里修改某某界面?”(当然还要有更详尽和充分的理由)得到肯定的答复后,才能进行修改。这时的默认回答是“不”。

书中讲到,在项目早期,修改方可以先自行先行设计并编码,但在稳定阶段需要请求后方可编码。这种变化是可以理解的,但在我们自己的项目中,这样的变化是否一定需要统一?这个度又该怎么控制?

问题四:在事后分析中,如何评估用户反馈对项目的影响?需求变更是否被有效管理?

根据现代软件工程讲义 11 项目管理 - 事后会议的内容,文中提到了回忆用户对重要功能的接受程度和我们事先的预想是否一致。

如果采纳反馈导致工作量加大,如何向组员证明其必要性,预先制定的贡献分分配方案是否需要来回修改?同时需求的变更是否也需要好好管理起来,而不只止于口头变更,不然有可能导致代码反复修改,甚至出现功能冲突。

问题五:如何在软件工程中切实地体会敏捷开发?

阅读完讲义中关于敏捷开发的部分,敏捷开发要求“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”,但目前分工明确、需求和ddl相对固定,这种条件下是否需要刻意去实践敏捷开发?

posted @ 2025-03-07 08:51  MoriTsukA  阅读(34)  评论(0)    收藏  举报